10月21日、Wizが「PHP2Shell: AI uncovers critical RCE vulnerabilities affecting 70% of the Internet」と題した記事を公開した。PHPのコアエンジンに潜む重大なRCE(リモートコード実行)脆弱性を、AIを活用して発見・実証した研究の詳細を紹介した記事だ。
Wiz Researchが発見した脆弱性はCVSSスコア最大9.2。PHP 5.4以降の全バージョン、つまり過去10年以上にリリースされたほぼすべてのPHPバージョンに影響する。PHPはWordPress・Drupal・Joomla・WikipediaのMediaWikiといった主要CMSを動かすプログラミング言語であり、世界中のWebサイトの約70%で使われている。今回の脆弱性はアプリケーション層ではなくPHPエンジン自体に存在するため、アプリケーション側のコードに一切問題がなくても攻撃を受け得る。「Hello World」を表示するだけの最小構成のアプリケーションでも例外ではない。2026年10月21日、PHPチームは修正パッチをリリース済みだ。対象バージョン(PHP 8.1系・8.2系・8.3系・8.4系)を利用している場合は直ちにアップデートすることが推奨される。
「複雑すぎて悪用困難」だった脆弱性が、AIで現実の脅威に
この研究で際立つのは、最先端AIモデルなしではRCEとしての実証が事実上不可能だったという点だ。
脆弱なコードは10年以上PHPのコードベースに存在していた。しかしこれをRCEとして実証するには、複数のバグを連鎖させ、PHPのメモリアロケーションとリクエスト間の状態再利用の挙動を正確に把握したうえで、PHPのバージョン・設定・アプリケーションごとにエクスプロイトを細かく調整する必要があった。一つの環境で動作するエクスプロイトが別の環境では動かないことも多く、その都度の解析・テスト・デバッグが求められる。
WizのチームはWiz Atlas(WizのAIセキュリティリサーチャー)、Gemini 4 Argon、GPT-5.6 Solを活用した。特にGemini 4 Argonは、脆弱性の発見・エクスプロイト開発・攻撃検知・パッチ検証のすべてのフェーズで中核的な役割を担ったとされる。
この研究が示す本質的な意味は、AIによってエクスプロイト開発にかかる時間と専門知識の要求水準が大幅に下がった点にある。「複雑すぎて現実的には悪用困難」だった脆弱性が、現実的な攻撃対象へと変わる。Wizはこの転換をHeartbleed(2014年・OpenSSLの大規模情報漏洩)やLog4Shell(2021年・Apache Log4jのRCE、詳細)と並ぶ転換点と位置づけている。
4つのバグの技術的な内訳
今回の脆弱性は2つのCVE(CVE-2026-109618、CVE-2026-109619)にまとめられており、根本原因はいずれも同じだ。PHPがリクエスト処理中にfatalエラー(特にメモリ不足エラー)を処理する際のメモリ安全性の問題で、リクエスト終了後に破損した内部状態が残留し、後続のリクエストやワーカーがその状態を再利用してしまう。
| CVE | バグの種別 | 攻撃者が達成できること |
|---|---|---|
| CVE-2026-109618(その1) | Upload-progressアンシリアライザのuse-after-free | WordPress・Drupal・JoomlaへのRCE |
| CVE-2026-109618(その2) | リモートプロセスメモリ開示 | セッションID経由でワーカーメモリ内容をレスポンスCookieに漏洩 |
| CVE-2026-109619(その1) | fatalエラーバックトレースのuse-after-free | DrupalへのRCE |
| CVE-2026-109619(その2) | OPcacheの型混同 | WordPressへのRCE |
メモリ開示の脆弱性は特に巧妙だ。PHPがRFC1867形式のマルチパートリクエストをリクエスト初期化段階で解析する際、セッションIDポインタが解放済みのメモリ領域を指したままになる。後続のワーカーがこのポインタをliveなzend_stringとして扱い、ヒープの内容をPHPSESSIDレスポンスCookieにURL-encodeして返してしまう。アプリケーションがsession_start()を一切呼んでいなくても攻撃が成立するアプリケーション非依存の性質を持ち、パスワード・認証トークン・APIキー・証明書が他のリクエストのデータとして漏洩し得る。
OPcacheの型混同は共有メモリを介したクロスワーカー攻撃だ。OPcache(PHPのバイトコードキャッシュ機構)がコンパイル済み構造を共有メモリに永続化する際、プロセスローカルのフロンティア更新と共有フロンティアの更新の間にアロケーション失敗が起きると、別ワーカーが同じスロットを異なる型のオブジェクトに再利用してしまう。これがクロスワーカーの型混同を引き起こし、共有OPcacheの状態を破壊する。
防御側が今すぐ取れる対策
パッチ適用が唯一の完全な修正だ。すぐに適用できない場合の暫定的な検知シグナルとして、Wizは以下を挙げている。
- 異常なマルチパートリクエストに続くメモリ制限エラーやHTTP 500の連続
- 異常に大きい・奇形の
PHPSESSIDレスポンスCookie - PHPワーカーの予期しない再起動・乱立
Cloudflare、AWS、Google Cloud、Microsoft、Automattic、Fastly、Akamai、Imperva、Vercelなど主要クラウド・CDN事業者がパッチ適用前の緩和策とWAF検知ルールを提供済みだ。CloudflareのPHP脆弱性対応ブログでも詳細が公開されている。
詳細はPHP2Shell: AI uncovers critical RCE vulnerabilities affecting 70% of the Internetを参照していただきたい。