エグゼクティブサマリー
Wiz Researchは、世界のすべてのウェブサイトの70%を支える人気の汎用スクリプト言語であるコアPHPにおいて、複数の重大な脆弱性を発見しました。悪用に成功した場合、攻撃者は影響を受けるサーバーの制御を奪い、機密データを盗み出し、稼働しているウェブサイトを改ざんする可能性があります。
PHPはウェブのバックボーンであり、WordPress、Joomla、Drupal、WikipediaのMediaWikiをはじめとする多くのプラットフォームを動かしているプログラミング言語です。
これらの脆弱性には、メモリの開示や認証不要のリモートコード実行が含まれており、 それらの脆弱性は、その上で実行されているアプリケーションとは無関係にPHP自体に存在し、 影響を受けるすべてのウェブサイトを差し迫った危険にさらしています。
過去10年間にリリースされたすべてのPHPバージョンが、バージョン5.4に遡り、これらの脆弱性の少なくとも1つに影響を受けています。攻撃者はこれらをリモートで悪用することができ、場合によっては比較的容易に行うことが可能です。早急なパッチ適用が強く推奨されます。
2026年10月21日、PHPはコアエンジンにおける複数のメモリ安全性に関する脆弱性を修正するパッチをリリースしました。
これらの発見は、PHP、そしておそらくソフトウェアの歴史において発見された最も深刻な脆弱性の部類に入ります。根底にある不具合は何十年もの間存在していましたが、その悪用可能性を実証するには、人間の研究者が現実的に達成できる限界に近い、例外的に複雑な一連のステップが必要でした。フロンティアAIモデルはそのハードルを大幅に下げ、長年の不具合をエクスプロイトに変えました。
概要
本記事では、10年以上にわたりPHPのコードベースに隠されていた脆弱性を、フロンティアAIがどのように発見・修正するのを支援したかについて解説します。以下に説明する問題はすべて、1十年以上前に行われたものを含む重要なアーキテクチャの決定に起因しており、CVSS 9.2に達する深刻度を持つ2つのCVEに分類されました。この作業は、顧客の保護、バリアントの発見、検知・緩和策のデプロイ、そして協調開示に間に合わせるためのパッチの検証を行う、業界横断的な取り組みへと発展しました。
PHP 5.4に遡るリリースを含め、ほぼすべてのPHPバージョンがこれらの問題の少なくとも1つに影響を受けています。この脆弱性により、認証されていない攻撃者が影響を受けるサーバー上でコードを実行したり、機密性の高いプロセスメモリを読み取ったりする可能性があります。そのメモリには、他のリクエストやサーバー自体に属するパスワード、認証トークン、APIキー、証明書が含まれている可能性があります。
PHPは多くのウェブの背後にあるプログラミング言語であり、WordPress、Drupal、およびWikipediaを動かすソフトウェアであるMediaWikiを支えています。コアエンジンの不具合は、個々のアプリケーションコードが安全である場合でも、このエコシステム全体のエクスペリエンスに影響を与える可能性があります。
一部の脆弱性は、セキュリティに関する根本的な前提に疑問を投げかけるため、転換点となります。2014年、Heartbleedはインターネットを保護する共有インフラストラクチャの脆弱性を露呈させました。2021年、Log4Shellは、深く組み込まれたソフトウェア依存関係がいかに広範な露出を生み出し、組織がそれを特定するのに苦労したかを明らかにしました。私たちは、PHP2ShellがAI時代の同様の転換点となり、AIが長年の脆弱性の現実的な悪用可能性をいかに変えることができるかを示していると考えています。エクスプロイトの構築には、複数の不具合を連鎖させ、繰り返しテストとデバッグを行いながら各ターゲットのメモリレイアウトに適応させる必要がありました。フロンティアモデルはこのプロセスを現実的なものにする上で不可欠であり、複数のアプリケーションにわたる動作するエクスプロイトを数時間で開発および適応させることを可能にしました。この作業に必要な時間と専門知識が減少するにつれて、複雑さはもはや意味のある障壁とはならず、現実的に何が脆弱であるかを私たちが定義する方法を変える可能性があります。
Wiz Researchは、発見、調整、およびパッチの検証における作業について、PHPチーム、Calif、およびOpenAIに感謝いたします。 OpenAI および Calif も、脆弱性に関する詳細(その歴史、技術的詳細、および開示プロセスへの洞察)を含むブログを公開しました。 PHPも同様に投稿を行いました。 また、パッチを即座に適用できないお客様のためにガイダンスやすぐに使える緩和策の準備にご協力いただいた、Automattic、Akamai、AWS、
Cloudflare 、Fastly、Google、Imperva、Microsoft、Vercel、およびその他多くの皆様に心より感謝申し上げます。 Wizがお手伝いできること
How Can Wiz Help?
Wiz のお客様は、 PHP2Shell に関する Wiz Threat Intel Center アドバイザリ をご参照ください。ここには、エージェントレスおよびランタイムの脆弱性検知の組み込みカバレッジ、Wiz Defend および Sensor による悪用の検知、自動対応ポリシー、ならびに修復および脅威ハンティングのガイダンスが含まれています。
Sensor のお客様は、PHP2Shell の悪用に典型的な挙動を示すプロセスを自動的に終了させる、組み込みの対応ポリシーを有効にすることもできます。
脆弱性
開示された脆弱性はすべて、特にメモリ不足エラーなど、リクエストの処理中に PHP が致命的エラーを処理する方法のバグに起因するメモリ安全性の問題です。これらのバグにより、リクエストが予期せず終了した後に、破損した内部 PHP 状態が残る可能性があります。その後のリクエストやワーカーがその古い状態を再利用することで、メモリの開示や破損につながります。
以下に、PHP に報告した各バグによって示された影響の種類を示す表を示します。以下のアプリケーションは、RCE デモのために選択したターゲットです。脆弱なコードは PHP 自体にあるため、悪用にこれらの CMS のいずれかが必須というわけではなく、これらは代表的なターゲットです。
| Tracking ID | Bug | What an attacker can achieve | What we demonstrated |
|---|---|---|---|
| CVE-2026-109618 | Upload-progress unserializer use-after-free Remote process-memory disclosure | Corrupt process memory and execute code Unauthenticated disclosure of PHP worker memory | Pre-authentication RCE on WordPress, Drupal and Joomla Application-agnostic remote memory disclosure |
| CVE-2026-109619 | Fatal-error backtrace use-after-free OPcache type confusion | Corrupt process memory and execute code Corrupt shared PHP state and execute code | Pre-authentication RCE on Drupal Pre-authentication RCE on WordPress |
このブログでは、この問題のあるパターンに従う悪用可能なバグの 4 つのインスタンス(2 つの CVE に分類)のみを取り上げていますが、PHP コードベースには他にも追跡されている、またはおそらく追跡されていないこの問題のバリアントが存在します。これらのバリアントには、悪用のための異なる要件があり、異なる種類の影響につながる可能性があります。いずれにせよ、PHP チームが提供するパッチは、根本的な問題を修正し、パッチが適用されたリリースにおけるすべてのバリアントを排除します。
影響
これらの脆弱性を単一の悪用スクリプト「php2shell」に組み合わせ、テスト時の最新のコンテナイメージを使用して、WordPress(wordpress:latest)、Drupal(drupal:latest)、および Joomla(joomla:latest)のデプロイメント上で、認証なしでリモートからコードを実行できることを実証しました。
これらのプラットフォームは影響を示していますが、脆弱性は PHP 自体にあります。悪用はアプリケーションのコードの欠陥に依存しません。影響を受ける PHP バージョンで実行されている単純な「Hello World」アプリケーションでさえ、脆弱になる可能性があります。
個別に、攻撃者がリモートコード実行を達成することなく、パスワード、トークン、API キーなどの機密データを PHP プロセスのメモリから読み取ることができることを実証しました。
Wordpress、Joomla、Drupal を使用した PHP2Shell のデモ:
AI の変曲点
脆弱なコードは 1 十年以上にわたって存在していました。これらの欠陥を動作するエクスプロイトに変えるには、複数のバグを連鎖させ、PHP がリクエスト間でどのようにメモリを割り当てて再利用するかを考慮する必要がありました。メモリバグは非常に複雑であることが知られており、PHP のバージョン、設定、アプリケーションの動作の違いによって、エクスプロイトが依存している前提が崩れる可能性があります。あるデプロイメントに対して機能する攻撃は、別のデプロイメントで機能させるために大幅な調整が必要になる場合があり、それぞれにさらなる分析、テスト、およびデバッグが必要です。AI の登場前には、この手作業を実装することは困難であり、スケールすることはさらに困難でした。
AI があれば、これはもはや障壁ではありません。LLM は、エクスプロイトをさまざまな PHP のバージョン、設定、メモリレイアウトに適応させるのに役立ちます。テストおよびデバッグツールを使用することで、モデルは失敗を分析し、調整を繰り返すことができ、各ターゲットに必要な専門的な労力を削減できます。これにより、さまざまなデプロイメント間での攻撃のスケールアップにかかるハードルが大幅に下がります。
これにより、発見と悪用の両方の経済性が変化します。AI が複雑なエクスプロイトの開発と適応に必要な労力を削減するにつれて、かつては悪用が現実的ではないと思われていた脆弱性が、実行可能なターゲットになります。
本研究では、 Wiz Atlas 、Gemini 4 Argon、およびGPT-5.6 Solを使用しました。特にGemini 4 Argonは、脆弱性の発見、エクスプロイトの開発、攻撃の検出、およびパッチの検証において計り知れない貢献をしてくれました。
Gemini 4 Argonを活用することで、Wizのチームは最先端AIがサイバー防衛のゲームチェンジャーとなる理由を示しました。10年以上にわたり、これらの重大な脆弱性は未解決のままでした。なぜなら、脆弱性の発見と悪用は非常に複雑だったからです。Gemini 4 Argonが、ディフェンダーがその溝を埋め、脆弱性を見つけてパッチを適用するのを支援していることを嬉しく思います。
Raluca Ada Popa, Head of Gemini Security, Google DeepMind
業界レベルのコラボレーション
一般公開の前に、Wiz ResearchはPHPチーム、Calif、およびOpenAIと協力して、発見、調整、およびパッチの検証を行いました。また、Google Cloud、Cloudflare、AWS、Microsoft、Automattic、Fastly、Akamai、Imperva、Vercelなど多くのパートナーとも連携し、すぐにはアップデートできない組織向けに、お客様向けガイダンス、検出機能、およびすぐに使える緩和策の準備を進めました。
PHPコアの脆弱性は、単一のアプリケーションの枠をはるかに超えた影響を及ぼします。PHPは、クラウド、ホスティングプロバイダー、コンテンツ配信ネットワーク(CDN)、および数百万の独立して管理されているサーバー上で実行されています。技術的な詳細が公開される前に露出を減らすには、そのエコシステム全体での協調的な作業が必要でした。
技術的な詳細の解説
バグ:アップロード進捗アンシリアライザーにおける解放後使用(Use-After-Free)
PHPのセッションモジュールは、初期化前の同じウィンドウ内で、アップロード進捗の処理中にセッションデータをデコードできます。デコード処理は、リクエストが所有する管理データを BG(unserialize) に格納します。致命的なメモリ割り当ての失敗によってこの処理が中断されると、リクエストのヒープが破棄され、アンシリアライザーのグローバル状態が公開されたままになってしまいます。
同じワーカーによって処理される後続のリクエストにおいて、PHPは攻撃者によって再利用されたメモリを、有効なアンシリアライザーの管理データとして消費してしまう可能性があります。この古い状態は、強力なメモリ破損プリミティブとなります。私たちはこれをメモリ開示と組み合わせることでアドレスの不確実性を排除し、WordPress、Drupal、Joomlaに対する認証なしのリモートコード実行(RCE)を達成しました。
WordPress、Drupal、Joomlaにおける攻撃チェーンは代表的な実証例です。根底にあるプリミティブはPHPエンジンレベルに存在し、脆弱なバージョンを実行しているあらゆるPHPアプリケーションに影響を与える可能性があります。
これらの問題はアプリケーション層より下で実行されるため、アプリケーションログにはほとんどコンテキストが含まれない場合があります。システムにパッチが適用されるまで、ディフェンダーは、メモリ制限エラーや繰り返されるHTTP 500レスポンスが続く不審なマルチパートリクエスト、予期せず巨大または不正な形式の PHPSESSID レスポンスクッキー、および説明のつかないPHPワーカーのチャーン(頻繁な再起動など)に特に注意を払う必要があります。これらのシグナルは調査の指針となります。PHPのセキュリティアップデートを適用することが、唯一の完全な修復方法です。
バグ:リモートのプロセスメモリ開示
PHPは、通常ählのモジュール初期化が完了する前のリクエスト開始時に、RFC1867マルチパートリクエストをパースします。セッションのアップロード進捗処理は、この初期段階でセッション状態を初期化し、セッションIDを PS(id) に公開する可能性があります。クリーンアップが完了する前にメモリ不足エラーが発生してリクエストが中断されると、PHPはリクエストヒープを破棄し、 PS(id) が解放済みの割り当て領域を指したままにする可能性があります。
同じワーカーによって処理される後のマルチパートリクエストは、通常のセッション初期化によってそのポインタがリセットされる前に、アップロード進捗のクリーンアップパスに到達する可能性があります。PHPは、その古いポインタと長さを有効な zend_string および、解放されたヒープコンテンツを URL エンコードして PHPSESSID レスポンスクッキーに格納します。この攻撃は、アプリケーションが一度も session_start() を呼び出していない場合でも成立するため、この問題はアプリケーションに依存しません。私たちは、攻撃者のリクエスト以外のデータを含む、攻撃者サイズのライブワーカーメモリ領域が認証なしで漏洩することを実証しました。
バグ: 致命的エラーのバックトレースにおける解放後使用(Use-After-Free)
影響を受けるバージョンでは、PHP は直近の致命的エラーのバックトレースを EG(last_fatal_error_backtrace) に保持します。致命的なメモリ不足エラーが発生すると、そのエグゼキュータグローバル値を未定義のままリクエストヒープが破壊される可能性があります。ワーカーは、前のリクエストのメモリを指し続けるグローバル変数を保持したまま生存します。
同じワーカーが次のリクエストの早い段階で診断メッセージを出力すると、エグゼキュータがその状態を再初期化する前にポインタにアクセスする可能性があります。その後、PHP は解放されたバックトレースを破棄または更新し、攻撃者が再利用したメモリを追跡します。結果として生じるクロスリクエストの解放後使用は、制御されたメモリ破損へと発展させることができます。私たちはこのプリミティブを使用して、Drupal に対する認証なしのリモートコード実行(RCE)を実証しました。
バグ: OPcache の型混乱(Type Confusion)
OPcache はコンパイルされた PHP 構造体を共有メモリに永続化し、ワーカーごとのランタイムポインタマップにインデックスを割り当てます。ワーカーは共有フロンティアを介してこれらのインデックスを調整します。 zend_accel_script_persist() の実行中、PHP はプロセスローカルの CG(map_ptr_last) フロンティアを進めます。対応する共有フロンティアが公開されるのは、永続化が完了した後のみです。これら 2 つのイベントの間で割り当てが失敗すると、プロセスローカルな進行状態がそのまま残り、部分的に永続化されたオブジェクトが、共有状態ではまだ利用可能とみなされているスロットを参照することになります。
その後、別のワーカーがそれらのスロットの 1 つを別のランタイムオブジェクトのために再利用すると、古い共有メタデータが誤った型のポインタに解決されます。この不一致により、ワーカー間の型混乱が生じ、共有 OPcache の状態が破損します。私たちはこのプリミティブを使用して、WordPress に対する認証なしの RCE チェーンを構築しました。
これら 4 つのバグ以外にも、別のバリアントが存在します。当初これら 4 つを PHP に報告しましたが、この調査を通じて、この脆弱性は PHP のコードベースの深部に根ざしており、包括的な修正が必要であることに気付きました。その他のバリアントも、同じ 2 つの CVE に包含されるはずです。
結論
インターネットの 70% が影響を受ける中、PHP2Shell の影響は過大評価しすぎることはありません。これは AI の変曲点を示しています。脆弱なコードは 1 十年以上にわたって存在していましたが、AI が変えたのは、その弱点を理解し、実際に機能するエクスプロイトに変える能力です。最先端の AI モデルと適切なツールを使用すれば、かつては世界トップクラスのチームが数か月を要した作業を、一人の研究者が 1 週間で完了させました。
これにより、発見と悪用の両方の経済性が変化します。かつては悪用が現実的ではないと思われていた脆弱性が、現実的な標的となります長年の精査を生き延びてきた欠陥を発見し修正するチャンスを、同じ能力が防御側にも提供します。
Wiz は本調査を通じて Wiz Atlas、Gemini 4 Argon、および GPT-5.6 Sol を使用し、特に Argon は脆弱性の発見と修復の支援において極めて重要な貢献を果たしました。
この作業をルーティン化することが私たちの機会であり、既存ソフトウェアの欠陥を体系的に見つけ出し、本番環境に到達する前に新しい欠陥を捕捉することにつながります。PHP、OpenAI、Calif との協調的な取り組みは、私たちが共有するソフトウェアの基盤を強化するために AI を活用し、その目標を前進させるものです。
責任ある開示のタイムライン
2026年8月19日: Wiz Researchが、Wiz Atlas、Gemini 4 Argon、およびGPT-5.6 Solを使用して初のPHP脆弱性を発見。
2026年8月20日: Drupalに対する認証なしRCE(リモートコード実行)を確認。
2026年8月21日: WordPressに対する認証なしRCEを確認。
2026年8月24日: Wiz ResearchがPHPセキュリティチームに脆弱性を報告。
2026年9月21日: PHPチームが報告を受領し、協調修正の作成を開始。
2026年10月21日: パッチが適用されたPHPのリリースが公開される。
2026年10月21日: 一般公開。
お問い合わせ
こんにちは!私たちはWiz ResearchチームのSagi Tzadik、Shir Tamari、Nir Ohfeld、Tomer Schwartzです(@wiz_io)。私たちは、クラウドをすべての人にとってより安全な場所にするというひとつの目標を持った、ベテランのホワイトハットハッカーのグループです。クラウドソフトウェアにおける新たな攻撃ベクトルの発見や、組織が依存するシステムにおける分離不備の問題の特定に注力しています。Xまたは research@wiz.io まで、ぜひご連絡ください。