AIが暴いた20年前の遺産コード、PHP2Shell緊急対応の全貌
ユーザーランドのアプリケーションコードが実行される前にWebサーバーの権限が奪われる恐れがあり、PHPランタイム自体の更新と設定の見直しが急務だ。
2026年10月21日、PHP開発チームはコアインタープリターの深刻なメモリー管理の欠陥を修正する緊急セキュリティアップデートを公開した。セキュリティ業界で「PHP2Shell」と名付けられたこの脆弱性は2件(CVE-2026-109618、CVE-2026-109619)に分かれ、脆弱性の深刻度を示すCVSS v4.0スコアで9.2を記録した極めて危険なリモートコード実行(RCE)の欠陥だ。リモートコード実行とは、攻撃者がネットワーク経由で対象サーバー上で任意のシステムコマンドを実行できる状態を指す。
「ブラックオクトーバー(Black October)」とも呼ばれる今回の事態が業界に大きな衝撃を与えた理由は、欠陥の発見と実際の攻撃の両面でフロンティアAI(最も高性能なAIモデル)が実戦投入された点にある。Cloudflareやセキュリティ研究者の分析によると、公式パッチの配布前から高度なAIモデルによって生成されたエクスプロイトコードが世界中のWebサーバーを無差別にスキャンし、侵入を試みていた。これを受けて米サイバーセキュリティ・社会インフラ安全保障庁(CISA)は、本脆弱性を「悪用が確認された脆弱性(KEV)」カタログに即座に追加し、緊急対応を勧告した。背後に国家主導のサイバー攻撃組織(APT)が組織的に関与していたかどうかは現時点で確認されていない。
フロンティアAIはいかにして20年前のPHPコアからゼロデイを発掘したか
今回見つかった欠陥は、PHP 5.x時代から約20年にわたり維持されてきたコアC言語インタープリターのコード内に潜んでいた。これまで幾度となく静的解析ツールや人間の目による精密なコード監査を受けてきたにもかかわらず、通常の処理フローでは表面化しないエラー処理経路だったため、長年見逃されてきた。
コードベース全体をコンテキストとして保持できるフロンティアAIモデルの登場が潮目を変えた。C言語の大規模ソースコードから異常終了時の分岐やメモリー割り当て状況を追跡する自律分析エージェントが投入され、複雑なステートマシンの隙間を突いて、これまで埋もれていたゼロデイ(未修正の脆弱性)を特定した。これは防衛側のセキュリティ研究者だけでなく、攻撃者側も同様のフロンティアAIを使って攻撃ペイロードを短時間で機械的に量産できる現実を突きつけている。
PHP2Shell(CVE-2026-109618・109619)の仕組みと影響範囲
2件の脆弱性は共通して、エラー発生時にコールスタックを飛び越えるPHPインタープリターのlongjmp()関数の扱いに起因する。
CVE-2026-109618はメモリー不足(OOM)エラーの処理時に発生する。longjmp()によって処理が強制ジャンプする際、リクエスト関連のメモリーが未初期化のまま取り残される。攻撃者が細工したリクエストでOOM状態を意図的に引き起こすと、この未初期化領域を操作して任意コードを実行できる。
CVE-2026-109619はPHP標準でデフォルト有効になっているファイルアップロード進行状況の追跡機能(session.upload_progress.enabled)に起因する、Use-After-Free(解放後メモリーの不正利用、UAF)の欠陥だ。アップロード途中で致命的エラーが発生し強制ジャンプが起きると、すでに解放されたヒープ領域をグローバルポインターが参照し続けてしまう。続くリクエストがこのメモリーブロックに書き込みを行うことで、実行フローを奪われる。
最も致命的なのは攻撃が成立するタイミングだ。Apache mod_phpやPHP-FPM、FrankenPHPといった一般的な構成では、WebサーバーがHTTPリクエストのボディを解析し、PHPエンジンを初期化する段階で脆弱性がトリガーされる。つまり、LaravelやWordPressなどの上位アプリケーションに設定した入力値検証やWAFのミドルウェアが動作する前にシェルを奪われる。
本番環境で今すぐ確認・適用すべき対応策
Webサイトの約70%を支えるPHPエコシステムの規模を考えると、本番環境の迅速な点検が欠かせない。
第一の対策はランタイム自体の公式パッチの適用だ。公式チームがリリースした最新版(PHP 8.5.12、8.4.27、8.3.36、8.2.35)のうち、稼働環境の系統に合わせたバージョンへ直ちにアップグレードする必要がある。
即座のランタイム再デプロイが難しい環境では、設定変更による暫定緩和策を先行させる。php.ini(またはPHP-FPMのプール設定)でファイルアップロード進行状況の追跡を無効化(session.upload_progress.enabled = 0)してプロセスを再起動すれば、CVE-2026-109619の攻撃経路は遮断できる。ただし、これはOOMに起因するCVE-2026-109618には効果がないため、完全な防御にはエンジン本体の更新が不可欠だ。
公式サポートがすでに終了したPHP 7.xや5.xなどのレガシー環境を運用している場合は深刻だ。公式パッチが提供されないため、コンテナ環境での隔離やWAFによる厳格なシグネチャ遮断、あるいは外部ネットワークからの接続遮断を早急に検討しなければならない。
今後注目すべき点
フロンティアAIによって、脆弱性の発掘から実戦兵器化(エクスプロイト作成)までのタイムラグは劇的に縮まった。
防衛側も人間のパッチ作成や手動デプロイのサイクルだけに頼っていては、自動化された攻撃の猛攻を防ぎきれない。今後はオープンソースエコシステム全体でCI/CDパイプラインにAIベースの網羅的ソースコード監査を組み込み、新手のゼロデイに対しても仮想パッチを自律適用できる強固な防御体制の構築が必須になる。