1. ホーム
  2. PHP2Shell 脆弱性チェッカー

PHP2Shell 脆弱性チェッカー

PHP のバージョンとサーバー会社を選ぶだけで、PHP2Shell(CVE-2026-109618 / 109619)の危険度と今やることが分かる。

結論

  • PHP 8.1 以前(7.4・8.0 など)は公式の修正版なし。PHP 8.4 か 8.5 への移行が必要。
  • PHP 8.2〜8.5 は 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 以降なら修正済み。
  • PHP 8.2 は修正版ありだが、2026年12月31日で公式の保守が終わる。
  • いちばん危ないのは mod_php(Apache に PHP を組み込む方式)。

トップページを1回読むだけ。分かった内容は下に自動で入る(違っていたら選び直す)。

1PHP のバージョン
細かい番号が分かる場合(例 8.3.36)
2サーバー会社
3サイトの種類

PHP の移行、こんなことになっていない?

自分で上げると、こうなることがある

よくある失敗

  • サイトが真っ白になる:古いプラグインが新しい PHP で止まり、画面が出ない
  • 検索順位が落ちる:エラーのページや遅い表示が続くと、検索の評価が下がる
  • フォームが届かない:問い合わせや注文が止まっていても、何日も気づかない
  • 元に戻せない:バックアップを取らずに切り替えて、前の状態が分からない
  • ネットショップが止まる:カートや決済だけが動かなくなる
  • 気づいたら改ざん:PHP2Shell の対応が遅れ、知らない管理者やファイルが増えている

PHP診断が引き受けること

  • 今のサイトを壊さない:作業前にファイルとデータベースをまるごとバックアップ
  • 本番の前に試す:テスト環境で新しい PHP を動かし、止まる所を先に直す
  • 検索の評価を落とさない:URL・ページの中身・検索向けの設定は変えない
  • 止まる時間をつくらない:切り替えは短時間で、すぐ表示を確かめる
  • フォーム・決済まで確認:トップ・お問い合わせ・管理画面・カートを実際に動かす
  • すぐ戻せる:不具合が出たら、元の状態に戻す
まず無料で診断する(1分) 診断のあと、そのまま相談・依頼できる

PHP2Shell とは

PHP 本体に見つかった2つの脆弱性の通称。2026年10月21日に修正版が公開された。

何が起きるか

  • ログインなしで、外部からサーバー上のプログラムを実行される
  • アプリのプログラムが動く前に攻撃が届く実例がある
  • いちばん危ないのは mod_php(Apache に PHP を組み込む方式)
  • 危険度は CVSS 4.0 で 9.2(10 点満点)

原因(2つの脆弱性)

  • CVE-2026-109618:メモリ不足の処理の途中で、作りかけのデータを正しいものとして扱ってしまう
  • CVE-2026-109619:解放したはずのデータを、同じワーカーの次のリクエストが使ってしまう
  • 修正版の公開前に、内容が外に漏れた

すぐ更新できないときの応急処置

php.net 公式の一時しのぎ。完全に防げるのは更新だけ。

CVE-2026-109619 への応急処置

  • session.upload_progress.enabled=0 にして、すべてのワーカーを再起動
  • 設定は php.ini・FPM のプール・サーバーの設定で行う(ini_set() や .user.ini では効かない)
  • PHP 8.5 は fatal_error_backtraces=0 も設定
  • エラーを隠す(display_errors や @)だけでは効かない

CVE-2026-109618 への応急処置

  • memory_limit=-1(FPM のプールか Apache の設定で)
  • アップロード不要なら post_max_size = 8M、必要なら 32M
  • Web サーバーやプロキシで、リクエストの大きさ・項目数・ヘッダー数を制限
  • メモリの上限はコンテナや cgroup でかける(RLIMIT_AS は使わない)

レンタルサーバーでは、これらを利用者が変えられないことが多い。その場合はサーバー会社の対応を待つか、PHP のバージョンを切り替える。

PHP バージョン別の状況

