

PHP(PHP: Hypertext Preprocessorの再帰的頭字語)は、主にウェブ開発に使用される無料のオープンソースサーバーサイドスクリプト言語です。ウェブテクノロジートラッカーのW3Techsによると、PHPは「プログラミング言語を特定できるすべてのウェブサイトの約70%で実行されている」とされています。
PHP2ShellはPHPインタープリタ自体の重大な欠陥のペアで、それぞれCVSS v4.0スコアが9.2です。どちらも、認証されていない攻撃者が、アプリケーションコードが実行される前に、単一の細工されたウェブリクエスト、またはそのペアでウェブサーバー上のコードを実行できます。
- CVE-2026-109618はPHPのメモリ不足処理を悪用します。
- CVE-2026-109619は同じワーカー上の以前の失敗したリクエストから残された状態を悪用します。
バグはWordPress、Drupal、Magentoではなく、PHP自体に存在するため、影響を受けたサーバー上のすべてのアクセス可能なPHPエンドポイント(ログインページ、静的フォーム、ヘルスチェックを含む)が公開されます。
過去10年間のすべてのPHPリリースが影響を受けます(5.4までさかのぼります)。修正されたバージョンは8.5.12、8.4.27、8.3.36、8.2.35です。PHP 8.1以前は最小限のソースバックポートのみを取得します。
PHP2Shell開示タイムライン
2つの重大なPHP脆弱性CVE-2026-109618およびCVE-2026-109619は、プライベート研究から数日以内にアクティブな悪用へと進みました。以下はイベントのタイムラインです。
- 2026年8月:Califはリモートコード実行(RCE)パスをLLM支援監査中に発見し、PHPに報告します。Wizは独立して欠陥を発見し、PHPに報告します。
- 2026年10月初旬:Cloudflareはウェブアプリケーションファイアウォール(WAF)保護の構築を開始します。
- 2026年10月17日:AWSは予定されていた調整された開示の4日前に、Amazon MadPotに対する最初の既知の悪用試行を報告します。
- 2026年10月20日:PHP内の2つの重大なリモートコード脆弱性CVE-2026-109618およびCVE-2026-109619の詳細が、PHP Foundationによって予定されていた2026年10月22日の調整された開示の前にリークされました。
- 2026年10月21日:PHP Foundationは脆弱性を早期に公式に開示し、すべてのユーザーに更新を勧告します。影響を受けたソフトウェアバージョンの緊急更新は同日後に配信されます。
- 2026年10月21日以降:研究者は広範な悪用試行を報告しています。
環境内のPHP2Shellアクティビティを検索する方法は?
Sumo Logicを使用してPHP2Shellアクティビティを検索してみましょう。アクティビティの各タイプについて、2つの検索が見つかります。1つは様々なタイプの生ログに対するもので、もう1つは正規化されたレコードに対するもので、Sumo Logic Cloud SIEMを使用しているお客様向けです。
開始する前に2つの注意事項があります。
- 生ログ検索はチューニングが必要です。生ログ検索の例には、Apacheアクセスログなどのログソースタイプに固有の解析操作が含まれています。また、ログソースをオンボードする際に割り当てるログカテゴリ化(
_sourceCategory=linux/system webserverなど)にスコープされています。ここに含まれている生ログ検索の例を使用したい場合は、環境に合わせてカスタマイズする必要があります。 - レコード検索はそのまま機能します。Sumo Logic Cloud SIEMの正規化スキーマに基づいているため、変更なしで使用できます。
これらの検索は、初期悪用後のウェブサーバー上の動作を探します。悪用ペイロードを含む可能性のあるHTTPトランザクションを検索しません。多くの場合、ウェブアプリケーションファイアウォールなどのセキュリティ製品がインターネット公開ウェブサーバーの「前に」あり、これらの製品はHTTP分析を使用したウェブサーバー悪用に関する独自の検出セットを持っています。これらの製品からのテレメトリは、相関、アラート、および詳細な分析のためにSumo Logicに取り込まれるべきです。
このブログの検出エンジニアリングの焦点は、初期悪用と成功した攻撃からのフォローアップアクティビティに関連するウェブサーバー上の動作観察にあります。これらの観察は、その後、他のセキュリティ製品からのテレメトリと相関させることができます。
ウェブサーバーエラーのスパイクを探す
PHP2Shell脆弱性はPHPエラー処理の欠陥に由来するため、悪用試行はウェブサーバー上のエラーとして表示されます。Sumo Logicのtimeslice検索演算子を使用すると、ウェブサーバー上のエラーアクティビティのスパイクがあったかどうかを簡単に評価できます。
以下の例では、サーバーサイドエラー(HTTP応答コード500~599範囲を生成するもの)の数を1時間ごとにカウントしています。結果を視覚的にスキャンしてスパイクを探すことができます。
例1:(Syslogでラップされた)Apacheアクセスログ
(_sourceCategory=linux/system webserver_system=apache webserver_farm=* OR _sourceCategory=linux/syslog) httpd-access HTTP (50* OR 51* OR 52* OR 53* OR 54* OR 55* OR 59*)
| parse "httpd-access: *" as mesg nodrop
| parse regex field=mesg "^(?<src_ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(?<vhost>\S+)" nodrop
| parse regex field=mesg "\"(?<method>[A-Z]+)\s(?<uri>\S+)\sHTTP\/[\d\.]+\"\s(?<status_code>\d+)\s(?<size>[\d-]+)" nodrop
| where !isNull(status_code) and status_code >= 500 and status_code <= 599
| timeslice 1h
| count by _timeslice, _sourceHost
| sort by _timeslice, _count desc
例2:Sumo Logic Cloud SIEMレコード
以下のクエリは、デプロイメント内でweb_serversまたはhttp_servers 標準マッチリストが作成および入力されていることに依存していることに注意してください。
_index=sec_record*
| where http_response_statusCode >= 500 and http_response_statusCode <= 599
| where jsonArrayContains(listMatches, "web_servers") or jsonArrayContains(listMatches, "http_servers")
| timeslice 1h
| count by _timeslice, dstDevice_ip
| sort by _timeslice, _count desc

