PHP2Shell:AIが見つけたPHPのRCE脆弱性と対処法

PHP2Shellは、PHPに見つかった2件の深刻なバグ、CVE-2026-109618とCVE-2026-109619の通称です。悪用されると、攻撃者はログインせずにWebサーバー上でコードを実行できる可能性があります。PHPプロジェクトは2026年10月21日、PHP 8.5.12、8.4.27、8.3.36、8.2.35でこれらを修正しました。悪用可能な経路を見つけたのはCalif、Wiz、OpenAIの研究者で、AIモデルの助けを借り、一部はOpenAIの「Patch the Planet」プログラムの一環として発見されました。Amazonは現在、これらの脆弱性が「広範囲で実際に悪用されている」と述べています。WebサーバーでPHPを動かしているなら、今日中にアップデートしてください。
バグは特定のフレームワークではなく、PHP自体のメモリ管理とエラー処理にあります。そのため、WordPress、Drupal、Laravel、独自開発のアプリはいずれも同じように影響を受けます。Tenableが引用するW3Techsのデータによると、サーバーサイド言語が判明しているWebサイトのうち約69%がPHPを使っています。
要点まとめ
- PHP 8.5.12、8.4.27、8.3.36、8.2.35のいずれかにアップデートしてください。アドバイザリによると、完全な修正はアップデートだけです。PHP 8.1以前には最小限のソースバックポートしか提供されません。
- Webリクエストを処理するPHP環境はすべて対象です。PHP-FPM、Apacheのmod_php、php-cgi、FrankenPHP、LiteSpeedが含まれます。最もリスクが高いのはmod_phpで、認証なしのリクエストによって、アプリケーションコードが実行される前に攻撃が成立し得ます。
- Califによると、影響を受ける最も古いコードパスは2012年リリースのPHP 5.4.0までさかのぼります。
- エクスプロイト開発の大部分を担ったのはAIでした。WizはGemini 4 ArgonとGPT-5.6 Solを組み合わせた自社エージェントWiz Atlasを使用し、OpenAIや報道によるとCalifはGPT-5.6 Solを使用しました。
- エンバーゴ(情報公開の解禁日)は守られませんでした。Amazonは公開の4日前にあたる10月17日に悪用の試みを観測し、Cloudflareもパッチ公開前に攻撃トラフィックを確認しています。
CVE-2026-109618とCVE-2026-109619とは?
どちらのバグも、細工したリクエストによって、PHPがリクエスト処理中に保持している状態を破壊できるというものです。攻撃者はこれをコード実行につなげることができます。
| CVE-2026-109618 | CVE-2026-109619 | |
|---|---|---|
| アドバイザリのタイトル | RCE via OOM corruption(OOMによる破損を介したRCE) | RCE via stale global state(古いグローバル状態を介したRCE) |
| GitHubアドバイザリ | GHSA-w8hw-w9fx-j79w | GHSA-6wmf-4rv5-p3rp |
| 何が起きるか | メモリ不足(OOM)の処理によって、リクエストデータが一部しか準備されていない状態でPHPが中断され、その後のクリーンアップ処理が不正なデータを有効なものとして扱う | 致命的エラーの後もグローバル状態が解放済みメモリを指したまま残り、同じワーカーで処理される次のリクエストがそれを使ってしまう(use-after-free) |
| 発生条件 | 細工したマルチパートアップロードで、post_max_sizeの範囲内のままメモリを上限まで消費させる | あるリクエストが状態を仕込み、同じワーカー上の後続リクエストがそれを使う。デフォルトで有効なセッションアップロード進捗機能を介して確認済み |
| 深刻度(PHPの評価) | CVSS v4.0 9.2 | CVSS v4.0 9.2 |
| RCEが確認された環境 | Apache mod_php(アプリのコードが動く前) | Apache mod_php。セッションアップロードの経路はPHP-FPMでも検証済み |
「RCE」はリモートコード実行(remote code execution)のことです。攻撃者のコードがWebサーバーの権限で動くため、通常はサイトのファイル、データベースの認証情報など、そのアカウントがアクセスできるあらゆるものに手が届きます。GitHubのアドバイザリによると、古い状態に起因するバグでは、パスワードやトークンといったメモリ内容が漏えいするおそれもあります。
深刻度スコアは評価する組織によって異なります。PHPはどちらもCVSS v4.0で9.2と評価しています。PHP Foundationによれば、リリース前に出回っていた10.0という数値は単なる誤りでした。Red Hatはセキュリティ速報で「Important(重要)」と評価しています。RHELはデフォルトでPHP-FPMを採用しており、その環境での悪用は「実際には困難」だからです。
AIはどのようにPHP2Shellの脆弱性を見つけたのか
根本原因そのものは新しいものではありませんでした。PHP Foundationによると、2024年、あるコア開発者がQuarkslabの監査で見つかった問題を修正していた際に、メモリ不足の問題の兆候に初めて気づきました。この監査はOSTIFが主催し、ドイツのSovereign Tech Agencyが資金を提供したものです。しかし具体的な攻撃手法は誰も見つけられず、複数の修正案はどれも何かを壊してしまい、作業は停滞しました。Foundationはこの遅れを「セキュリティチームの意思決定プロセスとリソース不足の両方に起因する構造的な失敗」と表現しています。
AIの登場で、このバグは数週間単位で悪用可能なものになりました。PHP Foundation、Calif、Wiz、AWSの情報をまとめたタイムラインは次のとおりです。
| 日付(2026年、UTC) | 出来事 |
|---|---|
| 2026年初頭 | Alpha-OmegaがAnthropicのClaude MythosでPHPをスキャン |
| 6月22日 | OpenAIがPatch the Planetを開始 |
| 7月30日 | CalifがPatch the Planetの一環としてPHPの監査を開始 |
| 8月1日 | Califが複数のRCE経路を発見 |
| 8月11日 | CalifとOpenAIが同じ根本原因をPHPに報告 |
| 8月19日~21日 | Wizが最初のバグを発見し、DrupalとWordPressでRCEを確認 |
| 8月24日 | WizがPHPに報告 |
| 9月18日 | OpenAIが追加の攻撃ベクトルを報告 |
| 10月17日 | AWSのハニーポットがPHP2Shellの悪用の試みを記録 |
| 10月20日 15:00頃 | 誤ったリリース時刻とCVSSスコアを伴ってCVE IDがネット上に流出 |
| 10月20日 19:30 | PHPが事前告知を出し、リリースを1日前倒し |
| 10月20日 20:00頃 | Califが概念実証(PoC)の動画を誤って公開。削除されたもののコピーが出回る |
| 10月21日 03:02 | CloudflareがFreeを含む全プランでWAFルールを有効化 |
| 10月21日 07:41 | Chainguardが修正済みイメージを公開し、エンバーゴが破られる |
| 10月21日 14:00 | 協調リリース |
Wizによると、同社のチームは自社のセキュリティエージェントWiz Atlasを、GoogleのGemini 4 ArgonおよびGPT-5.6 Solと組み合わせて使い、「Gemini 4はエクスプロイト開発とパッチ検証で特に大きな貢献を果たした」としています。Wizのブログはその意味をこう説明しています。「AI以前は、こうした手作業は実装が難しく、スケールさせるのはさらに困難でした。AIがあれば、もはやそれは障壁ではありません。LLMは、エクスプロイトをさまざまなPHPバージョン、設定、メモリレイアウトに適応させる手助けができます。」このモデルについては、Gemini 4 Argonのベンチマーク解説で詳しく取り上げています。
Califの解説記事はモデル名を明かしておらず、公開されているモデルを「audit buddy」と呼ぶエージェントと組み合わせて使ったと述べています。OpenAIとTechCrunchによれば、使われたのはGPT-5.6 Solでした。CalifはWordPress、Drupal、Joomla、MediaWiki、Magento、Nextcloud、Laravelなどのアプリに対する認証前の攻撃を実証したうえで、「単純なプロンプトで『すべてのバグ』を掘り当てられるモデルなど存在しない」と注意を促しています。
その裏側にあるのが、AIを使った報告の急増です。7月1日以降、PHPのセキュリティチームは15件のCVEを公開し、無効・重複・再現不能だった100件を超える報告に対応してきました。FoundationはOpenAIのDaybreak Redを使って報告やエクスプロイトを検証していますが、すべての判断は人が下し、すべてのパッチは人が書いているとしています。
OpenAIの「Patch the Planet」とは?
Patch the Planetは、AIモデルを使って広く利用されているオープンソースプロジェクトの脆弱性を発見・修正するOpenAIのプログラムです。OpenAIのセキュリティ施策Daybreakの一環として、2026年6月22日にTrail of Bitsと共同で開始されました。SiliconANGLEは開始時点で、cURL、Go、Pythonを含む30以上のプロジェクトが参加しており、すべての発見はメンテナーに届く前に人間のセキュリティエンジニアがレビューすると報じました。
OpenAIは10月21日の投稿「Patch the Planet: global response coordination as agents uncover vulnerabilities」(エージェントが脆弱性を発見する時代のグローバルな対応調整)で、メンテナー、研究者、セキュリティベンダーによる2か月にわたる連合を主導して修正を準備したと述べ、PHPの事例を「Defender's Window」の一例と位置づけています。これは、攻撃者が悪用できるようになる前に防御側がパッチを当てられる時間を指します。PPC LandとGizmodoによると、OpenAIはさらに、重要なサービスを守るリソースの乏しい組織向けに、Daybreakツールへの補助付きアクセスとして10億ドル分を拠出すると約束しました。これは現金ではなく、ツールへのアクセスです。
AIが攻撃者より先に脆弱性を見つけたというOpenAIの主張は、前述のAWSやCloudflareの報告と整合しません。PHP Foundationは、リリース時点で実際に機能するエクスプロイトは把握していなかったと述べるにとどめています。
OpenAIはopenai/php2shell-checkerも公開しました。2つのCodexスキルから成るツールで、HTTPヘッダーまたはphp -vからPHPのバージョンを確認し、OK、VULNERABLE、UNKNOWNのいずれかを返します。侵害の痕跡は調べません。READMEは「UNKNOWNはパッチ適用済みという意味ではありません!」と警告しています。
影響を受けるPHPのバージョンと修正版は?
| ブランチ | 修正版 | 備考 |
|---|---|---|
| PHP 8.5 | 8.5.12 | すぐにパッチを当てられない場合はfatal_error_backtraces=0も設定 |
| PHP 8.4 | 8.4.27 | |
| PHP 8.3 | 8.3.36 | |
| PHP 8.2 | 8.2.35 | 2026年12月31日にサポート終了(EOL) |
| PHP 7.4、8.0、8.1 | ソースのバックポートのみ | 公式バイナリなし。ディストリビューションやLTSベンダーを確認 |
| PHP 5.4~7.3 | PHPからの提供なし | アップグレードするか、Ubuntu Proなどのベンダーに頼る |
ディストリビューションのパッケージは独自のバージョン番号を持つため、アップストリームの番号で判断しないでください。たとえばUbuntuのCVEページによると、Ubuntu 24.04の修正済みパッケージは8.3.6-0ubuntu0.24.04.13です。Debianもセキュリティトラッカーによれば、bookwormとtrixie向けに修正を提供しています。アドバイザリはまた、ボランティアが運営するrpms.remirepo.netリポジトリではリリース当日に更新が用意されないと警告していました。
今すぐやるべきこと
- Webトラフィックを処理しているPHPランタイムをすべて洗い出します。
php -vで表示されるのはCLIのものです。FPMやApacheは別のバイナリを使っている場合があるため、phpinfo()やパッケージマネージャーで確認してください。コンテナ、CIイメージ、マネージドホスティングも対象に含めます。 - 修正済みのリリースまたはディストリビューションのパッケージに更新し、PHP-FPMのプール、Apache、常駐ワーカーを再起動します。
- マネージドホスティングの場合は、PHPランタイムにパッチが適用済みかどうかをプロバイダーに確認してもらいます。Cloudflareのアドバイザリは「Webサイトのコードやプラグインを更新するだけでは、これらの脆弱性は修正されません」と指摘しています。
- 調査は公開日ではなく10月17日までさかのぼってください。AWSは、
PHP_SESSION_UPLOAD_PROGRESSを含むPOSTリクエストをログから探し、サーバー上に想定外のプロセスやファイル変更がないか確認するよう勧めています。Wizは、サイズが異常に大きい、または形式が不正なPHPSESSIDCookieや、マルチパートリクエストの後に繰り返し発生するメモリ上限エラーやHTTP 500を警戒すべき兆候として挙げています。 - パッチを当てられない場合について、英国のNCSCは「完全に緩和できるまで、システムをオフラインにすることを検討すべきです」としています。TechCrunchによると、NSAも同様の助言をしています。
すぐにパッチを当てられない場合の緩和策
PHPのアドバイザリは、「特定の攻撃経路への露出は減らすが、インストール環境を安全にするものではない」設定として、次のものを挙げています。
- CVE-2026-109618については、アプリから上書きできない方法(FPMプールやApache設定の
php_admin_valueなど)でmemory_limit=-1を設定します。あわせてpost_max_sizeを小さく(8M、アップロードが必要なら32M)保ち、upload_max_filesizeはそれより小さくし、コンテナやcgroupの制限でメモリに上限を設けます。RLIMIT_ASやRLIMIT_DATAは使わないでください。脆弱性につながるメモリ割り当て失敗を引き起こす可能性があります。 - CVE-2026-109619については、
php.ini、FPMプール、またはサーバー設定でsession.upload_progress.enabled=0を設定し、すべてのワーカーを再起動します。ini_set()や.user.iniで設定してはいけません。PHP 8.5ではfatal_error_backtraces=0も設定してください。 error_reporting、display_errors、@演算子でエラーを隠しても効果はありません。
Cloudflareは10月21日、Freeプランを含むWAF付きの全プランでWAFルールを有効化しましたが、攻撃者はすでにペイロードを変えて回避を試みているとしています。有料プランの利用者は、Managed Rulesetがブロックモードで動作しているか確認してください。WAFは時間稼ぎにはなりますが、アップデートの代わりにはなりません。
PHP2Shellはどれほど深刻なのか?
意見は分かれています。CalifとWizは人気アプリに対する認証不要のコード実行を実証し、AWSとCloudflareは攻撃を観測しました。英国とEUの政府機関は、パッチ未適用のシステムをオフラインにすることを検討するよう運用者に呼びかけています。一方、開発者のElias Taylor氏は、Log4Shell級の事態ではないと主張しています。リリース後およそ10時間は、素のPHP環境に対して機能する公開エクスプロイトがなく、初期のPoCの多くはサーバーにすでに別のバグが存在することを前提にしていたからです。
どちらも正しいと言えます。公開されたエクスプロイトコードは当初は弱かった一方、AIの支援を受けた熟練チームは何か月も前から動作するエクスプロイトを手にしていました。このギャップこそが、PHP Foundationが体制を変えようとしている理由です。具体的には、AI Security Engineer in Residence(Volker Dusch氏)の設置、報告対応とハードニングを担う新規スタッフ2名、セキュリティ修正の決定を全会一致から多数決へ変更すること、全プラットフォームでCIと一致するサニタイザービルドの整備です。Foundationは企業、ホスティング事業者、クラウドプラットフォーム、政府に対し、この取り組みへの資金提供を呼びかけています。
よくある質問
WordPressはPHP2Shellの影響を受けますか?
はい。動作しているPHPにパッチが適用されていなければ影響を受けます。脆弱性はPHP自体にあるため、WordPressやプラグインを更新しても修正されません。CalifとWizはいずれもWordPressへの攻撃を実証しています。PHPを8.5.12、8.4.27、8.3.36、8.2.35のいずれかに更新するか、ホスティング事業者にランタイムがパッチ適用済みか確認してください。
PHP-FPMならCVE-2026-109618とCVE-2026-109619に対して安全ですか?
いいえ。PHPはPHP-FPMを影響対象として挙げています。確認済みのメモリ不足エクスプロイトはmod_phpを標的としていますが、CVE-2026-109619のGitHubアドバイザリには、セッションアップロード進捗の経路がPHP-FPMでも検証されたと記載されています。Red Hatは、同社のデフォルトのFPM構成では悪用がより困難だと見ていますが、不可能とはしていません。
PHP2Shellは実際に悪用されていますか?
はい。AWSは公開の4日前にあたる2026年10月17日に悪用の試みを記録しており、現在このバグは広範囲で悪用されていると述べています。Cloudflareも顧客を狙った攻撃トラフィックを報告しています。10月17日以降のログを確認してください。
PHP2Shellを発見したのは誰ですか?
PHPのコア開発者が2024年、Quarkslabによる監査の過程で最初の兆候に気づきました。PHP Foundation、Calif、Wizによると、2026年にはCalif(OpenAIのPatch the Planetの一環として活動)、OpenAIのCodex Securityチーム、Wiz ResearchがAIの支援を受けて悪用可能な経路を報告しました。
PHP 8.1や7.4からアップグレードできない場合はどうすればよいですか?
PHPはこれらのブランチのリリースをすでに提供していません。セキュリティチームは7.4、8.0、8.1向けに最小限のソースバックポートを公開しており、DebianやUbuntuなどのディストリビューションは独自のパッケージに修正をバックポートしています。当面はアドバイザリの緩和策を適用し、サポート対象のブランチへの移行を計画してください。
出典
- PHP: Security release and pre-announcement, October 2026 (php.net news archive)(2026年10月のセキュリティリリースと事前告知)
- PHP Foundation: Today's PHP security release, and how we're strengthening PHP security(本日のセキュリティリリースとPHPセキュリティ強化の取り組み)
- GitHub advisory GHSA-w8hw-w9fx-j79w (CVE-2026-109618)
- GitHub advisory GHSA-6wmf-4rv5-p3rp (CVE-2026-109619)
- Calif: PHP2Shell
- Wiz Research: PHP2Shell
- AWS Security Blog: PHP2Shell exploitation prior to public disclosure(公開前のPHP2Shell悪用)
- Cloudflare: WAF protection for the PHP vulnerabilities(PHP脆弱性に対するWAF保護)
- UK NCSC: Critical security issue affecting PHP(PHPに影響する重大なセキュリティ問題)
- Red Hat: RHSB-2026-013
- Ubuntu: CVE-2026-109618
- Debian security tracker: CVE-2026-109618
- GitHub: openai/php2shell-checker
- OpenAI: Patch the Planet: global response coordination as agents uncover vulnerabilities(エージェントが脆弱性を発見する時代のグローバルな対応調整)
- SiliconANGLE: OpenAI expands Daybreak with Patch the Planet(OpenAIがPatch the PlanetでDaybreakを拡大)
- TechCrunch: OpenAI, Google's Wiz find ancient PHP holes(OpenAIとGoogle傘下のWizが古いPHPの脆弱性を発見)
- Tenable: PHP2Shell FAQ
- PPC Land: OpenAI says GPT-5.6 Sol found a PHP flaw before attackers did(GPT-5.6 Solが攻撃者より先にPHPの欠陥を発見したとOpenAIが主張)
- Gizmodo: OpenAI wants to Patch the Planet
- Elias Taylor: There isn't an easy exploit for this PHP vulnerability(このPHP脆弱性に簡単なエクスプロイトはない)