2026年「ブラック・オクトーバー」全記録、PHP2Shell・LiteLLMサプライチェーン攻撃とAIに撃ち抜かれたオープンソース基盤

2026年10月下旬、14年間潜伏していたPHP2Shell(CVE-2026-109618 / CVE-2026-109619)、Google Brotli境界外書き込み、TianoCore UEFIファームウェアの16年前の脆弱性、GitLab CVSS 10.0の遠隔コード実行、eMudhra中間CA秘密鍵「4」問題、そしてLiteLLM v1.107.0サプライチェーン攻撃が相次いで爆発し、英国の32の行政サービスやフィンランド政府サイトが緊急停止に追い込まれました。本稿では、GPT-5.6 SolやGemini 4 Argonが10年来のメモリ安全性バグを1週間で攻略した過程、PAN-OSファイアウォール25台が陥落した実戦攻撃チェーン、そして13名の開発者とボランティアに支えられるオープンソース基盤の構造的危機を徹底解剖します。

AAFeng

2026年10月21日、世界のインターネットは久しく経験していなかった物理レベルのパニックに見舞われました。英国政府は32の公共サービスを一斉に閉鎖し、フィンランド政府ICTセンター(Valtori)は一般向けの全行政Webサイトを一時遮断、Wikipediaのコード開発基盤やインターネット・アーカイブ(Internet Archive)、さらには日本の全日本空輸(ANA)や『ウマ娘 プリティーダービー』のサーバーまでもが相次いで緊急メンテナンス告知を掲出しました。世界中を巻き込んだこの「ケーブル引き抜き(緊急遮断)」の引き金となったのは、PHPインタプリタの中核に14年間潜伏していた2件の遠隔コード実行(RCE)脆弱性——PHP2Shell(CVE-2026-109618およびCVE-2026-109619)です。

しかし視野を単一の言語から広げてみれば、これが決して孤立した事故ではないことが分かります。10月17日から30日までのわずか2週間のうちに、Google Brotliデコーダの境界外書き込み(Node2Shell)、16年間潜伏していたTianoCore UEFIファームウェアのプリブート脆弱性、12年間潜伏していたGitLabのCVSS満点(10.0)の遠隔コード実行、インドの認証局(CA)eMudhraが中間証明書の秘密鍵をわずか1バイトの数値4で生成していた問題、そして人気AIゲートウェイLiteLLMに対するサプライチェーン攻撃が次々と炸裂したのです。

セキュリティ業界で「ブラック・オクトーバー(Black October)」と呼ばれたこの一連の危機は、攻防の論理における歴史的な分水嶺となりました。GPT-5.6 SolやGemini 4 ArgonといったフロンティアAIモデルが、10年来の複雑なステートマシンの欠陥を掘り起こすのに要する期間を「世界トップクラスのチームで数カ月」から「研究者1人で1週間」へと圧縮したとき、計算力によって撃ち抜かれたのは低レイヤCコードのメモリ境界だけではありません。わずか13名の資金提供を受ける開発者と無償ボランティアの献身に頼りながら、世界のWebサイトの70%を辛うじて支えてきたオープンソース基盤のガバナンス防衛線そのものだったのです。

10月の大規模システム停止と同時多発した6つの基盤危機

過去10年間、セキュリティ業界は2014年のHeartbleedや2021年のLog4Shellのように、超大型脆弱性には常にただ1つの「主役」が存在する状況に慣れていました。しかし2026年10月中旬から下旬にかけて起きた事態の異常さは、ハードウェアファームウェア、暗号証明書、圧縮アルゴリズム、サーバーサイドインタプリタ、そしてAIサプライチェーンに至るインターネットの6つのコアレイヤが、わずか十数日のうちに同時に突破された点にあります。

2026年ブラック・オクトーバーにおけるPHP2Shell、Node2Shell、LiteLLM、UEFI、GitLab、eMudhraの6大セキュリティ危機をまとめたインフォグラフィック
図1・2026年10月中旬から下旬にかけて集中爆発した6つの低レイヤセキュリティインシデント。従来のWebインタプリタ、汎用圧縮ライブラリ、サーバーUEFIファームウェア、PKIトラストチェーン、AIインフラストラクチャを網羅(データ出典・MITRE CVE、MSRCおよびWiz Research)

これら6つの危機の主要パラメータを1つの表にまとめると、当時のインシデント対応がいかに息の詰まるものだったかが鮮明に浮かび上がります。

インシデント呼称と対象コンポーネント 中核CVE / バージョン 深刻度スコア 潜伏期間 影響範囲と実証された破壊力
PHP2Shell(PHPインタプリタ) CVE-2026-109618、CVE-2026-109619 CVSS v4.0 9.2(v3.1最大9.8) 14年(PHP 5.4.0〜8.5.11) 世界の約70%のWebサイトと2,260万台超の公開インスタンスが対象。実環境でカーネル権限昇格と連鎖しファイアウォールおよび管理サーバー25台が陥落
Node2Shell / HTTP2Shell(Google Brotli) CVE-2026-111497 CVSS v4.0 9.2 Brotli 1.0.3〜1.2.0に影響 c/dec/decode.cのバッファ境界外書き込み(Out-of-Bounds Write)。Node.js、Bun、.NET、PowerShell 7、Python、PHP Windowsビルドに波及
LiteLLMサプライチェーン攻撃 PyPI / コンテナイメージ v1.107.0 マルウェア混入 101分間生存(10月21日) PyPIで約49,000回ダウンロード。二重永続化フックでクラウド認証情報やAPIキーを窃取し、4.5時間後に計算資源ハイジャックを実行
TianoCore EDK IIファームウェア CVE-2026-97631 CVSS v4.0 9.5 16年(2010年にコード統合) UefiPxeBcDxeドライバの504バイトICMPバッファオーバーフロー。OSおよびSecure Boot起動前にRing 0で任意コードを実行
GitLab正規表現コンパイラオーバーフロー CVE-2026-110264 CVSS v3.1 10.0満点 12年(GitLab 7.0〜19.5.0) 細工された正規表現のコンパイル時に整数オーバーフローを誘発し、認証なしで遠隔から任意コードを実行可能
eMudhra中間CAの脆弱な秘密鍵 CVE-2026-111943 PKIトラストチェーン崩壊 2025年4月生成 8枚のemSign G3中間CA証明書(TLS用6枚+コード署名用2枚)でエントロピー源に障害が発生。最大256回の試行で解読可能で、うち1つの秘密鍵の10進数値はわずか4