図1:Webサーバーエラーアクティビティのスパイク
Webサーバープロセスがシェルを生成していることを特定する
攻撃者がPHP2Shellを正常に悪用した場合、WebサーバーまたはPHPプロセスの子プロセスを通じて悪意のあるコードを実行する可能性があります。以下のクエリは、WindowsおよびLinux環境の両方で、一般的なWebサーバープロセスが完全なOSシェルを起動する場合を特定します。
例1:Windowsプロセスログ
_sourceCategory ="windows/eventlogs"
| parse "<EventID>*</EventID>" as eventId
| where eventId = "4688"
| parse "<Data Name='ParentProcessName'>*</Data>" as parentBaseImage nodrop
| parse "<Data Name='NewProcessName'>*</Data>" as baseImage nodrop
| parse "<Data Name='CommandLine'>*</Data>" as commandLine nodrop
| parse "<Data Name='SubjectUserName'>*</Data>" as user_username nodrop
| parse "<Data Name='SubjectDomainName'>*</Data>" as user_domain nodrop
| parse regex "<Computer>(?<device_hostname>[^<]+)</Computer>" nodrop
| where parentBaseImage matches /(?i).*(w3wp\.exe|httpd\.exe|nginx\.exe|php-cgi\.exe|tomcat\.exe)$/
| where baseImage matches /(?i).*(cmd\.exe|powershell\.exe|bitsadmin\.exe|pwsh\.exe|powershell_ise\.exe)$/
| fields device_hostname, user_domain, user_username, parentBaseImage, baseImage, commandLine
例2:Sumo Logic Cloud SIEMレコード
_index=sec_record*
| where parentBaseImage matches /(?i).*(w3wp\.exe|httpd\.exe|nginx\.exe|php-cgi\.exe|tomcat\.exe|\/httpd|\/nginx|\/php-cgi|\/tomcat|\/apache2|\/apache)$/
| where baseImage matches /(?i).*(cmd\.exe|sh\.exe|bash\.exe|powershell\.exe|bitsadmin\.exe|pwsh\.exe|powershell_ise\.exe|\/bash|\/sh|\/dash|\/zsh|\/ksh|\/csh|\/python3?|\/perl)$/
| fields device_hostname, device_ip, user_username, parentBaseImage, baseImage, commandLine

図2:nginxから起動されるシェルを検出
Webサーバープロセスが一般的なWebシェルコマンドを実行していることを確認する
Webサーバーは、完全なOSシェルを経由するのではなく、シェルコマンドを直接実行することもあります。以下のクエリは、Webサーバープロセスの子プロセスとして実行される一般的な検出、認証情報の収集、および流出コマンドを特定します。
例1:Windowsプロセスログ
_sourceCategory ="windows/eventlogs"
| parse "<EventID>*</EventID>" as eventId
| where eventId = "4688"
| parse "<Data Name='ParentProcessName'>*</Data>" as parentBaseImage nodrop
| parse "<Data Name='NewProcessName'>*</Data>" as baseImage nodrop
| parse "<Data Name='CommandLine'>*</Data>" as commandLine nodrop
| parse "<Data Name='SubjectUserName'>*</Data>" as user_username nodrop
| parse "<Data Name='SubjectDomainName'>*</Data>" as user_domain nodrop
| parse regex "<Computer>(?<device_hostname>[^<]+)</Computer>" nodrop
| where parentBaseImage matches /(?i).*(w3wp\.exe|httpd\.exe|nginx\.exe|php-cgi\.exe|tomcat\.exe|apache).*/
| where commandLine matches /(?i).*(whoami|net user |ping |systeminfo |netstat |arp -a|ipconfig |ifconfig |curl |wget ).*/
| fields device_hostname, user_domain, user_username, parentBaseImage, baseImage, commandLine
例2:Sumo Logic Cloud SIEMレコード
_index=sec_record*
| where parentBaseImage matches /(?i).*(w3wp\.exe|httpd\.exe|nginx\.exe|php-cgi\.exe|tomcat\.exe|apache|\/httpd|\/nginx|\/php-cgi|\/tomcat|\/apache2).*/
| where commandLine matches /(?i).*(whoami|net user |ping |systeminfo |netstat |arp -a|ipconfig |ifconfig |curl |wget |id |uname |cat \/etc\/passwd|nc -).*/
| fields device_hostname, device_ip, user_username, parentBaseImage, commandLine

