Googleの圧縮ライブラリBrotliの展開(デコード)処理に、範囲外書き込みの脆弱性CVE-2026-111497が見つかりました。OpenAIの「Codex Security」が報告したもので、Node.jsは10月21日に修正版を出し、「Node2Shell」の通称で知られるようになりました。ただ、その後の調査で、影響はNode.jsにとどまらず、PythonのBrotliパッケージやプロキシのEnvoy、ランタイムのBunなど、Brotliを組み込んだ幅広いソフトウェアに及ぶことがはっきりしてきました。Webサービスや社内ツールを運用している人は、Node.jsを使っていなくても、自分の環境にBrotliの展開処理が入っていないか確認する必要があります。
何が起きたのか
Node.jsのセキュリティリリース告知によると、問題は壊れたBrotliデータを受け取ったときの扱いにあります。本来は「形式エラー」として止めるべきところを「入力がまだ足りない」と判定してしまい、展開処理が8バイトの内部バッファに書き込みを続けてしまいます。その結果、攻撃者が用意したデータをnode:zlibに渡すと、クラッシュ、メモリ内容の漏えい、遠隔からのコード実行(RCE)につながるおそれがあります。報告者はOpenAI Codex SecurityのKhai Tran氏とSylvie Mayer氏です。
Brotli本体も10月21日に1.2.1・1.1.1・1.0.10を公開し、リリースノートに同じCVEを記載しました。Aikido Securityの解説によると、影響を受けるのはBrotli 1.0.3〜1.2.0で、深刻度はCVSS v4.0で9.2(緊急)です。悪意のあるクライアントが未修正のサーバーを、悪意のあるサーバーが未修正のクライアントを攻撃できるという、双方向の問題でもあります。

なぜ影響が広がったのか
背景には、修正の出し方とBrotliの使われ方の2つがあります。
1つは、修正がセキュリティ修正として扱われないまま半年以上置かれていたことです。iTnewsによると、Googleのエンジニアは2026年2月に修正をコミットしていましたが、説明は「不正なストリームをより早く検出して報告する」というもので、セキュリティには触れていませんでした。正式なリリースが10月まで出なかったため、その間も下流のソフトウェアは脆弱な展開処理を同梱し続けました。セキュリティ企業Miggoの分析では、バグ自体は2018年2月に入り込み、Node.jsには2019年1月から含まれていたとされます。
もう1つは、Brotliが「気づかないうちに使われている」部品であることです。HTTPのContent-Encoding: brとして広く普及しており、Miggoによると、Node.jsではExpress 5やbody-parser 2、Koaがリクエスト本文を、組み込みのfetch()やaxios、got、Next.jsのサーバー側fetchがレスポンスを自動で展開します。Pythonでも、Brotliが入っていればurllib3(requests)、httpxのbrotli付きインストール、aiohttp、Scrapyが展開に使います。iTnewsは、.NETのランタイムやDuckDB、PythonのPillowやpyarrowもそれぞれBrotliの展開処理を持っていると伝えています。
OpenAIのCodex Securityは、10月21日に当サイトで取り上げたPHPの脆弱性「PHP2Shell」も見つけています(当サイトの記事)。AIによる脆弱性探索で、長年使われてきた基盤部品の欠陥が次々に表に出てくる流れが続いています。
どこまで危険なのか
Miggoによると、10月23日時点で実際の攻撃は報告されておらず、米CISAの悪用確認済みリスト(KEV)にも載っていません。一方で、Impervaが公式のNode.js 24.22.0イメージ(Linux、arm64)に対し、Expressとfetch()経由で、デバッガーや特別なビルドなしにコード実行に成功したとしています。ただし成功までに複数回の試行が必要だったとのことです。86バイトのデータで展開処理をCPU使用率100%のまま止める実証もあり、少なくともサービス停止(DoS)は比較的容易と考えられます。
特に注意が必要なのは、サーバーが外部のURLを取得する処理です。WAF(Webアプリケーションファイアウォール)はサーバーが自分で取りに行ったレスポンスを検査できないため、Webhookの検証やOGP画像の取得、AIエージェントによるWebページ取得のような処理は、WAFでは守れないと考えたほうがよいでしょう。
日本の読者にとって
国内でもNode.jsとPythonで動くWebサービスや社内ツールは多く、特にサポート終了済みのNode.js 20を使い続けている環境は修正版が出ないため、22系以降への移行が必要です。注意したいのは、OSのBrotliパッケージを更新してもNode.jsが同梱しているBrotliは直らない点です。10月22日より前にNode.js公式イメージを元に作ったコンテナは、作り直さない限り古いまま残ります。
デスクトップアプリも無関係ではありません。iTnewsはSlackやDiscord、Visual Studio CodeなどのElectronアプリが、それぞれ独自の更新の仕組みに頼っている点を指摘しています。脆弱であると確認されたわけではありませんが、Miggoは公開時点のElectron v45.0.0が脆弱なNode.js 24.22.0を同梱していると書いており、社内でElectronアプリを開発している場合は、修正版が出しだい取り込む準備をしておくのが安全です。ChromeとFirefoxはすでに修正済みです。

次にやること
- 本番と開発環境でnode -vを確認し、22.23.4・24.22.1・26.12.1未満なら更新する。20以前が残っていれば移行計画を前倒しする
- Pythonではpip show Brotli brotlicffiで1.2.1未満が入っていないか確認する(requestsなどが間接的に使っている場合がある)
- コンテナイメージとElectronアプリの依存関係をスキャナーで確認し、作り直しが必要なものを一覧にする




