HN 日本語サマリー

← 一覧へ戻る
セキュリティ

PHP2Shell: AIがPHPの重大なRCEを発見

PHP2Shell: AI uncovers critical RCE in PHP (wiz.io)

399 pointsby danlark1151 コメント

要約

Wiz Researchは、インターネットの70%を支えるPHPのコアに複数の重大な脆弱性を発見しました。これらの脆弱性は、アプリケーション自体ではなくPHPのエンジン自体に存在し、メモリ開示や認証なしのリモートコード実行(RCE)を可能にします。過去10年間のPHPバージョン(5.4以降)が影響を受け、攻撃者はリモートから容易に悪用できる可能性があります。AIは、長年潜んでいたこれらの複雑な脆弱性を発見し、エクスプロイトを開発するプロセスを劇的に加速させました。

全文翻訳

PHP2Shell: AIがインターネットの70%に影響を与える重大なRCE脆弱性を発見

エグゼクティブサマリー

  • Wiz Researchは、世界中のウェブサイトの70%を支える人気の汎用スクリプト言語であるPHPのコアに、複数の重大な脆弱性を発見しました。これらの脆弱性を悪用することに成功すると、攻撃者は影響を受けたサーバーを制御下に置き、機密データを盗み出し、実行中のウェブサイトを改ざんすることが可能になります。

  • PHPはウェブのバックボーンです。WordPress、Joomla、Drupal、WikipediaのMediaWikiなど、多くの人気プラットフォームで利用されているプログラミング言語です。

  • これらの脆弱性には、メモリ開示や、実行中のアプリケーションとは無関係のPHP自体における認証なしのリモートコード実行が含まれており、影響を受けるすべてのウェブサイトを直ちに危険にさらします。

  • 過去10年間にリリースされたPHPのバージョンは、少なくとも1つの脆弱性(バージョン5.4まで遡る)の影響を受けています。攻撃者はリモートから、場合によってはかなり容易にこれらの脆弱性を悪用できます。直ちにパッチを適用することを強く推奨します。

  • 2026年10月21日、PHPはパッチをリリースしました。これはコアエンジンにおける複数のメモリ安全性脆弱性を修正するものです。

  • これらの発見は、PHP、そしておそらくソフトウェア史上でも最も深刻な脆弱性の1つにランクされます。根本的な欠陥は何十年も存在していましたが、その悪用可能性を実証するには、人間の研究者が実質的に達成できる限界にある、例外的に複雑なステップの連鎖が必要でした。最先端のAIモデルは、その障壁を大幅に低減し、長年の欠陥をエクスプロイトに変えました。

概要

この記事では、最先端のAIが、10年以上PHPコードベースに隠されていた脆弱性を発見し修正するのにどのように役立ったかを説明します。以下に説明する問題はすべて、10年以上前に下された主要なアーキテクチャ上の決定に起因しており、2つのCVEに分類され、深刻度はCVSS 9.2に達しました。この作業は、顧客を保護し、バリアントを見つけ、検出と緩和策を展開し、協調開示のためにパッチを検証するための業界横断的な取り組みへと発展しました。

PHPのほぼすべてのバージョンが、これらの問題の少なくとも1つに影響を受けており、PHP 5.4まで遡るリリースも含まれます。これらの脆弱性により、認証されていない攻撃者は影響を受けたサーバー上でコードを実行したり、機密性の高いプロセスメモリを読み取ったりすることができます。そのメモリには、他のリクエストやサーバー自体のパスワード、認証トークン、APIキー、証明書が含まれている可能性があります。

PHPは、WordPress、Drupal、MediaWiki(Wikipediaを実行するソフトウェア)を支える、ウェブの大部分を支えるプログラミング言語です。そのコアエンジンにおける欠陥は、アプリケーションコード自体が安全であっても、このエコシステム全体のウェブサイトに影響を与える可能性があります。

一部の脆弱性は、セキュリティに関する基本的な仮定に挑戦するため、転換点となります。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はどのように支援できるか?