これら6つの主要危機に加え、同じ週の10月21日にはトレンドマイクロのZDIが未修正のLinuxカーネルKSMBD遠隔コード実行(RCE)脆弱性(ZDI-CAN-33549、ZDI-CAN-33774、CVSS 9.0)を誤って公開メーリングリストにCC送信してしまう事故が発生し、月末には暗号資産取引所バイナンス(Binance)からの63億ドル相当の暗号資産流出や、無印良品(MUJI)における2,726万件のユーザーデータ漏洩も重なりました。

同時多発したすべてのインシデントの中で、各国政府に文字通り「ブレーカーを落とさせた」最大の要因はやはりPHP2Shellでした。W3Techsの統計によれば、PHPは現在もサーバーサイド言語が判明している世界のWebサイトの約69.2%〜70%を駆動しています。Wiz Researchのクラウド環境テレメトリでは企業・組織の65%が本番環境でPHPを稼働させており、Palo Alto NetworksのCortex Xpanseはインターネット全体に直接公開されているPHPインスタンスを2,260万台以上検出しました。

さらに事態を悪化させたのは、公式が当初10月22日に協調的脆弱性開示(CVD)プロセスに従ってパッチをリリースする予定だったにもかかわらず、情報解禁(エンバーゴ)の防衛線が土壇場で連鎖的に崩壊したことです。

  • 公表4日前から実環境でゼロデイ悪用が先行・AWS脅威インテリジェンスチームはグローバルハニーポット網MadPotを通じて、公表前の10月17日にはすでに脅威アクターが商用匿名プロキシネットワーク経由でPHP2Shellを狙ったエクスプロイトペイロードを送信していたことを確認しました。
  • フォーラムでのリークとデモ動画の誤公開・Andreas Scherzer氏による分単位のタイムライン検証によると、10月20日15時00分(UTC)、Hacker Newsに匿名投稿(item?id=50167754)が現れ、「PHP2Shell」というコードネームと2つのCVE番号が暴露されました。PHP公式はリリース時刻を24時間前倒しせざるを得なくなりましたが、続く20時00分(UTC)頃、Califの研究チームが発表資料の準備中に、WordPress 7.1.3、MediaWiki 1.46.2、Magento 2.4.9、Laravel 13.36.0、Drupal 11.4.10など主要10フレームワークを一網打尽にするRCEデモ動画を誤って公開設定にしてしまいました。
  • コンテナイメージが6時間前にフライング公開・10月21日06時07分(UTC)、コンテナベンダーのChainguardがエンバーゴ協定に違反し、解禁予定時刻より6時間以上早くパッチ適用済みのPHPイメージを公開リポジトリへプッシュしました。これにより外部の攻撃者はバイナリ差分解析(Binary Diffing)を通じて脆弱な関数を直接リバースエンジニアリングできるようになってしまいました。

PHP公式が10月21日13時31分(UTC)に8.5.12、8.4.27、8.3.36、8.2.35の緊急パッチ(さらに異例の措置として、すでにサポート終了していたPHP 7.4、8.0、8.1向けのソースコードレベル最小バックポートパッチも提供)を公開した際、英国国家サイバーセキュリティセンター(NCSC)は英国内の組織に向けて50,000通の緊急アラートを発出し、「緩和策を直ちに適用できない場合や適用に時間がかかる場合は、システムをオフラインにすることを検討すべきである」と明確に勧告しました。日本の高市早苗首相もSNS上で企業に対し、必要に応じてサービスを一時停止するよう公に呼びかけました。その後の48時間以内に、英国の32の行政サービス、フィンランドの全公共行政サイト、オランダ議会下院(Tweede Kamer)およびDigiDログインシステム、ウィキメディア財団のPhabricatorおよびToolforgeプラットフォーム、さらには全日本空輸(ANA)、JR西日本、三菱UFJ銀行(MUFG)の一部Webページが予防的措置として相次いで稼働を停止しました。

14年前の古い欠陥をSKILL.mdへ構造化、大規模言語モデルはいかにしてPHPのメモリ境界を突破したか

なぜPHPインタプリタの最深部に潜んでいたこれら2つの脆弱性は、上位のアプリケーションロジックを完全にバイパスし、WordPressから独自フレームワークに至るほぼすべてのアプリケーションを無力化できたのでしょうか。

その答えは、PHPがメモリ枯渇(Out-of-Memory、OOM)を処理する際の緊急脱出メカニズムと、長寿命なWorkerプロセスにおけるリクエストをまたいだ状態管理の中に隠されています。

