Brotliデコーダのメモリ処理の欠陥により、攻撃者は認証なしでリモートからコードを実行できる。2026年10月23日、OpenAIはこの脆弱性を同社のCodex Securityチームがレッドチーム演習の中で発見したと公表した。これに先立つ10月21日、Node.jsプロジェクトはセキュリティアップデートを公開済みで、修正版は26.12.1、24.22.1、22.23.4。26.x、24.x、22.xの3つのリリースラインが対象となる。
脆弱性の正体:「ブロック切り替え」の誤判定
Node.jsのセキュリティ勧告は原因を具体的に記している。デコーダは不正な形式の圧縮データを処理する際、無効な「ブロック切り替え」を恒久的な形式エラーではなく「一時的に入力が足りない」と誤って判断した。その結果、ストリーミングデコーダは8バイトしかない内部バッファにバイトを追加し続け、バッファの境界を突き破って書き込んでしまう。
アプリケーションにBrotliデータを渡せる攻撃者は、プロセスメモリを破壊できる立場を手に入れる。軽ければクラッシュ、重ければメモリの漏洩、最悪の場合はリモートコード実行だ。攻撃経路は双方向で、圧縮データを受け付けるサーバは乗っ取られうるし、圧縮を有効にしたcurlのようなクライアントツールも、悪意あるサーバ相手に同じ危険にさらされる。
Node.jsからEnvoyまで:影響範囲は見た目より広い
Googleが開発したBrotliは、すでにインターネットインフラの「空気」のような存在だ。Node.js、Bun、Envoyはいずれもこのデコーダを内包している。アプリケーション自体は圧縮コードを一行も書いていなくても、依存ツリーの中に脆弱なデコーダが紛れ込んでいる可能性がある。こうした「見えない依存関係」こそ、サプライチェーン脆弱性が厄介な理由だ。
8か月間も野放しだった脆弱性
最も示唆的なのはこの脆弱性の「来歴」だ。OpenAIの公表によると、根本原因は2026年2月の時点でBrotliの上流ソースに修正が取り込まれていた。にもかかわらず、当時は誰もセキュリティ問題だと気づかず、CVE番号は付与されず、下流への更新も促されなかった。実利用可能な深刻な脆弱性が、8か月もの間オープンソースのサプライチェーンに「むき出し」で放置されていた——修正できなかったのではなく、修正すべきだと誰も気づかなかったのだ。OpenAIのエージェント型レッドチームが掘り起こして初めて、BrotliにCVE-2026-111497が割り当てられ、新バージョンがリリースされた。Node.jsはこのバッチの最高深刻度を「高」と評価し、主要な非EOLリリースラインはすべて影響を受けると注意を促している。
対応:まずアップデート、次に依存関係の棚卸し
Node.jsを使うチームは、各リリースラインの修正版(26.12.1/24.22.1/22.23.4)へ更新すること。BunやEnvoyの利用者は、下流のセキュリティアップデートが行き渡るのを待つ。依存ツリーの中にBrotliデコーダを抱えるコンポーネントがないか棚卸しするのもおすすめだ。パッチは中途半端では意味がない——ドアは半分閉めただけでは守れない。
この件は「AIによる脆弱性発掘」の新たな事例でもある。1か月も経たないうちに、AIはPHPのコアに10年以上潜んでいたリモート実行の入口を掘り当てた(関連記事)。OpenAI自身も、レッドチーム演習の後に最先端モデルの学習環境をインターネットから完全に切り離した。AIは「補助的なスキャナ」から、ゼロデイを実際に掘り起こせる主役へと変わりつつある。オープンソースの脆弱性を探すPatch the Planetのような取り組みは、これからますます忙しくなるだろう。