Node.jsプロジェクトの説明によると、デコーダーは圧縮ストリームの無効なブロックスイッチを、恒久的な書式エラーではなく一時的な入力不足として扱いました。その結果、ストリーミングの展開処理は入力バイトを8バイトの内部バッファへ追加し続け、境界外書き込みが起きます。node:zlibでBrotliデータを展開するアプリケーションに攻撃者が圧縮データを渡せれば、プロセスメモリを破壊でき、クラッシュ、メモリ内容の漏えい、最悪場合はリモートコード実行につながる可能性があります。22.x、24.x、26.xの全系統が影響を受け、Node.jsは危険度をHighに分類して、22.23.4、24.22.1、26.12.1を10月21日にリリースしました。
「無効なブロックスイッチが、恒久的な書式エラーではなく一時的な入力不足として報告され、ストリーミングデコーダーは入力バイトを8バイトの内部バッファへ追加し続けました。アプリケーションがnode:zlibで展開するBrotliデータを攻撃者が供給できる場合、プロセスメモリを破壊でき、クラッシュ、プロセスメモリの漏えい、リモートコード実行につながる可能性があります。」
An invalid block switch was reported as a temporary need for more input instead of a permanent format error, so the streaming decoder kept appending input bytes to an eight-byte internal buffer. An attacker who can supply Brotli data that an application decompresses with node:zlib can corrupt process memory, which can lead to a crash, disclosure of process memory, or remote code execution.
- 01 入力
細工した圧縮データ
攻撃者が用意したBrotli圧縮データを、それを展開するアプリケーションへ渡す。
- 02 処理
誤認するデコーダー
node:zlibなどが無効なブロックスイッチを「入力が足りない」と誤認する。
- 03 誤動作
8バイトの内部バッファ
ストリーミング展開が内部バッファへ入力を追加し続ける。
- 04 結果
境界外書き込み
クラッシュ、メモリ内容の漏えい、リモートコード実行の可能性。
出典はNode.js公式ブログ(2026年10月21日付)。悪用には攻撃者が用意した圧縮データが脆弱なデコーダーに渡ることが必要で、Brotliを使うすべての構成が直ちに侵害されるわけではありません。
Node.js
- 影響バージョン
- 22.x/24.x/26.x
- 修正版
- 22.23.4/24.22.1/26.12.1
- 分類
- High(Node.js)
Brotli本体
- 影響バージョン
- 1.0.3〜1.2.0
- 修正版
- 1.0.10/1.1.1/1.2.1
- 分類
- Critical・CVSS v4 9.2
Python brotli
- 影響バージョン
- 1.0.3以上1.2.1未満
- 修正版
- 1.2.1(brotlicffiは1.2.1.0)
- 分類
- 同上
EnvoyBrotli解凍を設定した環境
- 影響バージョン
- v1.39.2/v1.38.5/v1.37.7/v1.36.11
- 修正版
- v1.40.0/v1.39.3/v1.38.6/v1.37.8/v1.36.12
- 分類
- Critical・9.2(Envoyのアドバイザリ)
出典はNode.js公式ブログ、GitHub Advisory Database(GHSA-9v8h-qqgm-4m35)、Envoy公式アドバイザリ(GHSA-3wvj-j6qm-62mr)。評価体系が異なるため、Node.jsのHighとアドバイザリのCriticalを直接比べることはできません。
上流コード修正
Brotli本体に「無効なストリームを早めに検出して報告する」修正(コミット0ed4268)が入る。
ランタイムの修正版
Node.js 22.23.4/24.22.1/26.12.1と、Brotli本体v1.0.10/v1.1.1/v1.2.1が公開。
アドバイザリ公開
CVEレコード(CNA: Google LLC)とGitHub Advisory(Critical・CVSS v4 9.2)が公開。
Envoyの告知
影響4系列と修正5バージョンを公式アドバイザリで公表。報告者はOpenAI Security Research。
出典はBrotliのコミット0ed4268(2026年2月27日)、Node.js公式ブログ、Brotliのリリースノート、GitHub Advisory Database、Envoy公式アドバイザリ。
この修正の経緯には、時間差の問題が浮かび上がります。根本原因の修正はBrotli本体のソースコードに2026年2月27日付で入っていました。GitHub Advisoryが参照するコミット「Detect and report invalid stream earlier.」がそれで、無効なブロックスイッチを書式エラーとして扱う変更です。しかし当時はセキュリティ修正としての版が切り出されず、セキュリティ版がNode.jsやEnvoyに届いたのは10月21日から23日でした。上流で直ったコードが利用者の手に届くまでに8か月近い開きがあり、依存関係の更新が各組み込み先のリリースに依存する構造の弱さを示しています。
OpenAIの関与は、Node.jsの謝辞(OpenAI Codex Securityの2名)とEnvoyアドバイザリのクレジット(OpenAI Security Research)から確認できます。人間とAIの寄与の割合は公表されておらず、「AIが完全に自律的に発見した」と述べる根拠はありません。また、本件の公表時点で実際の悪用が確認されたという情報は一次資料にはありません。Brotliやそのバインディング、対応するランタイム・プロキシを使うシステムでは、自らのバージョンと展開処理の経路を確認し、公式の修正版へ更新することが当面の対応になります。
出典
- Node.js — Wednesday, October 21, 2026 Security Releases(Node.js)2026-10-21付。CVE-2026-111497(High)の発生原理、22.x/24.x/26.xへの影響、OpenAI Codex Security(Khai Tran氏、Sylvie Mayer氏)への謝辞、修正版v22.23.4/v24.22.1/v26.12.1へのリンクを本文で確認。2026-10-24確認。
- Release notes from brotli(google/brotli、GitHub)2026-10-21付。v1.0.10、v1.1.1、v1.2.1の3タグがいずれも「SECURITY CVE-2026-111497: out-of-bounds write permits remote code execution」を明記していることを確認。2026-10-24確認。
- Commit 0ed4268 Detect and report invalid stream earlier.(google/brotli、GitHub)2026-02-27作成。c/dec/decode.cで無効ブロックスイッチをBROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCHとして報告する根本原因修正を、コミットの日付と差分で確認。GitHub Advisoryの参照先。2026-10-24確認。
- GHSA-9v8h-qqgm-4m35(GitHub Advisory Database)2026-10-22公開(10-23更新)。Critical・CVSS v4 9.2、影響1.0.3〜1.2.0、修正版1.0.10/1.1.1/1.2.1、Python brotliとbrotlicffiの影響範囲・修正版、CVE-2026-111497への参照を本文で確認。2026-10-24確認。
- Out-of-Bounds Write in Brotli Decompressor(GHSA-3wvj-j6qm-62mr、Envoy)2026-10-23公開。影響v1.39.2/v1.38.5/v1.37.7/v1.36.11、修正版v1.40.0/v1.39.3/v1.38.6/v1.37.8/v1.36.12、対象はBrotli decompressorを構成したデプロイ、CreditsのOpenAI Security Researchを本文で確認。2026-10-24確認。
- CVE-2026-111497(CVE Program、CNA: Google LLC)2026-10-22公開(10-23更新)。Brotliデコーダーの境界外書き込みとしてCVEレコードを確認。2026-10-24確認。
出典の確認日 2026.10.24