8MBメモリ増幅によるOOM longjmp誘発からリクエスト間UAFおよびPHPBleedメモリ漏洩に至るPHP2Shellの3段階技術フロー図
図2・PHP2Shellの中核的な悪用メカニズム。チャンク転送または8MB未満の深くネストされた空配列を用いて128MBのメモリ上限を枯渇させ、zend_bailoutの非局所ジャンプを誘発して内部状態を引き裂き、同一Workerの後続リクエストで攻撃を完遂する(技術出典・Calif Research & Wiz Research)

PHPエンジンの内部では、1回のリクエストで割り当てられたメモリがmemory_limit(デフォルトは128M)に達すると、エンジンはC言語の非局所ジャンプlongjmp()を直接ラップしたzend_bailout()を呼び出し、現在の実行スタックから即座に脱出してリクエストを中断します。この設計は、すべての低レイヤC関数がメモリ割り当てを行う前に「いつ中断されても安全な一貫した状態にある」ことを前提としています。しかし、Calif ResearchのRyan Austin氏とWiz Researchチームは2種類の致命的な破綻を暴き出しました。

  1. 前提条件の突破(8MB未満のペイロードで128MBメモリをパンクさせる)・当初、多くのエンジニアはPHPのデフォルト設定であるpost_max_size = 8Mが巨大なメモリ消費を防いでくれると考えていました。しかし実際には、攻撃者には2つのバイパス経路が存在します。1つ目は、Content-Lengthヘッダを省略したHTTP/1.1のTransfer-Encoding: chunkedリクエスト、あるいはcontent-length擬似ヘッダを持たないHTTP/2ストリームを送信し、PHPが128MBの壁に衝突するまでバッファリングを続けさせる方法です。2つ目は、multipart/form-dataファイルアップロード(main/rfc1867.c)の解析時に深くネストされた空配列の変数名(例としてfiles[a][b][c]...)を構築し、PHPに対して各フィールドごとに$_FILES内でname、type、tmp_name、error、sizeという5つのHashTableサブツリーを繰り返し初期化させる方法です。これにより、わずか8MB未満の生POSTデータからメモリ上で100MBを超える構造体割り当てへと膨張させることができます。
  2. CVE-2026-109618(OOM中断に起因する未初期化メモリ破壊)・Zend/zend_hash.cの_zend_hash_str_add_or_update_i関数では、コードはまずハッシュテーブルの使用済みカウンタht->nNumUsed++をインクリメントし、その後にzend_string_initを呼び出してキー名のためのメモリを割り当てます。もしまさにこのタイミングでメモリ枯渇(OOM)によるlongjmp()が発生すると、スロットのカウンタはすでに増えているにもかかわらず、対応するスロットのBucket.valは未初期化のゴミデータのまま取り残されます。直後のリクエストクリーンアップ段階でzend_hash_destroyがこのテーブルを走査して破棄する際、未初期化のワイルドポインタを正当なzvalとみなしてデストラクタ関数を呼び出してしまい、制御フローが直接ハイジャックされます。
  3. CVE-2026-109619(リクエストをまたぐ古いグローバル状態のUAFと「PHPBleed」)・Apacheのmod_phpやPHP-FPMのように複数のリクエストが同一のWorkerプロセスを再利用するアーキテクチャでは、PHPには単一リクエストのヒープメモリを一時的に指すグローバル変数が複数存在します。例えばリクエストにPHP_SESSION_UPLOAD_PROGRESSフィールドが含まれている場合(session.upload_progress.enabled=1がデフォルトで有効)、PHPはリクエストのごく初期段階(PG(modules_activated)がまだ0の時点)でグローバル変数PS(mod_data)をリクエストメモリに向けます。この時点でOOMが発生すると、エンジンはモジュールがまだ有効化されていないと判断してすべてのRSHUTDOWNクリーンアップ関数をスキップするため、リクエストメモリが解放された後もPS(mod_data)にはダングリングポインタ(宙ぶらりんポインタ)が残り続けます。同様に、ext/standard/var_unserializer.reにおいても、unserialize()内部でのOOMによってRSHUTDOWNがBG(unserialize).levelを-1へとデクリメントしてしまい、次のリクエストでused_slotsの整数オーバーフローとリクエストをまたいだ解放済みメモリ使用(Use-After-Free / UAF)を引き起こします。さらに、php_session_start()の実行中にOOMが発生してセッションIDポインタPS(id)がゼロクリアされなかった場合、次のリクエストのSet-Cookie: PHPSESSID=...レスポンスヘッダがかつてのHeartbleedさながらに、Workerメモリ内の環境変数、データベースパスワード、APIキー、さらにはASLRバイパスに用いられる共有ライブラリのベースアドレスまでも攻撃者へそのまま送り返してしまいます(通称「PHPBleed」)。IBMのグローバル敵対的シミュレーション責任者であるPatrick Fussell氏は、これを的確な比喩で表現しています。「ホテルの部屋をチェックアウトしたのにルームキーがまだ有効なままになっているようなものです。後でドアを開けて戻ってみると、部屋にはすでに次の宿泊客の荷物が並んでいるのです」

しかし、本当に背筋を凍らせるのは脆弱性そのものの巧妙さではなく、それらが発見されたプロセスです。

memory_limitによる中断を利用して状態の不整合を作り出すというアイデア自体は、早くも2004年にPHPセキュリティの専門家であるStefan Esser氏によって提唱されていました。また2020年にはセキュリティ研究者のjr@coredu.mp氏もBug #78876を報告し、multipart/form-dataが制限をバイパスしてOOMを引き起こせることを指摘していました。しかし十数年もの間、数百万行に及ぶC言語コードの中で、モジュールをまたぐマクロ展開、参照カウント、ヒープレイアウト、非局所ジャンプの組み合わせを人間の手で追跡し切ることは、人間の認知能力の限界すれすれの領域にあったのです。

