2026 年 10 月 21 日に PHP の重大な脆弱性 2 件(通称 PHP2Shell)の修正版が出て、OpenAI も対応をまとめた記事と、バージョンを確かめるチェッカーを公開しました。運営者が何をすればよく、何を使えるのかを 2026 年 10 月 25 日時点の一次情報で見ていきます。

この記事の要点

  • 修正版は PHP 8.5.12、8.4.27、8.3.36、8.2.35 で、この版以降に上げて Apache や PHP-FPM などのワーカーを再起動するのが最初の一手です。8.1 以前には PHP プロジェクトからの更新がありません。
  • OpenAI の php2shell-checker は URL から PHP のバージョンを調べられますが、読むのはレスポンスヘッダーの番号だけなので、OK でも修正済みとは限りません。
  • Daybreak for Frontline Defenders の 10 億ドル支援は米国から始まり、2026 年 10 月 25 日時点で日本の運営者が対象という公式の記載はありません。日本の OSS メンテナには Codex for OSS のほうが現実的だと私は考えています。

Patch the Planet とは

Patch the Planet は、AI が見つけたソフトの穴を専門家が確かめ、直し方まで添えて開発者に届ける「点検と補修の代行」のようなものです。実際は OpenAI と Trail of Bits がオープンソースの脆弱性を見つけて直すために進めている Daybreak の取り組みの一つです。Trail of Bits のふだんの役割は、次の図のとおりです。

メンテナTrail of BitsAI モデルメンテナTrail of BitsAI モデル見つけた欠陥を出す人が確かめ重複を除くパッチまで用意して渡す採否と開示を決める

最後に決めるのはメンテナなので、代行する側が勝手に直すわけではないんです。PHP の件は図とは流れが違い、OpenAI の記事によると Calif がこの取り組みの一環で重大な欠陥を見つけ、修正とリリースは PHP のメンテナが主導しました。

まず上げる版と影響する環境

CVE-2026-109618 と CVE-2026-109619 の修正版は、PHP Foundation と php.net の告知によると次のとおりです。

使っている系列すること
8.58.5.12 以降に上げる
8.48.4.27 以降に上げる
8.38.3.36 以降に上げる
8.28.2.35 以降に上げる
8.1 以前上流の更新なし。配布元のバックポートかサポート中の系列へ
うち 7.4、8.0、8.1最小限のソースのバックポートも案内あり

上げたあとは Apache や PHP-FPM などのワーカーも再起動します。影響するのは mod_php や PHP-FPM、php-cgi、FrankenPHP、LiteSpeed など Web のリクエストを処理するすべての PHP で、なかでも mod_php の危険が最も高いと php.net は書いています。2 件とも認証なしでリモートからコードを実行される(RCE)おそれがあり、PHP Foundation の評価は CVSS 9.2 です。Linux の配布元や LTS ベンダーは事前にパッチを受け取っているので、パッケージで入れているならその更新を確かめてください。

php2shell-checker でわかること

php2shell-checker は、サイトの PHP が修正版より前かどうかを外から見えるバージョン番号で判定するツールで、OpenAI が GitHub で公開しています。Node.js の標準機能だけで動き、Codex に skill(手順と道具のひとまとまり)として入れても、直接動かしても使えます。

# Codex に頼む場合(README の例)
$skill-installer install both skills from https://github.com/openai/php2shell-checker
$phpcheck-url check https://example.com
# Codex を使わずに直接動かす場合(--json で機械可読な出力)
node phpcheck.js "https://example.com"
node phpcheck.js "https://example.com" --json

2 つの skill の違いは次のとおりです。

skill使う場面中身
phpcheck-urlURL しか分からない同梱の phpcheck.js でヘッダーを読む
phpcheck-serverサーバーに入れるDebian・Ubuntu・RHEL の修正版(10 月 22 日時点)と比べ、再起動も確認

終了コードと判定は次のとおりで、--json を付けると patch_status にも判定が入ります。

終了コード判定意味
0OKヘッダーの版が上流の修正版以上
1POTENTIALLY VULNERABLE修正版より前、または 5.4〜8.1 の系列
2なし引数が不正
3UNKNOWN版が無いか読めない、プレリリース、確認の失敗

README によると、チェッカーが読むのは X-Powered-By と Server のヘッダーに出る番号だけで、OK もインストールされたものを検証した結果ではありません。修正だけを古い版に取り込むバックポートがされていると、番号だけでは判定を誤ることもあります。phpcheck-server の SKILL.md にある Ubuntu 24.04 LTS の修正済みパッケージ 8.3.6-0ubuntu0.24.04.13 は上流の番号が 8.3.6 のままなので、ヘッダーにこの番号が出ていると修正済みでも POTENTIALLY VULNERABLE になってしまうんです。

Daybreak の支援は日本から使えるか

2026 年 10 月 25 日時点で、日本の組織や個人が 10 億ドルの支援を受けられるとする公式の記載はありません。2026 年 9 月 3 日に発表された Daybreak for Frontline Defenders は米国から始めて 6 か月以内に使い切る目標で、パートナー国に広げる意向はあるものの国名は挙がっていません。

