PHP2Shell:PHPのRCEバグで数百万件の悪用試行が発生(CVE-2026-109618)
CISAは10月26日、PHP2Shellの2つの欠陥をKnown Exploited Vulnerabilitiesカタログに追加し、連邦機関のパッチ適用期限を10月29日に設定しました。PHPエンジンの認証不要RCEで、8.5.12、8.4.27、8.3.36、8.2.35で修正されています。
要点
PHP2Shellは、PHPのリクエストライフサイクルにある2つのエンジンレベルのリモートコード実行バグを、研究者とベンダーが呼ぶ名称です。
- PHPエンジン自体の2つのメモリ安全性バグ、CVE-2026-109618(メモリ不足処理がリクエスト状態を破損)とCVE-2026-109619(古いグローバル状態が次のリクエストまで残存)により、未認証のリモート攻撃者がWebワーカーとしてコードを実行できます。バグはアプリケーションより下層にあるため、クリーンなWordPress、Drupal、Joomlaも同様に危険にさらされます。
- Webリクエストを処理する未修正のPHPインストールはすべて影響を受けます。PHP-FPM、Apache mod_php、php-cgi、FrankenPHP、LiteSpeedが該当します。PHPセキュリティチームは両方をクリティカル、CVSS v4.0 9.2と評価し、デフォルトの制限値を使用するmod_phpに対してHTTP経由の完全なリモートコード実行を確認しました。
- 悪用試行は公開後数時間で急増し、10月22日には数百万件に達しました(Cloudflare)。AmazonのMadPotハニーポットは、公開の4日前である10月17日に最初の試行を観測しています。
- CISAは10月26日、両方の欠陥をKnown Exploited Vulnerabilities(KEV)カタログに追加し、連邦機関のパッチ適用期限を10月29日に設定しました。
- 10月24日、Adel Karimiはハニーポットに対するリモートコード実行を確認しました。「これは単なるクラッシュ後の不審なプロセスではなく、利用可能なメモリ漏えいを伴うRCEとして確認されました。」公開エクスプロイトは10月25日にStealMyBitcoinチャレンジを攻略しました。10月27日時点で、実環境の被害者の侵害は公には確認されていません(Sophos、Previdian、Wordfence)。
- 今すぐPHP 8.5.12、8.4.27、8.3.36、8.2.35へ更新してください。KEVへの登録により期限が設定されています。PAN-OS 10.2、11.1、11.2、12.1、12.2は影響対象のPHPを組み込んでいます。Palo Alto Networksは11系列のホットフィックスを公開し、残りも10月30日までを予定しています。今日更新できない場合、以下の緩和策は時間を稼ぐだけです。
影響を受けますか?
次の条件を両方満たす場合、影響を受けます。
- PHP 5.4以降を実行し、PHP-FPM、Apache mod_php、php-cgi、FrankenPHP、LiteSpeed経由でWebリクエストを処理している。リクエスト本文を解析しないCLI専用インストールは、実証された経路の対象外です。
- PHP 8.2~8.5では、そのブランチの2026年10月21日セキュリティリリースより古い。PHP 7.4、8.0、8.1はサポート終了済みで原理的に影響を受け、セキュリティチームが最小限のソースバックポートを公開しました。SysdigによればPHP 5.4~7.3も原理的に影響を受けますが、PHPプロジェクトによるバックポートはありません。
アプリケーションがリクエスト本文APIを呼ばなくても、安全だと思わないでください。確認されたmod_phpエクスプロイトは、アプリケーション固有のコードが実行される前のリクエスト起動中に発火します。
ホストと、すべてのコンテナーおよびCIイメージの中で実行中のものを確認します。
php -v
php -i | grep -E '^(memory_limit|post_max_size|session.upload_progress.enabled)'
apachectl -M 2>/dev/null | grep -i php # Apache mod_php loaded?
php-fpm -v # FPM pool version
docker ps --format '{{.Image}}' | sort -u # images behind running containers
docker exec <container-name> php -v # PHP inside a running container
docker images | grep php # locally pulled PHP image tags
CIでは、たとえばdocker run --rm <registry>/<image>:<tag> php -vで、パイプラインが実際にビルドするイメージを確認してください。
Palo Alto Networksは、組み込みPHPによってPAN-OS 10.2、11.1、11.2、12.1、12.2が影響を受けるとしています。露出は管理プレーンのみで、HTTPS Web UIとXML APIが対象です。PAN-OSは管理インターフェース、または管理プロファイルが付いたデータプレーンインターフェースでこれらを提供します。GlobalProtectポータルとゲートウェイ、Clientless VPN、キャプティブポータルは影響を受けません。
10月27日時点で11系列のホットフィックスが公開されています。全一覧はアドバイザリの表と以下のタイムラインにあります。残る9系列の提供予定は2026年10月27~30日です。Palo Altoは自社製品への影響をHigh、CVSS 8.7と評価しています。Cortex XCORE SaaSも影響を受けましたが、10月21日に修復されました。
| ブランチ | 影響を受けるバージョン | 修正バージョン |
|---|---|---|
| PHP 8.5 | 8.5.0~8.5.11 | 8.5.12 |
| PHP 8.4 | 8.4.0~8.4.26 | 8.4.27 |
| PHP 8.3 | 8.3.0~8.3.35 | 8.3.36 |
| PHP 8.2 | 8.2.0~8.2.34 | 8.2.35 |
| PHP 7.4、8.0、8.1 | すべて(サポート終了) | PHPセキュリティチームがソースバックポートを公開 |
| PHP 5.4~7.3 | すべて(サポート終了、原理的に影響) | PHPプロジェクトによるものはなし。サポート対象ブランチへ移行 |
露出は推定ではなく測定されています。Qualysは12,000の顧客から匿名化データを分析しました。
- 公開から12時間以内にパッチが適用されたPHPインスタンスは199,000だけでした。
- Qualysが測定したPHPインスタンスの71パーセントに当たる約1億1,000万インスタンスは、ベンダーパッチが提供されないサポート終了のPHP 5.4~8.1を実行しています。
- さらに4,400万が、修正がまだ適用されていないサポート対象ブランチを実行しています。
Censysは公開ダッシュボードで、この遅れのインターネット公開部分を追跡しており、10月27日時点で影響対象バージョンを実行し続けるPHPサービスを3,251万超と数えています。
どう修復しますか?
使用ブランチの修正リリースへ更新してください。SAPI連携の整合性を保つため、ディストリビューションのパッケージを優先します。
# Debian and Ubuntu (upgrades every installed php* package and Apache's mod_php)
sudo apt update
sudo apt install --only-upgrade $(dpkg -l 'php*' 'libapache2-mod-php*' | awk '/^ii/ {print $2}')
# RHEL, CentOS Stream, Rocky, Alma, Fedora
sudo dnf update 'php*'
# Containers: rebuild on a fixed tag and recreate the service
docker pull php:8.4.27
docker compose build --pull && docker compose up -d
更新後、すべてのPHPワーカーとWebサーバーを再起動してください。ソースからビルドする場合やサポート終了ブランチを実行する場合は、セキュリティチームの7.4、8.0、8.1向けバックポートを使用するか、サポート対象ブランチへ移行してください。
まだ更新できない場合、PHPアドバイザリの次の対策が特定の攻撃経路を減らします。どれもインストールを安全にはせず、アドバイザリも明記しています。
CVE-2026-109618では、攻撃者が制御できるメモリ制限を取り除き、入力の範囲を小さくします。
; PHP-FPM pool (for example www.conf); php_admin_value stops apps from overriding it
php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 8M ; use 32M if you need file uploads
Apache mod_phpでは、Apache設定で同じ値を設定します。
php_admin_value memory_limit -1
php_admin_value post_max_size 8M
さらに次を行います。
upload_max_filesizeをpost_max_sizeより小さく保ちます。- 有効なContent-Lengthがないリクエストも含め、デコード後のリクエストサイズ、入力フィールド数、multipartパート数、ヘッダー数、入れ子の深さにWebサーバーまたはプロキシで制限を強制します。
RLIMIT_ASやRLIMIT_DATAは使わないでください。mmap()を強制的に失敗させると、脆弱なbailout経路に直接到達します。
CVE-2026-109619では、php.iniに次を設定します。
session.upload_progress.enabled = 0
; PHP 8.5 only:
fatal_error_backtraces = 0
PHP-FPMプールでは代わりにプール構文を使い、ワーカーを再起動します。
php_admin_value[session.upload_progress.enabled] = 0
; PHP 8.5 only:
php_admin_value[fatal_error_backtraces] = 0
さらに3つの手順があります。
ini_set()、.user.ini、error_reporting、@、display_errors=Offに依存しないでください。アドバイザリは、状態を利用する処理がこれらの有効化前に動くとしています。- リクエストごとに適用される無効または非推奨のINI設定を削除し、攻撃者が到達できる致命的エラーと実行タイムアウトを修正します。
- 性能が許すなら
pm.max_requests = 1を検討します。
このFPM設定が役立つのはCVE-2026-109619だけです。同じワーカーに2つ目のリクエストが届くのを防ぐためで、単一リクエスト内で発火し状態が使用されるCVE-2026-109618には効果がありません。
根本原因は何ですか?
どちらのバグも、エンジン深部からリクエストを中断するlongjmp()というPHPのbailout機構と、長寿命のワーカーがリクエスト間で保持する状態の組み合わせによって生じます。
CVE-2026-109618:PHPはメモリ不足(OOM)エラー時にlongjmp()でリクエストを中断します。リクエストメモリには、完全な初期化前に到達できる場合があります。その時点で割り当てが失敗すると、アドバイザリによれば「PHPは早期終了を正しく考慮せず、リクエストメモリを無効な状態のまま残します。失敗した割り当てと無効なメモリが関連している必要はありません。その後、リクエスト終了処理がそのメモリを読み取ったり、それに基づいて分岐したりする場合があります」。
攻撃者に実際のメモリ不足は不要です。multipart解析のいくつかの特性により、1つのHTTPリクエストで意図的にmemory_limitを使い切れます。
- 有効なContent-Lengthがないmultipart本文は、データを供給し続けながら最初の
post_max_size確認を通過します。 - 1つのパートに無制限の数のヘッダーを含められ、それらのメモリ上の表現は通信形式よりはるかに大きくなります。
- 空のファイルコントロールは
max_file_uploadsに数えられず、メタデータ配列を作ります。
CVE-2026-109619:ワーカーは、一時的にリクエスト所有メモリを指すグローバル状態(エラー、セッション、オブジェクト、拡張の状態)を保持し、リクエストヒープを解放する前にリセットする必要があります。2つの障害形態がそのリセットを妨げます。
- メモリ枯渇や
Maximum execution time exceededなどの致命的エラーが、リセット前に操作を中断する場合があります。 - 遅い段階の非致命的診断が、消去済みのエラー状態を再び埋める場合があります。
その後、ワーカーのグローバル状態が参照したままヒープが解放されます。
確認された2つの利用処理が、次のリクエストの初期化前にこの古い状態を読み取ります。
- INI設定の適用中に発生する警告。mod_phpでは
.htaccessとApacheのphp_valueがphp_request_startup()より前に動きます。 - セッションのアップロード進捗処理。通常のセッション初期化より前にセッション状態に到達します。デフォルトで有効であり、
session_start()の呼び出しは不要です。
どのように悪用されますか?
CVE-2026-109618の攻撃は、起動中にmemory_limitを枯渇させる細工したmultipartリクエストです。リクエストメモリが半初期化状態の間に割り当てが失敗してbailoutし、その後mod_phpの終了処理がアプリケーションコードの実行前に無効な状態を読み取ります。
公開PoCは存在しますが、StealMyBitcoinチャレンジのAlpineビルドに合わせて調整されており、ほかのビルドでは中断します。本番ビルドにそのまま使える公開エクスプロイトはありません。VulnCheckは本番設定のx86-64システムで機能する独自の連鎖を文書化しており、以下で説明します。攻撃者のインフラにも動作するツールがあります。確認されたmod_php経路は次のとおりです。
- 攻撃者は、リクエスト起動中に
memory_limitを使い切るよう細工したmultipartリクエストを送ります。有効なContent-Lengthを付けず、極めて多数のヘッダーを持つパート、またはmax_file_uploadsに数えられずメタデータ配列を作る空のファイルコントロールを含めます。 - リクエストメモリが半初期化の間に割り当てが失敗し、PHPが
longjmp()でbailoutします。 - mod_phpは起動に失敗しても無条件でリクエスト終了処理を実行します。そのためアプリケーションコードの実行前に、終了処理が無効な状態を処理します。
- 戦略的に配置したヒープにより、無効な状態への読み取りと分岐を制御フローの乗っ取りに変え、攻撃者がWebワーカーアカウントとしてコードを実行します。
CVE-2026-109619では、同じワーカー上で2つのリクエストが必要です。
- 生成側と利用側:生成側リクエストがリクエスト所有の状態を公開した後、致命的に終了します(OOM、タイムアウト、解析失敗)。利用側リクエストは、初期化によるリセット前に古い状態へ到達します。
- 最も強力な実証例:
fatal_error_backtracesが有効な状態の致命的エラーが、終了処理でリセットされないバックトレース状態を保存します。 - セッション経路:アップロードがセッションとデコーダー状態を早期初期化し、OOMがリセットを中断し、次のリクエストのアップロード進捗処理がダングリングポインターを使用します。
2社が動作するツールを文書化しました。
- SOCRadar:公開状態の攻撃者サーバーで発見された、mod_php上のPHP 8.4.26向けの自称ワンクリックエクスプロイトです。ワーカーを再利用し、セッションCookieからアドレスを漏えいさせてASLRを破り、セッションアップロード進捗を使ってシェルコマンドを実行します。同サーバーには約20サイトに対する条件確認スクリプトもありましたが、10月22日時点でエクスプロイトの前提条件を満たすサイトはありませんでした。
- VulnCheck:両CVEを連鎖させ、メモリを漏えいさせてASLRを回避し、ASLR有効かつ本番推奨設定
display_errors=offのx86-64上のPHP 8.4.26でコード実行を達成します。VulnCheckは、同じことをするほかの公開または商用エクスプロイトは把握していないとしています。
CVE-2026-109618のエクスプロイト連鎖はどう進みますか?
mod_phpにおけるOOMからコード実行までの全体の流れです。
Content-Lengthなし、大量のパートヘッダー"] --> B["起動時の本文解析で
memory_limitが枯渇"] B --> C["longjmp()のbailoutで
リクエストメモリが半初期化のまま残る"] C --> D["mod_phpはそれでも
リクエスト終了処理を実行"] D --> E["終了処理が無効な状態を
読み取り、それに基づいて分岐"] E --> F["ヒープ制御により
Webワーカーとしてコード実行"] style C fill:#f8d7da
攻撃者は何ができますか?
悪用に成功すると、Webワーカーの権限で認証不要のリモートコード実行が可能になります。VulnCheckの説明によれば、APIキー、データベース認証情報、環境変数、ワーカーがアクセスできるファイルの読み取りと、さらに移動するための足場を得られます。必要な条件は次のとおりです。
- PHPエンドポイントへのネットワークアクセスだけ。認証もユーザー操作も不要です。
- CVSSの攻撃の複雑さをHighにする条件、すなわちリクエストをまたいで生存するワーカーと、OOM経路では攻撃者が到達できる有限の
memory_limit、または失敗させられる割り当て。 - CVE-2026-109619では同じワーカーにリクエストを組み合わせること。アドバイザリによれば、ワーカー増加や再生成は信頼性を下げますが、条件自体は取り除きません。
どのベンダーが影響を受けますか?
PHPを組み込む製品は露出を引き継ぎ、ベンダーのアドバイザリ一覧は急速に広がりました。Palo Alto Networksは、組み込みPHPによってPAN-OS 10.2、11.1、11.2、12.1、12.2が影響を受けると確認しました。自社製品への影響はHigh、CVSS 8.7と評価し、10月27日時点で11系列のホットフィックスを公開、残りは2026年10月27~30日を予定しています。
PAN-OS以外にも、PHP2Shellの影響に言及するアドバイザリは現在数十のベンダーを対象とし、次が含まれます。
- ネットワークとセキュリティ:Arista Networks、F5、Huawei、NETGEAR、SonicWall
- インフラとストレージ:Broadcom、Dell、HPE、IBM、QNAP、Synology、Veeam
- ソフトウェアとSaaS:Citrix、Ivanti、Okta、Salesforce、Splunk
Drupal、Craft CMS、WordPressなどのCMSプロジェクトもアドバイザリを公開しています。
産業分野ではSecurityWeekが次の状況を報告しています。
- Schneider ElectricはEcoStruxure Security Expert 1.48.4.0、ProLeiT LINEoptimize、EcoStruxure Control Engineeringを修正しました。
- SiemensはRuggedcom APE1808が組み込みPAN-OS経由で影響を受けるとし、影響を受けない製品一覧を公開しました。
- DokuWikiを組み込むABBの製造実行システムが指摘されました。
- B&RはR4.4-65までのAPROLリリースを影響対象としました。
- Rockwell AutomationとJohnson Controlsは評価中でした。
これらのベンダーのアプライアンスを運用している場合、パッチ確認ではPHPのバージョンだけでなく、各社のアドバイザリも確認する必要があります。
なぜ修正が有効なのですか?
1つのコミット3584a98bda(「Avoid state corruption via bailout」、2026年10月18日作成、10月21日マージ)が両CVEを修正します。メッセージは2つの変更を正確に示しています。
- OOM時のbailoutをUnwindExitに置き換える
- 起動時にアクセスされる可能性がある各種グローバル状態を適切にリセットする
OOM経路では、パッチはOOMへの応答からlongjmp()によるbailoutを取り除きます。ソフトOOMは記録され、次のVMの安全な実行地点まで延期されます。
EG(delayed_oom).message = zend_string_init(buf, strlen(buf), /* persistent */ true);
GC_MAKE_PERSISTENT_LOCAL(EG(delayed_oom).message);
zend_string_addref(script_filename);
EG(delayed_oom).filename = script_filename;
EG(delayed_oom).lineno = script_lineno;
EG(delayed_oom).state = ZEND_OOM_STATE_PENDING;
zend_atomic_bool_store_ex(&EG(vm_interrupt), true);
OOMが実行器の整合性のある地点で処理されるため、終了処理は部分初期化状態を観測できなくなります。パッチはmemory_limitより上にハードメモリ上限も追加します。デフォルトではmemory_limitの2倍、上限が1 GiBを超える場合はmemory_limitに1 GiBを加えた値です。それを超える割り当ては、巻き戻す代わりに_exit()でプロセスを直ちに終了させます。
古い状態の経路では、各リクエストの終了時にリクエスト所有のグローバル状態をリセットします。次のリクエストが通常の初期化前に読むものは、解放済みメモリを指さなくなります。たとえば実行器の終了処理は、エラーと例外の状態を次のように消去します。
/* may be used by zend_error_zstr_at before init_executor */
EG(record_errors) = false;
EG(num_errors) = 0;
EG(errors) = NULL;
EG(error_handling) = EH_NORMAL;
EG(exception) = NULL;
修正は実証された経路に対して完全です。アドバイザリは、より広い状態リセットは予防的なものだとしています。ほかのエラー、例外、オブジェクト、拡張の状態群もリセット対象ですが、到達可能だったかどうかは各アプリケーションの生成側と利用側に依存します。
侵害されたかどうかを確認するには?
ログとセッションファイルで次の5つの兆候を確認してください。どれも調査に値し、アプリケーションコードへのアクセスは不要です。
- WebサーバーとPHP-FPMのログ:Content-Lengthがない、または使えないmultipartリクエストの急増、アプリケーションコードに到達しなかったリクエストでの反復的なワーカーのセグメンテーション違反やOOM kill、攻撃者が到達できるルートでの
Maximum execution time exceeded。 - 予期しないコードを含むPHPセッションファイル。VulnCheckは、中国拠点のIPがサーバー側セッションファイルを通じてWebシェルを配置しようとする試行を観測しました。
- multipartリクエスト中のセッションアップロード進捗フィールド。StealMyBitcoinを攻略したPoCは、アップロード進捗解析でOOM段階を発火させ、観測された探索プローブもこれらのフィールドを使用します。そのため
session.upload_progress.enabled = 0は、関連性が実証された緩和策です。 - Mirai系の後続トラフィック。Sophosは試行をPotassiumボットネット亜種と結び付け、TCPポート50792の134.199.154.64への接続とthunder.godofthunder.stのDNS参照を示しました。Wordfenceは追跡した送信元IPを公開しています。
- Webワーカーからの環境変数と認証情報の列挙。複数のベンダーが探索の波の目的として説明しています。
10月27日時点で、実環境の被害者の侵害は公には確認されていません。悪用のエビデンスは10月24日と26日に確かなものになりましたが、確認された実証は被害者ではなく、悪用可能に設定された対象に対して行われました。
Adel Karimiは10月24日、自身の単一ワーカーのmod_phpハニーポットに対する完全なリモートコード実行を検証しました。彼は「800 KiBのデコード済みCookieダンプがあり、そのダンプから公開エクスプロイトのオフセットを使って導出した関数アドレスが、後続の実行ペイロードに現れる」と報告しました。
0.0251 BTCの賞金を設け、意図的に脆弱にしたPHP 8.4.26を標的とするStealMyBitcoinチャレンジは、19.28時間後の10月25日に攻略されました。公開PoCはヒープとコードのアドレスを漏えいさせ、ASLRを破り、HashTableを偽造して最大20リクエストでzif_systemに到達します。オフセットはチャレンジのAlpineビルドに合わせて調整されており、ほかのビルドではコードアドレス漏えい段階で中断します。
Palo Alto NetworksのUnit 42は10月25日、欧州の政府機関がこれらの欠陥によって侵害されたと報告しましたが、同日にその原因の特定を撤回しました。同社はThe Hacker Newsに、「脆弱なPHPアプリケーションのコンテキストで実行された欧州政府機関への攻撃」を観測したものの、「初期侵入が特定のPHP2Shell CVEと関連することを確認できなかった」と説明しました。
タイムライン
- 2012年以降:Sysdigの分析によれば、PHP 5.4以降に脆弱なコード経路が存在。
- 2026-10-17:AmazonのMadPotハニーポットネットワークが後に確認した最初の悪用試行。公開の4日前。
- 2026-10-20:PHPが10月21日14:00 UTC予定の重大リリースを事前告知。両欠陥はCVSS v4.0 9.2。
- 2026-10-21:PHPがアドバイザリGHSA-w8hw-w9fx-j79w、GHSA-6wmf-4rv5-p3rpとともに8.5.12、8.4.27、8.3.36、8.2.35をリリース。Previdianは13:05 UTCに最初の悪用試行を記録。Cloudflareは公開45分以内に数万件、10月22日早朝までに数百万件を集計。Palo Alto NetworksがPAN-OSアドバイザリを公開。
- 2026-10-22:英国が予防措置として32のデジタルサービスを停止したと確認し、NCSCが約50,000件の警告を発行。Sophosが公開概念実証とPotassiumの試行を文書化。
- 2026-10-23:SOCRadarが攻撃者サーバー上のワンクリックエクスプロイトツールを文書化。Censysが依然として脆弱なPHPサービスを3,440万超と集計。PHPが関連する未修正のCVE-2026-115560について情報提供アドバイザリを公開し、次の通常リリースまで
session.upload_progress.enabled=0を推奨。 - 2026-10-24:Palo Alto Networksがアドバイザリを更新し、ブランチごとのホットフィックス予定を10月27~30日とする。Adel Karimiが単一ワーカーmod_phpハニーポットに対する完全なリモートコード実行を確認。利用可能なメモリ漏えいと、漏えいアドレスから導出して実行されたペイロードを含む。
- 2026-10-25:本記事を初公開。Palo Alto Networksが最初の3つのPAN-OSホットフィックス(10.2.18-h13、11.1.16-h4、11.2.10-h16)をリリース。Unit 42は、これらの欠陥による政府機関の侵害疑いを報告し、同日に撤回。意図的に脆弱なPHP 8.4.26を対象にしたStealMyBitcoinチャレンジが、ASLRを破る公開PoCによって19.28時間後に攻略される。
- 2026-10-26:さらに4つのPAN-OSホットフィックス(11.1.4-h38、11.1.6-h40、11.1.10-h36、11.1.13-h16)をリリース。CISAがCVE-2026-109618とCVE-2026-109619をKEVカタログに追加し、連邦機関の期限を10月29日に設定。
- 2026-10-27:Palo Alto Networksが10.2.13-h27、10.2.16-h12、12.1.7-h11、12.2.4-h1をリリースし、公開済み系列が11になる。oss-securityスレッドが、独自PHP 5.4~5.6ビルドの運用者による非公開の修正バックポートを示す。本記事をKEV登録とベンダーアドバイザリ一覧で更新。
よくある質問
PHP-FPMはmod_phpと同じくらい危険にさらされますか?
どちらも影響を受けますが、形は異なります。mod_phpは起動失敗後もリクエスト終了処理を行うため、アプリケーション固有の前提条件なしで確認された標的です。FPMは起動失敗時に子プロセスを終了するので、その正確な順序は遮断します。しかしアドバイザリは、アプリケーション実行中に状態を公開し、後のアップロード進捗リクエストで使用する別のFPM経路を検証しており、ソース分析でもFPMにはOOM経路の影響が残ります。
エラー表示やログを無効にすれば保護されますか?
いいえ。アドバイザリは、PHPが警告の報告、表示、記録を判断する前、またerror_reporting、@、display_errorsが有効になる前に、グローバル状態へアクセスすると明記しています。これらの設定が変えるのは見えるものだけで、エンジンが古い状態に対して行う処理ではありません。
サイトはクリーンで最新のアプリケーションコードを実行しています。安全ですか?
いいえ。バグはエンジンにあるため、アプリケーションを適切に管理しても露出は変わりません。SysdigはWordPress、Drupal、Joomlaのサイトはコード品質にかかわらず影響するとし、Censysは10月23日に依然として脆弱なPHPサービスを3,440万超と数えました。
3つ目のバグCVE-2026-115560はどうですか?
実在しますが条件は狭く、10月27日時点で未修正です。悪用には、設定でsession.serialize_handlerをphp_binaryまたはphp_serializeにし、セッションアップロード進捗を有効のまま、session_start()呼び出し前に実行時のini_set()でphpへ戻すアプリケーションが必要です。PHPは次の通常リリースで修正予定です。それまでは、10月21日のアドバイザリがCVE-2026-109619にも推奨したsession.upload_progress.enabled=0を維持してください。
実環境で動くエクスプロイトはありますか?
これらのバグは悪用されているものとして扱ってください。CISAは進行中の悪用を確認する形で、10月26日に両欠陥をKEVカタログへ追加し、Karimiのハニーポットは10月24日に完全なRCEを記録しました。実環境の被害者の侵害はまだ確認されていません。
VulnCheckの連鎖は本番設定のx86-64システムで機能します。StealMyBitcoinの攻略は、調整済みオフセットで意図的に脆弱にしたビルドを狙いました。それぞれが何を証明しているかを読み取り、被害者数として解釈せず、KEV期限までにパッチを適用してください。
PHPをCLIスクリプトにしか使わない場合もパッチが必要ですか?
実証された攻撃経路にはリクエスト本文の解析が必要なので、CLI専用インストールは対象外です。それでも更新してください。修正版には状態リセットの強化が含まれ、CLIホストには後からWebエンドポイントが追加されることも多いためです。
PHPの露出を棚卸しする
Ostorlab Attack Surface Discoveryを使って、所有するインターネット公開ドメインとホストを棚卸ししてください。サポート終了ブランチや組み込みPHPも含め、そのPHPバージョンとアプライアンスのアドバイザリを上記の影響範囲と照合し、各インスタンスのパッチを確認します。
参考資料
- PHPセキュリティアドバイザリ「Security advisory: Critical remote code execution vulnerabilities, update now」、2026年10月21日。両CVEの説明と不完全な回避策一覧を含む:https://www.php.net/archive/2026.php#2026-10-21-5 (2026年10月25日確認)
- GHSA-w8hw-w9fx-j79w「RCE via OOM corruption」。OOM戦略全体、SAPIの影響、パッチの説明:https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w (2026年10月25日確認)
- GHSA-6wmf-4rv5-p3rp「RCE via stale global state」。生成側と利用側のモデル、確認済み事例、緩和策:https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp (2026年10月25日確認)
- CVSS v4.0 9.2ベクトルと謝辞を含むCVE-2026-109618レコード(報告者はCalif.ioのRyan、Wiz、OpenAI、修復開発者はArnaud Le Blanc、Ilija Tovilo、Jakub Zelenka):https://cveawg.mitre.org/api/cve/CVE-2026-109618 (2026年10月25日確認)
- CVSS v4.0 9.2ベクトルを含むCVE-2026-109619レコード:https://cveawg.mitre.org/api/cve/CVE-2026-109619 (2026年10月25日確認)
- OOMのbailoutを置換し、起動時にアクセスされるグローバル状態をリセットする修正コミット3584a98bda「Avoid state corruption via bailout」:https://github.com/php/php-src/commit/3584a98bda (2026年10月25日確認)
- セッションアップロード進捗とCVE-2026-115560に関するPHP情報提供アドバイザリ、2026年10月23日:https://www.php.net/archive/2026.php#2026-10-23-1 (2026年10月25日確認)
- CISA KEVカタログ。CVE-2026-109618とCVE-2026-109619を2026年10月26日に追加し、期限は2026年10月29日。連邦機関への必要措置とBOD 26-04参照を含む:https://www.cisa.gov/known-exploited-vulnerabilities-catalog (カタログのJSONフィードで2026年10月27日確認)
- The Hacker News「CISA Confirms Active Exploitation of Two PHP2Shell Flaws Enabling Remote Code Execution」、2026年10月27日。KarimiのハニーポットRCEの引用、Censysの3,251万という数値、拡大したベンダーアドバイザリ一覧を掲載:https://thehackernews.com/2026/10/cisa-confirms-active-exploitation-of.html (2026年10月27日確認)
- Adel KarimiのPHP2Shellハニーポットエビデンス報告。10月24日のRCE確認データセットを含む:https://github.com/0x4D31/honeypot-data (The Hacker NewsとSecurityWeek経由で参照、2026年10月27日確認)
- 10月25日に19.28時間で攻略されたことと0.0251 BTC賞金を記録するStealMyBitcoinサイト、および段階一覧とビルド調整の注意点を含む攻略公開PoC:https://stealmybitcoin.com/ および https://github.com/KillaBoi/StealMyBitcoin-PoC (2026年10月27日確認)
- 産業ベンダーによるPHP2Shell製品確認についてのSecurityWeek記事、2026年10月26日。Schneider、ProLeiT、Siemens Ruggedcom、ABB、B&R、Rockwell、Johnson Controlsの状況を含む:https://www.securityweek.com/industrial-vendors-check-their-products-for-php2shell-vulnerabilities/ (The Hacker News経由で参照、2026年10月27日確認)
- CVE-2026-109618向けPHP 5.4~5.6パッチの非公開バックポートに関するoss-securityスレッド、2026年10月27日:https://www.openwall.com/lists/oss-security/2026/10/27/1 (2026年10月27日確認)
- CVE-2026-109618とCVE-2026-109619のPAN-OSへの影響に関するPalo Alto Networksアドバイザリ。10月27日の変更履歴で11系列のホットフィックスが公開済み、残りは10月27~30日予定:https://security.paloaltonetworks.com/CVE-2026-109618 (2026年10月27日確認)
- Unit 42による10月25日の政府機関侵害の原因特定撤回を、広報担当者の声明とともに掲載するThe Hacker News:https://thehackernews.com/2026/10/php2shell-exploitation-hits-government.html (2026年10月26日確認)
- 公開概念実証と失敗したPotassium Mirai亜種の試行についてのSophos記事:https://www.sophos.com/en-us/blog/proof-of-concept-exploit-released-for-php-vulnerabilities-109618-109619 (2026年10月23日のThe Hacker News経由:https://thehackernews.com/2026/10/php2shell-exploit-attempts-hit-millions.html, 2026年10月25日確認)
- ASLRを回避するエクスプロイト連鎖とセッションファイルへのWebシェル配置試行についてのVulnCheck記事:https://www.vulncheck.com/blog/php2shell-vulnerabilities (2026年10月25日確認)
- 攻撃者サーバーで見つかったワンクリックmod_phpツールについてのSOCRadar記事:https://socradar.io/blog/php2shell-exploit-tooling-attacker-server/ (2026年10月25日確認)
- 両CVEに関するPrevidianテレメトリー。最初のイベントは10月21日13:05 UTC、成功したRCEは観測せず:https://previdian.com/CVE-2026-109618#telemetry (2026年10月25日確認)
- 32のデジタルサービスの利用停止とNCSCの約50,000件の警告を確認する英国議会記録:https://hansard.parliament.uk/Lords/2026-10-22/debates/14CB4C6D-4E16-4377-8FCF-C2CF77BB5CC0/details (2026年10月25日確認)
- 2026年10月23日時点で3,440万超の脆弱なPHPサービスを示すCensysの集計:https://php2shell.censys.com/ (2026年10月25日確認)
- SecurityWeek「Mirai Botnet Operators Join PHP2Shell Attacks as ASLR Bypass Exploits Emerge」、2026年10月23日。Qualysの12,000顧客のパッチ適用分析を掲載(12時間以内に199,000インスタンスを修正、全体の71パーセントに当たる約1億1,000万がサポート終了PHP 5.4~8.1、さらに4,400万がサポート対象だが未修正のブランチ):https://www.securityweek.com/mirai-botnet-operators-join-php2shell-attacks-as-aslr-bypass-exploits-emerge/ (2026年10月26日確認)
- 2026年10月の重大リリースに関するQualys分析:https://blog.qualys.com/vulnerabilities-threat-research/2026/10/20/php-announces-critical-security-release-for-two-vulnerabilities (2026年10月23日のSecurityWeek経由)
- 10月17日以降のMadPotハニーポットへの悪用試行に関するAmazonの情報:https://thehackernews.com/2026/10/someone-tried-to-exploit-php2shell-4.html (2026年10月25日確認)
- PHP 5.4(2012年)まで遡る脆弱なコードに関するSysdig記事:https://www.sysdig.com/blog/php2shell-cve-2026-109618-and-cve-2026-109619-detecting-unauthenticated-remote-code-execution-in-php-core (2026年10月25日確認)