2026年の夏、ゲームのルールが変わりました。6月22日、OpenAIはTrail of Bitsと共同でオープンソースセキュリティ監査イニシアチブ「Patch the Planet」を立ち上げ、7月30日にはセキュリティ企業Califがこのプログラムに参加してPHPソースコードの監査を開始しました。Califの研究員Ryan Austin氏(@lcfr_hax)はOpenAIのGPT-5.6 Solモデルを活用し、監査開始からわずか2日目(8月1日)に_zend_hash_str_add_or_update_iにおけるOOM中断プリミティブを突き止めました。さらに決定的な意味を持ったのは、彼が最初の脆弱性を見つけた直後、大規模言語モデルにその欠陥パターンを抽象化させ、AIエージェントが繰り返し呼び出し可能なSKILL.mdという構造化ハンティング定義ファイルにまとめ上げたことです。

Text
publish or destroy state (状態の公開または破棄)
  -> perform fallible work (OOMを誘発し得る失敗可能なメモリ割り当ての実行)
  -> nonlocal fatal (zend_bailout / longjmpによる非局所的な致命的ジャンプの誘発)
  -> commit/rollback skipped (通常のコミットまたはRSHUTDOWNによるロールバック清掃のスキップ)
  -> surviving consumer trusts false state (同一Workerの後続コンシューマが残留した不正な状態を信頼する)

このSKILL.mdを手にしたAIエージェントは、数百万行のCコードを設計図通りに走査し、session.upload_progressやvar_unserializerといった同種のプリミティブ群を瞬く間に洗い出しました。ほぼ同じ時期(8月19日〜24日)、Wiz ResearchチームはCalifの動きを全く知らないまま、独自開発のセキュリティエージェントWiz Atlas、GoogleのGemini 4 Argon、そしてGPT-5.6 Solを投入し、たった1人の研究員がわずか1週間でこれら一連の脆弱性を独自に発見した上、mod_phpとPHP-FPMの両方を網羅する4本のエクスプロイトチェーンを完成させました。

"The underlying flaws had been present for decades, but demonstrating their exploitability required an exceptionally complex chain of steps, at the edge of what human researchers could practically achieve. Frontier AI models substantially reduced that barrier, turning a longstanding flaw into an exploit. With frontier AI models and the right tools, a single researcher completed in a week what previously would have taken a world-class team months of work." (これらの根底にある欠陥は何十年も前から存在していたが、その悪用可能性を実証するには極めて複雑なステップの連鎖が必要であり、人間の研究者が現実的に達成できる限界の瀬戸際にあった。フロンティアAIモデルはその障壁を大幅に引き下げ、長年放置されてきた欠陥を実際のエクスプロイトへと変貌させた。フロンティアAIモデルと適切なツールを用いることで、以前なら世界トップクラスのチームでも数カ月を要したであろう作業を、単独の研究者がわずか1週間で完遂したのである。)

全く同じ筋書きが「ブラック・オクトーバー」全体を貫いています。Node.js、.NET、Bun、そしてマイクロソフト全製品の緊急定例外アップデートを引き起こしたGoogle Brotliの境界外書き込み脆弱性(CVE-2026-111497)は、修正コミット0ed4268a自体は2026年2月27日にリポジトリへマージされていたものの、誰もそれがセキュリティ脆弱性であることに気づいていませんでした。それをOpenAI Codex Securityの研究員であるKhai Tran氏とSylvie Mayer氏がモデルを使って掘り起こしたのです。また、TianoCore EDK IIファームウェアに丸16年間潜伏していたPXEプリブート脆弱性(CVE-2026-97631)も、Anthropicの研究員Alex Matrosov氏とGoogleの研究員Dan Holmes-Mitra氏がタッグを組んで発見したものでした(後にファームウェアベンダーのAMIが公開Pull Requestを早期に提出したことで、当初2027年1月に予定されていた情報解禁が破られました。詳細はArs Technicaの報道を参照してください)。

AIツールチェーンの逆襲、LiteLLMサプライチェーン攻撃「戦慄の101分間」

PHP2ShellやBrotliが示していたのが「旧世界のC言語基盤」に対するAIの計算力による圧倒的な精算だとすれば、同じ2026年10月21日の「ブラック・ウェンズデー(暗黒の水曜日)」に勃発したLiteLLMサプライチェーン攻撃は、「新世界のAIインフラストラクチャ」自身が抱える脆さと灯台下暗しを白日の下に晒しました。

LiteLLMは現在、企業や開発者がOpenAI、Anthropic、AWS Bedrockなど100種類以上の大規模言語モデルに接続する上で最も中核的な役割を果たしているオープンソースのPythonゲートウェイの1つです。10月21日11時39分(UTC)——世界中の運用チームがPHP公式パッチのリリースを今や遅しと焦りながら待っていたまさにその瞬間——攻撃者はPyPIの公式リポジトリへ改ざんされたlitellm==1.107.0をプッシュし、さらに11時46分から14時20分(UTC)にかけてDocker HubおよびGitHub Container Registry(GHCR)上のv1.107.0、latest、main-latest、main-stableコンテナイメージを同時に汚染しました。

Claude Codeのログ漏洩から二重永続化フックおよび計算資源ハイジャックに至るLiteLLM v1.107.0サプライチェーン攻撃の4段階フロー図
図3・LiteLLM v1.107.0サプライチェーン攻撃の全経路。Claude CodeのレスポンスボディログからのエンジニアOAuthトークン漏洩に始まり、PyPI悪性パッケージによる二重永続化フックの埋め込み、そして4.5時間後のAWS Bedrock計算資源ハイジャックに至るまで(データ出典・BerriAI公式インシデント事後分析 & Wiz Research)

