対象:Node.js・Bun・Python・.NETでWebサービスやAPI、クローラー、バッチ処理を動かしている開発者と運用担当者。本記事はGoogleのBrotliプロジェクト、Node.js、Microsoft、PyPI、JPCERT/CC、米国の公的機関の公開情報にもとづく解説で、攻撃の手順や攻撃コードは扱いません。
続報待ち:この記事は公式発表に合わせて更新します
2026年10月27日8時(日本時間)時点まだ分かっていないこと
- 悪用の有無(一次情報に報告なし)
- NVDによる評価(分析待ち)
- ほかに影響を受ける製品の全体像
- Linuxの配布元の一部(古い版の評価が未了)
Googleは10月21日(米国時間)に修正版を公開し、Node.jsは同じ日に、Microsoftは10月25日(米国時間)に修正版を公表しました。JPCERT/CCは10月26日に注意喚起を出しています。米CISAのKEVには入っていません。対応する製品は増えているので、この記事は新しい発表があれば更新します。
今日やること
外から受け取ったBrotliのデータを展開しているか確かめる
Webサーバーが Content-Encoding: br の要求を展開する設定、外部のサイトから取ってきた応答を自動で展開するHTTPクライアント、利用者がアップロードした圧縮ファイルを展開する処理などが当たります。どれか1つでもあれば、急いで対応します(当サイトの判断)。
使っている言語の実行環境とパッケージのバージョンを確かめる
下の「自分が対象かの確かめ方」のコマンドで、Node.js、Bun、Pythonのパッケージ、.NETのランタイムとSDKのバージョンを確かめます。
修正版に上げる
下の「修正版の一覧」のバージョン以上に上げます。nodejs.orgの公式版のNode.js 20系以前はサポートが終わっていて修正版が出ないので、22系以降に移ります。UbuntuやDebianのパッケージで入れたNode.jsは、配布元のセキュリティ情報に従います。
作り直して入れ替え、再起動する
コンテナイメージ、bun build --compile で作った実行ファイル、.NETの自己完結型アプリやNativeAOTのアプリは、修正版で作り直して配り直します。動いているプロセスも再起動します。古いプロセスは古いライブラリを読み込んだままです。
侵害がなかったか調べる
JPCERT/CCは、修正版の適用とあわせて侵害の有無を調べるよう求めています。外部から受け取ったデータを展開するプロセスに、異常終了の増加や見慣れない子プロセス・通信がないかを確かめます(当サイトの判断)。
ロックファイルとベースイメージの固定を直す
package-lock.json、requirements.txt、poetry.lock、Dockerfileの FROM などで古い版を固定していると、次のビルドで元に戻ります。固定している版を修正版に書き換えます。
修正版の一覧
| 使っているもの | 対象 | 修正版 | 発表元 |
|---|---|---|---|
| Brotli(C言語のライブラリ) | 1.0.3〜1.0.9、1.1.0、1.2.0 | 1.0.10、1.1.1、1.2.1 | |
| Node.js 22系 | 22.23.4より前 | 22.23.4 | Node.js |
| Node.js 24系 | 24.22.1より前 | 24.22.1 | Node.js |
| Node.js 26系 | 26.12.1より前 | 26.12.1 | Node.js |
| Node.js 20系以前(nodejs.orgの公式版) | サポート終了 | なし(22系以降へ移る) | Node.js |
| Bun | 1.0.21以上1.4.4より前 | 1.4.4 | Bun |
| PyPI brotli | 1.0.3以上1.2.1より前 | 1.2.1 | GitHub勧告データベース |
| PyPI brotlicffi | 1.0.3以上1.2.1.0より前 | 1.2.1.0 | GitHub勧告データベース |
| .NET 8 | 8.0.33より前 | ランタイム8.0.33(SDK 8.0.133・8.0.427) | Microsoft |
| .NET 9 | 9.0.22より前 | ランタイム9.0.22(SDK 9.0.123・9.0.320) | Microsoft |
| .NET 10 | 10.0.14より前 | ランタイム10.0.14(SDK 10.0.114・10.0.403) | Microsoft |
| Envoy | 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 | Envoy |
| PHPのWindows用ビルド | 8.5.12・8.4.27・8.3.36・8.2.35の再ビルド前 | 8.5.12-1、8.4.27-1、8.3.36-1、8.2.35-1 | PHP |
.NET Frameworkは対象外です(Microsoft)。.NET 11のプレビューにも修正版(11.0.0-rc.3.26522.148)が出ています。Envoyによると、影響を受けるのはBrotliの展開(decompressor)を設定している環境です。
Linuxの配布元は、版番号を上げずに修正だけを取り込むことがあります。たとえばUbuntu 22.04のbrotliは、版番号が1.0.9のまま「1.0.9-2ubuntu0.1」で修正済みです。OSのパッケージは、版番号の大小ではなく配布元のセキュリティ情報で判断します。
PHPの開発チームによると、Windows用ビルドではcURL拡張でHTTPの応答の自動展開を有効にしたときに影響を受けます(cURLの初期設定では無効ですが、アプリやHTTPクライアントのライブラリが有効にすることがあります)。修正したビルドは末尾に「-1」が付き、PHP本体の版は変わりません。
OSのライブラリ(libbrotli)
OSの更新で直る。使っているプロセスは再起動
実行環境に組み込み(Node.js・Bun・.NET)
実行環境そのものを修正版に上げる
言語のパッケージ(brotli・brotlicffi)
仮想環境ごとにパッケージを上げる
作ったもの(コンテナ・実行ファイル)
修正版で作り直して入れ替える
自分が対象かの確かめ方
ここで挙げるのは、自分の環境のバージョンを確かめるコマンドだけです。
Node.js
node -v でバージョンを確かめます。22.23.4・24.22.1・26.12.1より前なら対象です。node -p process.versions.brotli でも組み込まれたBrotliの版が出ますが、修正の取り込み方によって数字が変わらないことがあるので、判断はNode.js自体のバージョンで行います(当サイトの判断)。Dockerで動かしている場合は、docker run --rm --entrypoint node <イメージ名> -v のように、イメージの中で確かめます。UbuntuやDebianのパッケージ(apt)で入れたNode.jsはOSのlibbrotliを使うので、下の「OSのライブラリ」の方法で確かめます。
Bun
bun --version で確かめます。1.4.4より前なら対象です。bun build --compile で作った実行ファイルは、作ったときのBunを含んでいるので、作り直すまで対象のままです(Bunの勧告)。
Python
pip show brotli brotlicffi(または python -m pip list の中の Brotli・brotlicffi)で確かめます。brotliが1.2.1より前、brotlicffiが1.2.1.0より前なら対象です。どちらも入っていなければ、この脆弱性でPythonのパッケージを直す必要はありません。仮想環境やコンテナごとに別々に入っているので、それぞれで確かめます。OSのパッケージ(python3-brotliなど)として入れたものは、版番号ではなく配布元のセキュリティ情報で判断します。
.NET
dotnet --list-runtimes と dotnet --list-sdks で確かめます。Microsoftによると、ASP.NET Coreの要求の自動展開やHttpClientの応答の自動展開でBrotliを有効にしている場合と、BrotliStreamやBrotliDecoderを直接使っている場合に影響を受けます。どちらも初期設定では有効ではありません。
OSのライブラリ
Debian・Ubuntuは dpkg -l 'libbrotli*'、RHEL系は rpm -qa 'brotli*' 'libbrotli*'、Alpineは apk list --installed 'brotli*' で入っている版を確かめ、配布元のセキュリティ情報と比べます。DebianはDebian 12向けに1.0.9-2+deb12u1(DLA-4855-1)、Debian 13向けに1.1.0-2+deb13u1(DSA-6582-1)で修正しました。
何が公表されたのか
- CVE
- CVE-2026-111497(GitHub勧告 GHSA-9v8h-qqgm-4m35)
- 種類
- 境界外書き込み(CWE-787)、戻り値の確認漏れ(CWE-252)。Brotliの展開処理(c/dec/decode.c)にある
- 深刻度
- CVSS v4.0で9.2(Googleの評価)。攻撃元区分はネットワーク、認証は不要、利用者の関与は不要、攻撃の前提条件あり(AT:P)。.NETについてはMicrosoftがCVSS v3.1で8.1と評価
- 影響
- 細工したBrotliの圧縮データを展開させると、隣接するメモリが壊れ、メモリの内容の漏えい、サービス停止、場合によっては任意のコード実行につながるおそれ(NVDに掲載されたGoogleの説明)。Microsoftは.NETについて、情報の漏えい、サービス停止、権限昇格につながるおそれがあるとしている(コード実行には触れていない)
- 対象
- Brotli 1.0.3〜1.0.9、1.1.0、1.2.0。Brotliを組み込んだ製品
- 修正版
- Brotli 1.0.10、1.1.1、1.2.1(2026年10月21日、米国時間)
- 回避策
- Googleは回避策を示していない(JPCERT/CC)。Microsoftは、更新するまで攻撃者が送れるBrotliのデータを展開しないよう求めている
Node.jsの発表によると、壊れた圧縮データの中の不正な切り替えを「入力がもっと必要」と扱っていたため、展開処理が内部の8バイトの領域の外まで書き込んでいました。Node.jsでは node:zlib で攻撃者が送れるBrotliのデータを展開するアプリが影響を受けます。Node.jsはこの脆弱性の深刻度を「高」としています。同じ修正版では、ほかに9件の脆弱性も直っています。
Bunの勧告によると、Bunでは fetch が初期設定でBrotliの応答を自動で展開します。接続先のサーバーや、暗号化されていない通信の途中にいる攻撃者がデータを送れる、としています。
OSの更新だけでは直らないことがある
Brotliは、Node.js、Bun、PythonのBrotliパッケージ、.NET、Envoyなど、多くのソフトに写しとして組み込まれています。JPCERT/CCは、Brotliの展開処理を使っている場合は各開発元の最新情報で影響の有無と対応状況を確かめるよう呼びかけています。Microsoftも、NativeAOTのアプリは共有ランタイムを更新しても直らず、作り直しが必要だとしています。
悪用と攻撃コードの状況
10月27日朝の時点で、Google、Node.js、Microsoft、JPCERT/CCの発表に、実際の悪用の報告はありません。米CISAのKEV(10月26日版)にも入っていません。米CISAが10月23日にNVDへ付けた評価(SSVC)では、悪用は「なし」、自動化は「できない」、技術的な影響は「全面的」です。MicrosoftのCVSSでは、攻撃コードの成熟度は「未実証」です。
攻撃コードの公開については、一次情報には書かれていません。独立系の解説サイトは、10月22日に攻撃コードが公開されたとし、通常のビルドでは異常終了と限られたメモリの読み出しにとどまる一方、保護を弱めたビルドではコード実行に至ると説明しています。同じサイトは、セキュリティ企業の調査チームが公式のNode.jsイメージでコード実行に成功した(手法は非公開)とも紹介しています。当サイトはいずれも確かめておらず、リンクも載せません。
Ubuntuはこの脆弱性の優先度を「中」としています。一方で、Googleの評価は9.2です。どちらを重く見るかは、外から受け取ったデータを展開しているかで変わります(当サイトの判断)。
Pythonの主なHTTPライブラリについて
requests、urllib3、httpx、aiohttpは、10月27日時点でこの脆弱性の勧告を出していません(各リポジトリのセキュリティ勧告の一覧を当サイトが確認)。urllib3・httpx・aiohttpは、brotliまたはbrotlicffiを任意の追加パッケージとして扱い、入っているときだけBrotliを展開します。直す対象は、同じ環境に入っているbrotliとbrotlicffiです。ライブラリ本体を上げても、brotliが古いままなら直りません。
まだ分かっていないこと
| 項目 | 状態 |
|---|---|
| 実際の悪用 | 一次情報に報告なし。KEVに未登録 |
| 攻撃コードの公開 | 一次情報に記載なし。独立系の解説サイトは公開されたとしている(未確認) |
| NVDの評価 | 分析待ち(Googleの評価9.2のみ) |
| 影響を受ける製品の全体 | 発表した製品は増えている途中。ブラウザなどほかの製品は、それぞれの発表を確かめる |
| Linuxの配布元 | Ubuntuの古い版(20.04以前)は評価が未了 |
出典
いずれも2026年10月27日に確認しました。
- JPCERT/CC「BrotliのC言語実装における境界外書き込みの脆弱性(CVE-2026-111497)に関する注意喚起」(JPCERT-AT-2026-0034、2026年10月26日) — jpcert.or.jp
- PHP「Updated PHP Windows builds for Brotli security fix」(2026年10月26日) — php.net
- Google Brotli のリリース v1.2.1・v1.1.1・v1.0.10(2026年10月21日) — v1.2.1 / v1.1.1 / v1.0.10
- Node.js「Node.js Security Releases」(2026年10月21日) — nodejs.org
- Microsoft「Microsoft Security Advisory CVE-2026-111497 | .NET Brotli Decoder Out-of-bounds Write Vulnerability」(2026年10月25日) — github.com/dotnet
- GitHub勧告データベース GHSA-9v8h-qqgm-4m35(PyPI brotli・brotlicffi) — github.com
- PyPI brotli 1.2.1 — pypi.org / brotlicffi 1.2.1.0 — pypi.org
- Bun「Bundled brotli decoder has an out-of-bounds write」(GHSA-663w-cv8g-jj2p、2026年10月23日) — github.com
- Envoy「Out-of-Bounds Write in Brotli Decompressor」(GHSA-3wvj-j6qm-62mr、2026年10月23日) — github.com
- NVD「CVE-2026-111497」 — nvd.nist.gov
- 米CISA「Known Exploited Vulnerabilities Catalog」(2026年10月26日版で未登録) — cisa.gov
- Ubuntu「CVE-2026-111497」 — ubuntu.com / Debian「DLA-4855-1 brotli」 — lists.debian.org
更新履歴
2026-10-27:初版。Google、Node.js、Microsoft、Bun、Envoy、PHP、PyPI、JPCERT/CC、NVD、米CISAのKEV、Ubuntu、Debianの公開情報にもとづく。
次に読む
- 優先順位の決め方:CVEの直す順番の決め方(CVSS・EPSS・KEV)
- 脆弱性が公表されたとき:脆弱性が公表されたときの対応手順
- 依存関係の点検:OSV-Scannerで依存関係を点検する
- 同じ時期の緊急の脆弱性:PHP脆弱性 CVE-2026-109618・CVE-2026-109619
- 同じ時期のPythonの依存関係の更新:eMudhra証明書の件で、pip・certifi・uvを更新する
- 用語:RCE(リモートコード実行)とは / CVSSとは