Wizの顧客は、Wiz Threat Intel CenterのPHP2Shellに関するアドバイザリを参照してください。これには、エージェントレスおよびランタイムの脆弱性検出、Wiz DefendとSensorによるエクスプロイト検出、自動応答ポリシー、さらに修正と脅威ハンティングのガイダンスが含まれています。

最新バージョン(1.0.12768)を使用しているSensorのお客様は、PHP2Shellエクスプロイトの典型的な動作を示すプロセスを自動的に終了させる組み込み応答ポリシーを有効にすることもできます。

脆弱性

開示された脆弱性はすべてメモリ安全性に関する問題であり、PHPがリクエスト処理中に致命的なエラー(特にメモリ不足エラー)を処理する方法のバグに起因しています。これらのバグは、リクエストが予期せず終了した後、破損したPHPの内部状態を残す可能性があります。後続のリクエストまたはワーカーがその古い状態を再利用すると、メモリ開示または破損につながる可能性があります。以下に、私たちがPHPに報告した各バグによって実証された影響の種類を示す表を示します。以下のアプリケーションは、RCEデモンストレーションのために選択したターゲットです。これらは代表的なターゲットであり、エクスプロイトにはこれらのCMSのいずれかが必要なわけではありません。脆弱なコードはPHP自体にあるためです。

トラッキングIDバグ攻撃者が達成できること私たちが実証したこと
CVE-2026-109618Upload-progress unserializer use-after-free Remote process-memory disclosureプロセスメモリの破損とコード実行 認証なしのPHPワーカーメモリ開示WordPress、Drupal、Joomlaでのプリ認証RCE アプリケーションに依存しないリモートメモリ開示
CVE-2026-109619Fatal-error backtrace use-after-free OPcache type confusionプロセスメモリの破損とコード実行 共有PHP状態の破損とコード実行Drupalでのプリ認証RCE WordPressでのプリ認証RCE

この記事では、この問題のあるパターンに従う悪用可能なバグの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のインフレクションポイント

脆弱なコードは何十年も前から存在していました。これらの欠陥を動作するエクスプロイトに変えるには、複数のバグを連鎖させ、PHPがリクエスト間でメモリをどのように割り当て、再利用するかを考慮する必要がありました。メモリバグは非常に複雑です。PHPのバージョン、設定、アプリケーションの動作の違いにより、エクスプロイトが依存する仮定が壊れる可能性があります。あるデプロイメントで機能する攻撃は、別のデプロイメントで機能するように大幅な調整が必要になる場合があり、それぞれにさらなる分析、テスト、デバッグが必要です。AI以前は、この手作業の実装は困難であり、スケーリングはさらに困難でした。

AIがあれば、これはもはや障壁ではありません。LLMは、エクスプロイトを異なるPHPバージョン、設定、メモリレイアウトに適応させるのに役立ちます。テストおよびデバッグツールを使用すると、モデルは失敗を分析し、調整を反復処理できるため、ターゲットごとの専門家の労力を削減できます。これにより、異なるデプロイメント全体への攻撃のスケーリングの障壁が大幅に低下します。

これは、発見と悪用の両方の経済性に変化をもたらします。AIが複雑なエクスプロイトの開発と適応に必要な労力を削減するにつれて、かつては悪用が非現実的だと思われていた脆弱性が、実行可能なターゲットになります。

この研究では、Wiz Atlas、Gemini 4 Argon、GPT-5.6 Solを使用しました。特に、Gemini 4 Argonは、脆弱性の発見、エクスプロイト開発、攻撃検出、パッチ検証において非常に貴重な貢献をしました。

Wizのチームは、Gemini 4 Argonを使用して、最先端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は、クラウド、ホスティングプロバイダー、コンテンツ配信ネットワーク、および数百万の独立して管理されているサーバー全体で実行されています。技術的な詳細が公開される前に露出を減らすには、エコシステム全体にわたる調整された作業が必要でした。

技術的詳細

バグ:Upload-progress unserializer use-after-free