BerriAI(LiteLLMの開発元企業)による公式事後検証レポートおよびWiz Researchのリバースエンジニアリング報告によれば、侵入の発端から収益化に至るまでの全プロセスにAI時代ならではの刻印が色濃く刻まれていました。

  • Claude Codeのレスポンスボディログに起因するトークン漏洩・BerriAIの社内環境では、詳細なレスポンスボディのロギングを有効にしたLiteLLMインスタンスがインターネットに公開されていました。調査チームが突き止めたところによると、Claude Codeは特定のシナリオにおいてユーザーのGitHub CLI OAuthトークンをレスポンスボディ(Response Body)に直接埋め込む挙動があり、その結果、BerriAIのコアエンジニア3名のGitHub CLI OAuthトークンがそのままLiteLLMのログに記録されてしまっていたのです。これら3つのトークンを入手した攻撃者は、v1.107.0の公式リリースパイプラインを直接トリガーして承認しました。
  • 101分間で4.9万回ダウンロードされた二重永続化フック・PyPIは13時20分(UTC、公開から101分後)に当該バージョンを緊急隔離しましたが、ClickPyの統計によると、このわずか1時間半余りの間に自動化されたCI/CDパイプラインや開発者によって悪性パッケージは約49,000回プルされました。Wizのリバースエンジニアリングにより、悪性ペイロードにはLLMの補助を受けて作成された顕著な特徴が見られ、さらに実環境で初めて**.pth+sitecustomize.pyによる二重永続化並列メカニズム**を採用していたことが判明しました。ホストマシン上で任意のPythonインタプリタが起動すると、cook.pthが自動的にcook.pyをインポートし、/tmp/.pc_once_72129118c59f5636c0bbに単一実行ロックを書き込んだ後、内部でprivcollectと名付けられた16個の収集モジュールを呼び出します。これによりブラウザのパスワード、AWS/GCP/Azureのクラウド認証情報、OpenAI/AnthropicのAPIキー、さらにはPostgreSQLデータベースのテーブル"LiteLLM_CredentialsTable"内の先頭500件の認証情報を根こそぎ収集し、AES-256-CBCとRSA-4096で暗号化した上で偽装ドメインwww.litellm.dev/healthcheckへと送信します。同時にsitecustomize.pyはLinuxおよびmacOSのバックグラウンドで1時間ごとにGitHub上のデッドドロップ(letters9813/pythonclient-test/main/domain.txt)をポーリングし、第2段階のリモートアクセス型トロイの木馬(RAT)スクリプトをいつでも取得できる態勢を整えていました。
  • わずか4.5時間で計算資源ハイジャック(LLMjacking)へ移行・認証情報が流出してわずか4.5時間後の同日16時20分から17時01分(UTC)には、攻撃者はすでにsts:GetCallerIdentityやbedrock:ListFoundationModelsを大量に呼び出し始め、被害企業のAWS Bedrockクォータを直接盗用して大規模言語モデルの計算資源ハイジャック(LLMjacking)を実行に移していました。

一方では防御側が大規模言語モデルを使って14年間潜伏していた従来のオープンソース基盤を掘り起こし、もう一方では攻撃者がAIコーディングツールとAIゲートウェイのログ設定ミスから鍵を盗み出し、大規模言語モデルで書いたマルウェアを使ってクラウド上のAI計算資源を刈り取る——この2つの光景が同じ日に繰り広げられたことこそ、2026年の「ブラック・オクトーバー」における最も皮肉な縮図でした。

汎用スクリプトの挫折と25台のサーバー陥落、AI攻撃チェーンの真の脅威レベル

PHP2Shellが公表された直後の数日間、セキュリティコミュニティは一時、極端な二極化の論争に陥りました。

一方では、CloudflareのCEOであるMatthew Prince氏が、脆弱性の公式発表10時間前にはすでに数千回の悪用試行が観測され、発表後45分以内に数万回へと急増、24時間以内に数百万回を突破したと明かしました。しかし他方では、Wiz Researchが10月27日に公開した実機検証レポートやBishop Foxのインシデント対応ガイドがいずれも指摘した通り、GitHub上で拡散していた2大オープンソースPoCファミリー——CVE-2026-109618を狙うarchive/legacy-8m/exploit.pyとCVE-2026-109619を狙うpure/mk_a1.py+mk_leak_b.py——は、デフォルト構成のDocker検証環境を一歩出ると、実際の本番環境に対してはほぼ全滅状態だったのです。

理由は単純です。legacy-8mはApacheのmod_phpに強く依存しており、chunkedエンコーディングを付加しない場合はデフォルトの8M制限によってそのままブロックされます。また、現在の主流であるPHP-FPMを標的としたpure/mk_a1.pyは、特定のビルドバージョンのヒープ風水オフセット(Heap Feng Shui offsets)をハードコードしているだけでなく、連続する2回のリクエストが必ず同一のPHP Workerプロセスに着弾するという厳しい条件を要求します。高並列環境や複数Workerで負荷分散を行っている本番サーバーでは、通常の業務トラフィックが容易にヒープレイアウトを乱すか、あるいはWorkerをクラッシュさせて再起動させてしまいます。GitHub上にはWoYinDao/CVE-2026-109618-CVSS-9.2-Criticalのような羊頭狗肉の偽PoC(中身は古いローカルファイルインクルード[LFI]パスをスキャンしているだけのスクリプト)まで出現し、スクリプトキディやボットネットがそれをそのまま使ってインターネット全体を無差別スキャンしたため、無意味なHTTP 500エラーのノイズが世界中に溢れ返りました。