Daybreak そのものは審査を通った人だけが入れる工具室のようなもので、実際は審査を受けた企業や実務者が、攻撃にも防御にも使えるサイバーの作業に高性能なモデルを使う仕組みです。窓口は次のとおりです。

窓口受けられるもの申し込みと条件
Frontline Defenders10 億ドル分のアクセスや訓練など関心表明のフォーム。資金やアクセスの保証なし
Daybreak(組織)Daybreak Blue と Red企業向けのフォームから申請
Daybreak(個人)Daybreak Blue だけ有料プランと FIDO2 キーなど
Codex for OSS6 か月分の ChatGPT Pro など主に広く使われる OSS のコアメンテナ
Patch the Planet1 週間のレビューとパッチなどOSS が Trail of Bits を通じて応募

個人向けは chatgpt.com/cyber から申請しますが、条件の有料プランがどれかは確認できた公式の説明では特定されていません。Codex for OSS を勧めたいのは、その規約に、法律で禁止や制限がある地域では無効とする一文のほかは対象国の制限が書かれていないからです。

使いどころと注意点

チェッカーは管理している URL から明らかに古いものを洗い出す棚卸しに向いていて、POTENTIALLY VULNERABLE と出たものから手を付けます。UNKNOWN のサイトは、サーバーで実際に動いている PHP-FPM や Apache のモジュールのパッケージを確かめてください。CLI の php -v は別の PHP を指していることがあると、phpcheck-server の SKILL.md も注意しています。

更新が遅れたサーバーは、侵害されていないかまで確かめたほうがよいと私は考えます。Cloudflare のブログ(10 月 21 日公開、23 日更新)は顧客を狙った攻撃のトラフィックを観測したとしていて、OpenAI の記事も侵害の有無はフォレンジック(ログや痕跡を調べる調査)で確かめるよう書いています。

10 月 23 日には php.net に別の告知(CVE-2026-115560)も出ているので、作業の前に php.net と PHP Foundation の最新情報を確かめてください。

もっと知りたい人へ

OpenAI が示した 5 段階の案

OpenAI が記事で出した対応の流れは、上流で検証して修正する、影響を受ける組織に対応の時間を渡す、政府機関と連携する、製品の更新を準備する、公開後に導入を支援する、の 5 段階です。1 段階目では修正をフロンティアモデルで敵対的にテストし、迂回や変種まで探します。実際に悪用された場合や情報が漏れた場合などは、タイムラインを見直すそうです。確定した方針ではなく、開示までの期間や緊急パッチ、早期通知、初期設定で安全なパッケージといった論点で意見を募っている段階です。

発見から公開までの経緯

PHP Foundation によると、メモリ上限に達したとき(OOM)の問題の兆しは 2024 年の外部監査の対応中に見つかっていたものの、方針が決まらないまま数か月止まり、財団はこれを「構造的な失敗」と認めています。2026 年 7 月 30 日に Calif が Patch the Planet を通じて監査を始め、8 月 11 日に無条件の RCE が報告されました。追加の攻撃経路は Wiz が 8 月 24 日、OpenAI が 9 月 18 日に報告しています。財団は OpenAI も同じ根本原因を独立に報告したと書いていますがその日付は示しておらず、どこが最初に見つけたかは公開情報からは決められません。

公開の直前には CVE ID が誤ったリリース時刻と誤った CVSS(10.0)付きで出回ったため、リリースは 10 月 22 日 14:00 UTC から 10 月 21 日 14:00 UTC に前倒しされました。その夜には PoC(攻撃を実証するコード)の動画が誤って公開され、21 日には Chainguard がエンバーゴ(公開日までの約束)を破って修正入りのイメージを協調リリースより 6 時間以上早く出しています。財団の記事では、リリースの時点で動作する攻撃コードは確認されていませんでした。

優先度の付け方と侵害の手がかり

OpenAI は、どれから手を付けるかの判断に CISA の BOD 26-04 のガイダンスが使えるとしています。米国の連邦文民行政機関向けの指令なので日本の運営者に守る義務はありませんが、外部に公開されているか、KEV カタログ(悪用が確認された脆弱性の一覧)に載っているか、攻撃の全手順を自動化できるか、一部または全体を乗っ取られるか、の 4 つで決める考え方は借りやすいと思います。2026 年 10 月 23 日版の KEV カタログに今回の 2 件は載っていません。php2shell.com には暫定策とその限界や侵害を調べる手がかりもまとまっていますが、それだけで侵害の有無は決められないと断り書きがあります。

チェッカーの細かい動き

README によるとチェッカーは攻撃用のリクエストを送らず、まず HEAD を送って 405 か 501 が返ったときだけ GET に切り替え、リダイレクトには従わず本文も見ません。10 月 22 日の更新(コミット ffcd3fc)で手元の PHP を調べる --local が無くなり、判定の名前も VULNERABLE から POTENTIALLY VULNERABLE に変わりました。8.1 以前の扱いも変わっていて、更新前は 8.1.35 のような番号を OK としていました。Codex の料金ページの比較表では、Skills は Plus、Pro、Business、Enterprise/Edu と API キーでの利用で使える扱いで、Free と Go は表に列がありません。