PHPのセッションモジュールは、アップロードプログレス処理中に、初期化前のウィンドウでセッションデータをデコードできます。デコーダーは、リクエスト所有のブックキーピングをBG(unserialize)に格納します。致命的な割り当てエラーは、このパスを中断し、リクエストヒープを破壊し、アンシリアライザーのグローバル状態を公開されたままにする可能性があります。後続のリクエストが同じワーカーによって処理されると、PHPは攻撃者によって再利用されたメモリを、ライブなアンシリアライザーのブックキーピングとして消費する可能性があります。古い状態は、強力なメモリ破損プリミティブになります。これをメモリ開示と組み合わせてアドレスの不確実性を排除し、WordPress、Drupal、Joomlaで認証なしのリモートコード実行を達成しました。

WordPress、Drupal、Joomlaのチェーンは代表的なデモンストレーションです。根本的なプリミティブはPHPエンジンのレベルに存在し、脆弱なバージョンで実行されているPHPアプリケーションに影響を与える可能性があります。

これらの問題はアプリケーションレイヤーの下で実行されるため、アプリケーションログにはほとんどコンテキストが含まれていない場合があります。システムがパッチ適用されるまで、防御者は、異常なマルチパートリクエストに続いてメモリ制限エラーまたは繰り返しのHTTP 500応答、予期せず大きいまたはフォーマットが不正なPHPSESSID応答Cookie、および説明不能なPHPワーカーのチャーンに特に注意を払うべきです。これらのシグナルは調査の指針となります。PHPセキュリティアップデートの適用が、唯一の完全な修復策です。

バグ:リモートプロセスメモリ開示

PHPは、通常のモジュール初期化が完了する前のリクエスト開始時に、RFC1867マルチパートリクエストを解析します。セッションのアップロードプログレス処理は、この早期段階でセッション状態を初期化し、PS(id)にセッションIDを公開できます。メモリ不足エラーは、クリーンアップが完了する前にリクエストを中止する可能性があります。PHPはリクエストヒープを破棄し、PS(id)が解放された割り当てを指したままにする可能性があります。後続のマルチパートリクエストが同じワーカーによって処理される際に、通常のセッション初期化がそのポインタをリセットする前に、アップロードプログレスのクリーンアップパスに到達します。PHPはその古いポインタと長さをライブなzend_stringとして信頼し、再利用されたヒープの内容をURLエンコードしてPHPSESSID応答Cookieに格納します。この攻撃は、アプリケーションがsession_start()を呼び出さない場合でも機能するため、問題はアプリケーションに依存しません。攻撃者のリクエスト外のデータを含む、ライブワーカーメモリの攻撃者サイズの領域の認証なし開示を実証しました。

バグ:Fatal-error backtrace use-after-free

影響を受けるバージョンでは、PHPは直近の致命的なエラーのバックトレースをEG(last_fatal_error_backtrace)に保持します。致命的なメモリ不足エラーは、そのエグゼキューターグローバル値を未定義にすることなくリクエストヒープを破壊する可能性があります。ワーカーは、前のリクエストのメモリを指すグローバル値を保持したまま存続します。同じワーカーが次のリクエストの早い段階で診断を出力する場合、エグゼキューターがその状態を再初期化する前にポインタにアクセスできます。PHPはその後、ぶら下がったバックトレースを破棄または更新し、攻撃者によって再利用されたメモリをたどります。結果として生じるクロスリクエストのuse-after-freeは、制御されたメモリ破損に発展する可能性があります。このプリミティブを使用して、Drupalに対して認証なしのリモートコード実行チェーンを実証しました。

バグ: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のインフレクションポイントを示しています。脆弱なコードは何十年も前から存在していました。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 TeamのSagi Tzadik、Shir Tamari、Nir Ohfeld、Tomer Schwartzです(@wiz_io)。私たちは、単一の目標を持つベテランのホワイトハットハッカーのチームです。それは、クラウドをすべての人にとってより安全な場所にするということです。私たちは、クラウドソフトウェアにおける新しい攻撃ベクトルを発見し、組織が依存するシステムにおける分離の問題を明らかにするのに注力しています。Xまたはresearch@wiz.ioでお気軽にご連絡ください。