しかし、これは決してPHP2Shellが単なる空騒ぎだったことを意味しません。スクリプトキディが汎用スクリプトを抱えて至る所で壁にぶつかっていた頃、真のエンジニアリング能力を備えた高度な脅威アクターは、「外科手術的な精密狙撃」とはどういうものかを行動で証明していました。

Dream Researchが復元した、PHP2ShellとFragnesiaを連鎖させて境界ファイアウォールを攻略し内部管理サーバーを経由してActive Directoryドメインコントローラへ侵入する攻撃経路図
図4・Dream ResearchとUnit 42が共同で復元したCL-UNK-1280の実戦侵入経路。単一のHTTPSリクエストでPHP2ShellとLinuxカーネル脆弱性Fragnesiaを連鎖させて境界ファイアウォールのroot権限を奪取し、8ポート逆方向SSHトンネル経由で内部の中央管理サーバーを陥落させ、Active Directoryドメインコントローラへ直結した(図出典・Dream Research、2026-10-29)

2026年10月29日、Dream ResearchとPalo Alto Networks Unit 42(およびCybersecurity Diveの報道)は、完全なフォレンジック検証を経た初の高度な実環境侵害作戦(追跡コードネームCL-UNK-1280)を共同公開しました。フォレンジック調査官は攻撃者のインフラストラクチャ内部から、インストール済みのClaude Codeに加え、10月8日の時点ですでに構築されDeepSeekおよびKimi大規模言語モデルと連携していた自動攻撃プラットフォームaiscanを発見しました。

この攻撃グループは、不確定要素の多い一般の公開Webサイトには目もくれず、環境が高度に標準化されており、かつ管理プレーン(appweb)に高いメモリ上限を持つPHP 8.0.30および7.4.33が組み込まれていたPalo Alto Networks PAN-OS境界ファイアウォールに照準を完全に固定していました。

  1. ファネル型の精密マッピングとファームウェアのリバースエンジニアリング・攻撃者はまずFOFAを用いて管理インターフェースが露出している世界中の約19,000台のファイアウォール(全世界の導入ベースの約0.02%)を抽出し、200スレッドの生存確認プローブでオンライン状態の5,000台に絞り込んだ後、米国・日本・台湾・韓国の4地域およびPHP 8.0.30バージョンという条件でフィルタリングを行い、240個の高価値ターゲットを特定しました。攻撃を開始する前、攻撃者はあらかじめPAN-OSファームウェアを復号し、マイナーバージョンごとにリバースエンジニアリングを行ってバイト単位で正確な11種類のlibphp.soメモリオフセットプロファイル(Profiles)を抽出していました。
  2. 4段階のPHP2Shell+カーネル権限昇格Fragnesiaによる一撃root奪取・ファイアウォールのSELinux httpd_tサンドボックス制限をバイパスするため、攻撃者は4段階のコンビネーション攻撃を設計しました。まずA1で383MBのペイロードを送信してメモリを枯渇させダングリング状態を作り出し、B1でSet-Cookieレスポンスヘッダからlibphp.soのベースアドレスを漏洩させてASLRを突破、A2で500MBのペイロードを送信して古い参照を確立し、最後のB2リクエストでHashTableデストラクタ関数を偽造してzif_systemを呼び出します。さらに驚くべきことに、同一のHTTPリクエスト内でLinuxカーネルのXFRM ESP-in-TCPローカル権限昇格脆弱性Fragnesia(CVE-2026-46300)を直接連鎖させ、ページキャッシュ上書きによって774バイトの/etc/pam.d/suをpam_permit.soへと書き換えました。リクエストの送信開始からパスワード不要のroot権限奪取、および103バイトのWebshell(/unauth/php/change_password.php)の埋め込みまで、全工程に要した時間はわずか15分でした。
  3. リバーストンネルを貫通して米国政府関連の内部ネットワークを攻略・10月23日18時14分から21時55分(UTC)にかけて、攻撃者は一気に24台の境界ファイアウォールのroot権限を掌握しました。翌10月24日10時09分(UTC)、攻撃者はそのうち米国政府関連機関(CACスマートカード認証を有効化していた組織)に属する2台のファイアウォールに対して特別作戦を開始し、/usr/local/lib/.panops/配下に起動時自動実行される8ポートの逆方向SSHトンネル(リバーストンネル)を確立しました。11時35分(UTC)、攻撃者はこのトンネルを通過し、本来なら内部ネットワークに厳重に隔離されていたはずの25台目のサーバー(中央ファイアウォール管理サーバー)に対して同じPHP2Shellエクスプロイトチェーンを再び撃ち込んでrootを奪取しました。そしてマスターキーを用いて管理サーバーの設定ファイルからLDAPサービスアカウントの平文パスワードを復号し、ドメインポリシーがlockoutThreshold=0(アカウントロックアウトなし)になっていた条件下で、Active Directoryドメイン全体に対する全件列挙、パスワードスプレー攻撃、バックドア用マシンアカウントの作成、およびKeycloak SAML署名鍵の抽出を敢行しました。

まさにこの鮮やかすぎる実戦スナイピングに加え、セキュリティ研究者Adel Karimi氏のハニーポット突破や、英国のペネトレーションテスターJaydip Modhwadia氏(killa)による2,000ドル相当のビットコイン賞金付き実機ターゲット攻略が相次いだことで、米国CISAは10月26日から28日にかけて3日連続でCVE-2026-109618、CVE-2026-109619、BrotliのCVE-2026-111497、およびカーネル権限昇格脆弱性Fragnesia(CVE-2026-46300)をすべて「悪用が確認された脆弱性カタログ(KEV)」へ追加しました。続いてJPCERT/CCと情報処理推進機構(IPA)も最高レベルの追加注意喚起を発出しました。