2026年10月22日時点(php.net の Supported Versions・Unsupported Branches より)。

バージョンPHP2Shell修正版公式の保守
PHP 8.5修正版あり8.5.12 以降2029年12月31日まで
PHP 8.4修正版あり8.4.27 以降2028年12月31日まで
PHP 8.3修正版あり8.3.36 以降2027年12月31日まで
PHP 8.2修正版あり・年内に保守終了8.2.35 以降2026年12月31日まで
PHP 8.1修正版なしなし(最終版 8.1.34)2025年12月31日に終了
PHP 8.0修正版なしなし(最終版 8.0.30)2023年11月26日に終了
PHP 7.4修正版なしなし(最終版 7.4.33)2022年11月28日に終了
PHP 7.3修正版なしなし(最終版 7.3.33)2021年12月6日に終了
PHP 7.2修正版なしなし(最終版 7.2.34)2020年11月30日に終了
PHP 7.1修正版なしなし(最終版 7.1.33)2019年12月1日に終了
PHP 7.0修正版なしなし(最終版 7.0.33)2019年1月10日に終了
PHP 5.6修正版なしなし(最終版 5.6.40)2018年12月31日に終了
PHP 5.4〜5.5修正版なしなし2016年までに終了

7.4・8.0・8.1 向けの修正の部品(バックポート)は公式の告知からリンクされているが、正式な版としては出ていない。自分で PHP を組み立てる人向け。

移行で動かなくなる主な原因

php.net の移行ガイドから、古いサイトや古いプラグインで問題になりやすいものだけを抜き出した。

7.4 → 8.0

  • create_function()・each()・money_format() などが削除
  • 0 == "foo" が false に(文字列と数値の比較が変わった)
  • 未定義の定数が警告ではなくエラーに
  • クラス名と同じ名前のメソッドがコンストラクタにならない
  • 非 static メソッドを Class::method() で呼ぶとエラー
  • implode() の逆順の引数が使えない

8.0 → 8.1

  • 内部関数に null を渡すと非推奨の警告(strlen(null) など)
  • htmlspecialchars() の既定が ENT_QUOTES に
  • MySQLi が既定でエラー時に例外を投げる
  • PDO(MySQL・SQLite)が数値を文字列でなく int / float で返す

8.3 → 8.4

  • E_STRICT の定数が非推奨
  • DBA・ODBC・SOAP の一部で is_resource() の判定が効かない
  • round() に無効な mode を渡すと ValueError
  • OPcache の JIT の既定値が変わった

PHPCompatibility(PHP_CodeSniffer のルール)を使うと、移行の前にプログラムを機械的に調べられる。

よくある質問

どの PHP のバージョンが影響を受ける?

PHP 5.4〜8.5 の幅広い版。修正版は PHP 8.5.12・8.4.27・8.3.36・8.2.35。PHP 8.1 以前には公式の修正版が出ていない。

PHP 7.4 や 8.1 はどうすればいい?

公式の修正版がないため、PHP 8.4 か 8.5 への移行が必要。移行の前にバックアップを取り、WordPress ならプラグインとテーマを先に更新する。

PHP 8.2 なら安心?

修正版(8.2.35)は出ているが、PHP 8.2 は 2026年12月31日で公式の保守が終わる。年内に 8.4 か 8.5 へ移っておくのが安全。

レンタルサーバーなら何もしなくていい?

多くのサーバー会社が修正を順に入れている。ただし PHP 8.1 以前を選んでいるサイトは、PHP 自体の保守が終わっている。サーバー会社の告知と、自分の PHP のバージョンの両方を確認する。

PHP を新しくするとサイトが壊れない?

古いプラグインや古い書き方のプログラムは、新しい PHP で動かなくなることがある。バックアップを取り、テスト環境で試してから切り替えるのが安全。

URL を入れると、サイトに何かされる?

トップページを普通に1回読むだけ。負荷のかかる調査や、攻撃を試すことはしない。

参考にした情報