圧縮ライブラリBrotliの脆弱性CVE-2026-111497(CVSS v3.1で9.8 CRITICAL)が、2026年10月27日にCISA(米国のサイバーセキュリティ機関)の「KEV」に追加されました。KEVは、実際に悪用された脆弱性のカタログです。細工したBrotli圧縮データを展開させると、メモリの破壊、メモリ内容の漏えい、サービス停止、条件次第でコード実行につながる恐れがあります。Node.jsでWebサービスやAPIを動かしている方は、22.23.4/24.22.1/26.12.1のいずれかへ更新してください。
10月23日の週間まとめ記事でNode.jsの10件の一つとして触れた件ですが、その後に状況が変わりました。10月21日のNode.jsの告知には、悪用の記載がありませんでした。10月27日にCISAがKEVへ追加し、シンガポールのサイバーセキュリティ庁(CSA)は10月30日に「攻撃コードが公開され、悪用も報告されている」と注意喚起を出しています。
スコアの出どころ:9.8(CVSS v3.1、ネットワークから・低い複雑さ・権限不要・利用者の操作不要)は、NVDにNIST自身が付けた評価です。Googleは別にCVSS v4.0で9.2 CRITICALを付けています。なお、Node.jsの公式告知は同じ欠陥を深刻度「高(High)」と書いており、評価は機関によって違います。この記事はNVDのv3.1を採りました。
何が起きるのか(公表されている範囲)
- ▸場所:Brotliの展開(デコード)処理です。不正な圧縮データに対して、デコーダーが内部のバッファの終わりを越えて書き込んでしまいます(Node.jsの告知)
- ▸起こること:クラッシュ、プロセスのメモリ内容の漏えい、リモートコード実行(Node.jsの告知)。成立する条件は、アプリが攻撃者の送ったBrotliデータを展開することです(CSAの注意喚起)
- ▸悪用の状況:CISAは10月27日にKEVへ追加し、連邦機関の対応期限を11月10日としました。CISAは攻撃の件数・時期・攻撃者を書いていません。CSAは、攻撃コードが公開されていて悪用も報告されていると書いています
- ▸別名:「Node2Shell」「HTTP2Shell」とも呼ばれています(JVN)。この記事では手順は書きません
影響を受けるバージョンと、上げるべき版
- ▸Node.js:修正版は22.23.4/24.22.1/26.12.1(10月21日公開)。Node.jsは「サポートが終わった版は、セキュリティリリースの度に必ず影響を受ける」と書いています。告知が修正版を示しているのは、この3系統だけです
- ▸Brotli本体:1.0.3以上1.0.10未満、1.1.0以上1.1.1未満、1.2.0以上1.2.1未満が対象。修正版は1.0.10/1.1.1/1.2.1(Google、NVD、JVN)
- ▸Pythonのパッケージ:`brotli`は1.0.3以上1.2.1未満が対象で1.2.1で修正。`brotlicffi`は1.0.3以上1.2.1.0未満が対象で1.2.1.0で修正(GitHubのアドバイザリ)。JPCERT/CCは、Node.jsのほか、BunやPython向けのBrotliパッケージも例に挙げています
- ▸.NET:8.0は8.0.33、9.0は9.0.22、10.0は10.0.14で修正(Microsoftの告知、10月25日)。.NET Frameworkは対象外と書かれています
今日やること
- ✓★Node.jsの版を確認する。サーバーやCIで `node --version`、コンテナは `docker run --rm <イメージ名> node --version`。`node:24.22.0` のように修正版より古い版を固定したタグは、脆弱なままです
- ✓★22.23.4/24.22.1/26.12.1のいずれかへ更新し、プロセスを再起動する。コンテナはイメージを作り直して再デプロイします
- ✓サポート中の系統へ移る。告知に修正版が無い系統(20系・23系・25系など)は、更新では直りません
- ✓OSのパッケージやマネージドサービスでNode.jsを使っている場合は、提供元の案内を確認する。自分で更新できない環境は、提供元の対応に任されます
- ✓自分のコードで `node:zlib` のBrotli関数(`brotliDecompress`・`createBrotliDecompress`)を使う箇所を探す。Node.jsの告知は、アプリが `node:zlib` で展開するBrotliデータを攻撃者が渡せる場合を挙げています。フレームワークや外部通信のライブラリが内部で使っているかは、公式資料では確認できていません
- ✓PythonのBrotliパッケージ、.NET、Bunなど、Node.js以外も確認する。上の版を使う
- ✓更新の前後で、アプリの異常終了や不審な要求がないかログを見る。インターネットに公開しているサービスを優先します(当サイトの補足)
今すぐ更新できないとき
Node.jsの告知に、更新以外の回避策は書かれていません。GoogleのBrotliも、回避策は示していません(JPCERT/CC)。公式が示していない一時しのぎは、効果を保証できないため、この記事では手順として載せません。更新できないときは、次の2点を優先してください。
- ▸インターネットに公開しているサービスから先に更新する。KEVに追加された事実と、攻撃コードの公開をCSAが書いている点が、順番の根拠です
- ▸提供元(ホスティング会社、マネージドサービス、ディストリビューション)の案内を確認し、更新の予定を聞く。更新できるまでの期間のログを残し、更新後に調べられるようにします
確認できなかったこと
- ▸実際の攻撃の件数・時期・攻撃者。CISAは書いていません。日本国内の被害の有無は、この記事では示せません
- ▸自分のアプリが実際に狙われる条件か。攻撃は、アプリが攻撃者の送ったBrotliデータを展開する場合に成り立ちます(CSA)。要求の本文を展開する構成か、外部の応答を展開する構成かは、アプリごとに違い、公式資料からは判断できません
- ▸一時しのぎの効果。研究者や報道は、プロキシで `Content-Encoding: br` の要求を拒否する方法などを挙げていますが、ベンダーの資料では確認できていません。外から取り込む応答は防げない可能性もあります
- ▸20系・23系・25系の扱い。Node.jsの告知は修正版を示していません。NVDの対象範囲は、22.23.4より前、23.0.0〜24.22.1未満、25.0.0〜26.12.1未満です
- ▸ほかの製品への波及。Brotliを内蔵する製品は多く、JPCERT/CCは各開発元の情報の確認を求めています。この記事は網羅ではありません
共有するならこの3行
- ▸Node.js・BrotliのCVE-2026-111497(CVSS v3.1 9.8)が、10月27日にCISAの「悪用確認」カタログ(KEV)に追加された。細工した圧縮データを展開させるだけで、コード実行につながる恐れがある
- ▸★Node.jsは22.23.4/24.22.1/26.12.1へ更新して再起動。コンテナはイメージを作り直す。20系・23系・25系は修正版が無いので、サポート中の系統へ
- ▸すぐ上げられないなら、インターネットに公開しているものを最優先に。提供元の案内を確認し、更新までのログを残す
根拠にしたページ
- NVD:CVE-2026-111497↗
- CISA:Known Exploited Vulnerabilities Catalog(CVE-2026-111497)↗
- CISA:KEVカタログのデータ(GitHub、cisagov/kev-data)↗
- JVN:JVNVU#97400824 BrotliのC言語実装における境界外書き込みの脆弱性(CVE-2026-111497)↗
- JPCERT/CC:JPCERT-AT-2026-0034 注意喚起↗
- Node.js:October 2026 security releases(2026年10月21日)↗
- Google Brotli:v1.2.1 リリース↗
- GitHub Advisory:GHSA-9v8h-qqgm-4m35(Pythonのbrotli・brotlicffi)↗
- Microsoft:.NETのアドバイザリ(dotnet/announcements #494、2026年10月25日)↗
- シンガポールCSA:Active Exploitation of Critical Brotli Vulnerability(2026年10月30日)↗
- 当サイトの前の記事:今週のセキュリティ更新まとめ(10月19〜23日、Node.js 10件の一つとして掲載)→
