緊急PHP2Shell(CVE-2026-109618 / 109619)公表から1日。PHP 8.1 以前は修正版なし今すぐ診断
  1. ホーム
  2. ブログ
  3. バージョン別の対策

PHP 7.0〜7.3 は PHP2Shell で危険?修正版の有無と移行の手順

公開
著者
編集部

PHP 7.0〜7.3 は PHP2Shell(CVE-2026-109618 / 109619)の影響を受ける。公式の修正版はない。公式の保守も終わっている。今やることと、移行で動かなくなる原因をまとめた。

PHP 7.0〜7.3 のサイトが PHP2Shell でどれだけ危ないか、修正版の有無、今やることをまとめた。数値はすべて php.net の公式情報にもとづく。

この記事の要点
  • PHP2Shell の影響:受ける
  • 公式の修正版:出ていない
  • 公式の保守:2019年1月10日〜2021年12月6日に終了(最終版 7.0.33〜7.3.33)
  • 判定:危険

PHP 7.0〜7.3 の状況

項目内容
PHP2Shell の影響影響あり
公式の修正版なし
公式の保守2019年1月10日〜2021年12月6日に終了(最終版 7.0.33〜7.3.33)
判定危険
  • PHP 7.0-7.3 は公式の保守がすでに終わっていて、PHP2Shell の修正版は出ていません。
  • サーバー会社が独自に修正を入れている場合もあるが、古い PHP は今後も同じことが起きる。

PHP2Shell で起きること

  • ログインなしで、外部からサーバー上のプログラムを実行される
  • いちばん危ないのは mod_php(Apache に PHP を組み込む方式)。アプリのプログラムが動く前に攻撃が届く実例がある
  • 危険度は CVSS 4.0 で 9.2(10 点満点)
  • CVE-2026-109618:メモリ不足の処理の途中で、作りかけのデータを正しいものとして扱ってしまう
  • CVE-2026-109619:解放したはずのデータを、同じワーカーの次のリクエストが使ってしまう

今やること

  1. PHP 8.4 か 8.5 へ移行する。
  2. 移行の前に、サイトをまるごとバックアップする。
  3. 先にプラグインとテーマを新しくしておく(移行で壊れにくくなる)。

移行先は PHP 8.4 か 8.5

移行先公開日公式の保守
PHP 8.42024年11月21日2028年12月31日まで
PHP 8.52025年11月20日2029年12月31日まで

保守が長い版に移れば、次に脆弱性が見つかっても修正版を受け取れる。

古い PHP の「独自修正」はつなぎ

7.4・8.0・8.1 向けの修正の部品(バックポート)は公式の告知からリンクされているが、正式な版としては出ていない。サーバー会社や延長サポートの会社が独自に修正を入れることもあるが、PHP 自体の保守は戻らない。移行までのつなぎと考える。

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

PHP 7.0〜7.3 から 8.4 へ移るときに、古いプラグインや古い書き方のプログラムで問題になりやすいもの(php.net の移行ガイドより)。

7.4 から 8.0 への変更

  • create_function()・each()・money_format()・get_magic_quotes_gpc() などが削除
  • 0 == "foo" が false に(数値と文字列の比較の仕方が変わった)
  • 未定義の定数が、警告ではなくエラーに
  • クラス名と同じ名前のメソッドが、コンストラクタとして扱われない
  • 非 static メソッドを Class::method() の形で呼ぶとエラー
  • implode() の逆順の引数が使えない
  • __autoload() が削除(spl_autoload_register() を使う)
  • PDO の既定のエラーモードが「例外を投げる」に
  • 既定の error_reporting が E_ALL になり、隠れていた警告が出る

8.0 から 8.1 への変更

  • 内部関数に null を渡すと非推奨の警告(strlen(null) など)
  • htmlspecialchars() などの既定が ENT_QUOTES | ENT_SUBSTITUTE に
  • MySQLi が既定でエラー時に例外を投げる
  • PDO(MySQL・SQLite)が数値を文字列でなく int / float で返す
  • 必須の引数より前にある、既定値つきの引数は必須扱い

8.3 から 8.4 への変更

  • E_STRICT の定数が非推奨
  • DBA・ODBC・SOAP の一部で is_resource() の判定が効かない
  • round() に無効な mode を渡すと ValueError
  • OPcache の JIT の既定値が変わった(opcache.jit を明示する)
  • str_getcsv() の区切り文字などの長さの確認が厳しくなった

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

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(upload_max_filesize はそれより小さく)
  • Web サーバーやプロキシで、リクエストの大きさ・項目数・ヘッダー数・入れ子の深さを制限
  • メモリの上限はコンテナや cgroup でかける(RLIMIT_AS や RLIMIT_DATA は使わない)

レンタルサーバーでは、これらを利用者が変えられないことが多い。

移行の手順

  1. サイトのファイルとデータベースを、まるごとバックアップする
  2. WordPress なら、本体・プラグイン・テーマを先に新しくする
  3. テスト用の環境で、新しい PHP で動くか試す
  4. 本番の PHP を切り替え、トップ・フォーム・管理画面を確かめる
  5. おかしければ、すぐ元の版に戻す

よくある質問

PHP 7.0〜7.3 は PHP2Shell の影響を受ける?

受ける。公式の修正版は出ていない。

PHP 7.0〜7.3 のまま使い続けても大丈夫?

おすすめしない。公式の保守が終わっていて、PHP2Shell の修正版も出ていない。PHP 8.4 か 8.5 への移行が必要。

PHP 7.0〜7.3 から上げると WordPress は動く?

WordPress 本体は新しい版ほど新しい PHP に対応している。問題になるのは古いプラグインやテーマが多い。テスト環境で確かめてから切り替える。

移行を頼むと費用はどれくらい?

サイトの作りやプラグインの数で変わる。PHP診断では、サイトを確認してから無料で見積もる。

無料ツールPHP2Shell 脆弱性チェッカーPHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かります。

参考にした情報

この記事の情報

2026年10月22日時点の公開情報にもとづく。最新は php.net と、利用中のサーバー会社の告知を確認すること。

PHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かる。移行の相談もできる。

無料で診断する

この記事の著者

編集部