図3:Internet Information Serverの子プロセスとしてのリモートwgetコマンド
Sumo Logic Cloud SIEM検出
Sumo Logic Cloud SIEMには、Webシェルアクティビティを検出し、PHP2Shellによって正常に悪用されたWebサーバーを特定するのに役立つ、すぐに使用できるルールが複数あります。ルールの検出理論は、上記で説明したクエリと同じです。つまり、Webサーバープロセスの異常な子プロセスとWebサーバーのエラー率のスパイクです。
以下の検出は、潜在的な侵害を調査するのに役立ちます。
| Cloud SIEMルールID | ルール名 |
|---|---|
| MATCH-S00164 | Webサーバーによって生成された疑わしいシェル |
| MATCH-S00174 | 一般的なWebシェルコマンドを実行するWebサービス |
| MATCH-S00539 | 疑わしいプロセスを実行するWebサーバー* |
| OUTLIER-S00036(新規) | 送信元IPからのHTTPサーバーエラーのスパイク |
| OUTLIER-S00037(新規) | 宛先IPへのHTTPサーバーエラーのスパイク |
前述のように、CHAINルールを作成することで、PHP2Shell悪用の検出精度を高めることができます。CHAINルールは、エンティティのPHP2Shell(WAFアラートなど)のエッジデバイス観測と、上記の表のWebシェル検出ロジックを相関させます。
これらのルールには、標準マッチリストの作成と入力が必要です。MATCH-S00539は「web_servers」マッチリストを使用して、Webサーバー上のプロセス実行への検出をスコープします。
OUTLIER-S00036およびOUTLIER-S00037は、サーバー側エラーを追跡するために「web_servers」または「http_servers」マッチリストが必要です。マッチリストを作成して入力する方法をご覧ください。
PHP2Shellを修正および軽減するための推奨事項
PHPグループのガイダンスは明確です。今すぐ更新してください。
「リスク対象:Webリクエストを提供するすべてのPHPインストール(PHP-FPM、mod_php付きApache、php-cgi、FrankenPHP、LiteSpeedを含む)。mod_phpのリスクが最も高いと考えられており、認証されていないリクエストがアプリケーションコードが実行される前に攻撃をトリガーできる実証済みの悪用があります。」PHPグループの完全なアドバイザリをこちらでご覧ください。
コミュニティ分析によると、悪用が成功するとWebサーバーユーザーコンテキストでコマンド実行が可能になります。そこから、攻撃者はWebシェルをデプロイし、設定ファイルからAPIおよびデータベース認証情報を収集し、内部ネットワークに移動できます。
すぐに更新することが推奨されます。まだ更新できない場合は、上記の検索と検出を使用して、影響を受けるサーバーを監視し、悪用が成功したことを示す悪用後のアクティビティを検出してください。
Cloud SIEMをまだお持ちでなく、これらのような脅威を検出および対応するのにどのように役立つかを理解したい場合は、デモを予約して詳細をご覧ください。
参考資料とその他のリソース
NIST脆弱性情報
PHPのガイダンス
サイバーセキュリティコミュニティのリソースとレポート
- https://calif.io/php2shell/
- https://www.wiz.io/blog/php2shell-php-rce
- https://www.huntress.com/blog/php2shell-leaked-critical-php-vulnerabilities
- https://www.crowdstrike.com/en-us/blog/crowdstrike-protects-customers-from-php-rce-zero-days/
- https://thehackernews.com/2026/10/someone-tried-to-exploit-php2shell-4.html
- https://openai.com/index/coordinated-disclosure-of-critical-vulnerabilities/
- https://aws.amazon.com/blogs/security/amazon-threat-intelligence-identifies-php2shell-exploitation-prior-to-public-disclosure-in-madpot/
- https://blog.checkpoint.com/security/php2shell-what-we-know-about-the-leaked-critical-php-vulnerabilities-cve-2026-109618-cve-2026-109619/
- https://blog.cloudflare.com/php-vulnerabilities-waf-protection
- https://research.jfrog.com/post/php2shell-all-you-need-to-know-about-cve-2026-109618-and-cve-2026-109619/
- https://www.reuters.com/technology/what-is-php-why-did-it-take-government-websites-offline-2026-10-21/