Wiz Researchが集計した2026年10月22日から25日におけるPHP2Shellの重大な影響を受ける企業・組織の割合の推移グラフ
図5・脆弱性公表後にPHP2Shellの重大な影響を受けている企業・組織の割合の推移。初日に100%から63.0%へと急減したものの、4日目(10月25日)時点でも52.1%に留まり、半数以上の組織に未修正のロングテール資産が残存している(図出典・Wiz Research、2026-10-27)

さらに深刻なのは、防御側が直面しているロングテール(長尾)のジレンマです。Wiz Researchの継続的なテレメトリによると、10月22日から25日にかけてインターネット上に露出している脆弱なPHPホストの総数は67%減少したものの、未修正の公開ホストを少なくとも1台抱える企業・組織の割合は初日に63.0%まで下がった後に減少ペースが急減速し、10月25日時点でも依然として52.1%の組織がゼロにできていません(累積減少率は47.9%)。外部に対してPHPのバナーを直接返さない境界ゲートウェイ、ハードウェアファイアウォールの管理ポート、古いNAS、そしてサポート終了(EOL)ブランチに取り残された社内システムが、今なお自動攻撃プラットフォームの照準の下に晒され続けています。

13人の財団と48時間不眠不休のボランティア、オープンソース基盤は持ちこたえられるのか

技術的な詳細と攻防の実態を振り返った今、最後にエンジニアリング界の胸を最も鋭く刺すあの問いへと立ち返らなければなりません。なぜ2004年に理論的な先例があり、2020年にバグ報告まで上がっていた潜在的欠陥が、2026年にAIによって掘り起こされるまで放置され続けたのでしょうか。

あまり知られていない事実ですが、CVE-2026-109618の中核を成すメモリ枯渇(OOM)エラー処理の欠陥は、実は早くも2024年6月——ドイツのソブリン・テック・エージェンシー(Sovereign Tech Agency)が出資し、OSTIFとQuarkslabが実施したPHPセキュリティ監査の最中——に、PHPのコア開発者自身によって明確に指摘されていたのです。

2026年10月21日、PHP財団(The PHP Foundation)のエグゼクティブディレクターであるRoman Pronskiy氏は、公式の事後振り返りブログの中で極めて率直な自己分析を綴り、2年間にわたる棚上げが「構造的な機能不全(structural failure)」であったことを公に認めました。

"In 2024, during the security audit facilitated by OSTIF and Quarkslab and funded by the Sovereign Tech Agency, a PHP core developer identified the out-of-memory error handling issue that forms part of CVE-2026-109618. At the time, no concrete exploit path was known, and the proposed fixes carried trade-offs that delayed consensus. Looking back, failing to resolve this earlier was a structural failure." (2024年、Sovereign Tech Agencyの資金提供を受けOSTIFとQuarkslabが推進したセキュリティ監査の期間中に、あるPHPコア開発者がCVE-2026-109618の一部を構成するメモリ枯渇エラー処理の問題を特定していた。当時は具体的な悪用経路が知られておらず、提案された修正案にはトレードオフが伴っていたため合意形成が遅れた。振り返ってみれば、この問題をより早い段階で解決できなかったことは構造的な機能不全であった。)

なぜ見つかっていたのに修正できなかったのでしょうか。『The Next Web』とBBC Newsの深層調査報道は、華やかに見えるオープンソース基盤の裏にある厳しい台所事情を浮き彫りにしました。

AIエージェントによる大規模脆弱性発掘攻撃と世界のオープンソース基盤を支えるボランティア保守の限界を対比した非対称ゲームのインフォグラフィック
図6・計算力の奔流における非対称な戦い。一方は疲労を知らずに数百万行のCコードをスキャンし続けるフロンティアAIエージェント、もう一方はわずか13名の資金提供を受ける開発者と48時間不眠不休の単独ボランティアで世界のWebサイトの70%を支えるオープンソース保守基盤
  • 13人でインターネットの70%を背負う現実・世界のWebサイトの約7割を駆動するPHP財団において、資金提供を受けているフルタイムおよびパートタイムのコア開発者は合計でわずか13人しかいません。チームには専任のセキュリティプロジェクトマネージャーもおらず、議論が膠着した際に強制的に意思決定を行うエスカレーション裁定メカニズムも存在しませんでした。2024年に開発者がOOMの潜在的リスクを指摘した際、当時は誰も完全なエンドツーエンドのRCE PoCを手書きで実証できなかった上、根本的な修正を行うには後方互換性を損ないサードパーティ製拡張モジュールをクラッシュさせかねない侵襲的な変更を低レイヤに導入する必要がありました。そのため、「コンセンサス駆動」のメーリングリスト上で複数の対立する修正案が延々と議論され続け、最終的に丸2年間も棚上げされてしまったのです。
  • あるチェコ人ボランティアによる48時間限界の孤独な戦い・上流(アップストリーム)がソースコードのパッチを公開したとしても、何百万、何千万台もの本番サーバーがそれをそのまま適用できるわけではありません。世界のDebianおよびUbuntuエコシステムにおいて最も中核的なPHPパッケージリポジトリ(deb.sury.org)は、長年にわたりチェコのボランティア開発者であるOndřej Surý氏ただ1人が余暇の時間を削って保守し続けてきました。PHP2Shellが爆発したあの2日間、このボランティアメンテナはほぼ丸48時間一睡もせず、最新バージョンから古いブランチに至るすべてのバックポートとパッケージングをたった1人で完遂しました。そのおかげで初めて、世界中の数百万台のLinuxサーバーが1行のapt upgradeを叩いて危機を脱することができたのです。
  • 「バグを見つけることは最も安上がりな工程になった」・まさにPHP2Shellが爆発した同じ週、OpenAIのCEOであるSam Altman氏は公の場で「私たちがすべての脆弱性にパッチを当てられるとはもはや思わない」と率直に語りました。Anthropicの副CISOであるJason Clinton氏は、業界が「重要インフラにパッチを当てる十分な時間がない脆弱性の津波」に直面していると警告し、元米国CISA長官のChris Krebs氏はCNBCのインタビューの中で、「人類の歴史上発見されたすべての深刻(Critical)な脆弱性のうち、約3%はこの1カ月間だけで発見されたものだ」と推計しました。

Trail of Bitsのエンジニアリングチームが「Patch the Planet」プログラムを振り返って記した次の一節は、時代の転換点を的確に言い当てています。

"If it wasn’t already clear from the last several months of security news, this week makes one thing clear: the expensive part of security work has moved... The advantage is no longer in finding bugs, but everything after: confirming a finding, getting its severity right, writing a patch a maintainer will accept, hardening the surrounding code, making long-term improvements to prevent similar issues in the future, and coordinating a disclosure." (過去数カ月間のセキュリティニュースからまだ明らかでなかったとしても、今週の出来事は1つの事実を疑問の余地なく明確にした。セキュリティ業務においてコストのかかる部分が移動したのである……優位性はもはやバグを発見すること自体にはなく、発見した後のすべての工程にある。すなわち、発見内容の裏付けを取り、深刻度を正確に評価し、メンテナが受け入れ可能なパッチを書き、周辺コードを堅牢化し、将来同様の問題を防ぐための長期的な改善を行い、そして開示プロセスを調整することだ。)

過去20年間、オープンソースセキュリティにおける暗黙の前提は、「深層のアーキテクチャ上の脆弱性を安定したエクスプロイトチェーンへと繋ぎ合わせることは極めて難しく、誰かがPoCを書き上げるまではメンテナには互換性をじっくり議論する数年間の猶予がある」というものでした。大規模言語モデルはその緩衝地帯を完全に消し去りました。AIが20年前に埋め込まれたステートマシンの亀裂を数日のうちに「15分でrootを奪う自動兵器」へと変貌させられる時代に、オープンソースコミュニティが依然として十数人のパートタイム開発者の善意と献身に頼り、毎秒生み出される計算力の奔流を受け止めさせようとする——この構造的なミスマッチが持続可能であるはずがありません。

巨大テック企業やフロンティアAI研究所にとって、大規模言語モデルを回してCVEランキングのスコアを稼ぎ、何百何千もの脆弱性レポートを疲弊し切ったボランティアメンテナに投げつけるだけでは、真のセキュリティ貢献とは言えません。重要なオープンソース基盤に専任のセキュリティエンジニアリングチームを配置するための資金を提供し、完全なリグレッション検証を経て後方互換性にも配慮した高品質なパッチの作成までAIで支援することこそが、技術的負債を返済する唯一の道です。

そして、最前線でプロダクトを保守する私たち一人ひとりの開発者と運用チームにとっても、「ブラック・オクトーバー」が残したエンジニアリング上の教訓は極めて具体的です。

  1. ランタイム境界の即時監査と縮小・PHPを8.5.12、8.4.27、8.3.36、8.2.35または各ディストリビューションの対応セキュリティパッチ版へ直ちにアップグレードしてください。レガシーシステムの制約により即時アップグレードが困難な場合は、最優先でphp.iniにてsession.upload_progress.enabled = 0を明示的に設定し、実行時にini_setを介してsession.serialize_handlerを動的に切り替える処理を排除(関連脆弱性CVE-2026-115560の防止)した上で、リバースプロキシ(Nginx / Cloudflare)層でチャンク転送およびリクエストボディサイズを厳格に制限し、PHP-FPMのpm.max_requestsサイクルを短縮してWorkerプロセスの回収・再起動を早めてください。
  2. 言語をまたぐ低レイヤ依存関係と組込み機器の総点検・Node.js(22.23.4 / 24.22.1 / 26.12.1)、Bun(1.4.4)、.NET(8.0.33 / 9.0.22 / 10.0.14)およびPython環境内のbrotliデコードライブラリを同時にアップグレード(CVE-2026-111497の修正)してください。特にファイアウォール、VPNゲートウェイ、NASなど、内部に旧バージョンのPHP管理インターフェースを組み込んでいるハードウェアアプライアンスを重点的に洗い出し、管理プレーンをインターネットへ直接公開することを厳禁としてください。
  3. AIツールチェーンの点検と認証情報ハイジーンの徹底・2026年10月21日にlitellm==1.107.0(PyPIまたはコンテナイメージ)をプルした環境では、単にパッケージをダウングレードするだけでは全く不十分です。ホストマシンのPython site-packages配下にあるcook.pth、cook.py、sitecustomize.pyおよび/tmp/.pc_once_*の痕跡を必ず調査・駆除し、そのマシンが接触したすべてのクラウドプロバイダ認証情報、大規模言語モデルAPIキー、データベース認証情報を全件ローテーションしてください。同時に、プロキシゲートウェイにおいてマスキング処理されていない完全なレスポンスボディのロギングを有効にすることを厳に戒めてください。