対策・学習22分で読める

Brotli脆弱性 CVE-2026-111497(Node2Shell)|Node.js・Python・.NETの確かめ方と更新

圧縮形式Brotliの展開処理に、細工したデータでメモリを壊される境界外書き込みCVE-2026-111497が見つかりました。Brotli 1.0.3〜1.0.9、1.1.0、1.2.0が対象で、Node.js・Bun・PythonのBrotliパッケージ・.NETなどに組み込まれています。対象の確かめ方、修正版の一覧、OSの更新だけでは直らない場合を整理します。

本文を読む
公開日
更新日
最終確認
目次

対象: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には入っていません。対応する製品は増えているので、この記事は新しい発表があれば更新します。

今日やること

1

外から受け取ったBrotliのデータを展開しているか確かめる

Webサーバーが Content-Encoding: br の要求を展開する設定、外部のサイトから取ってきた応答を自動で展開するHTTPクライアント、利用者がアップロードした圧縮ファイルを展開する処理などが当たります。どれか1つでもあれば、急いで対応します(当サイトの判断)。

2

使っている言語の実行環境とパッケージのバージョンを確かめる

下の「自分が対象かの確かめ方」のコマンドで、Node.js、Bun、Pythonのパッケージ、.NETのランタイムとSDKのバージョンを確かめます。

3

修正版に上げる

下の「修正版の一覧」のバージョン以上に上げます。nodejs.orgの公式版のNode.js 20系以前はサポートが終わっていて修正版が出ないので、22系以降に移ります。UbuntuやDebianのパッケージで入れたNode.jsは、配布元のセキュリティ情報に従います。

4

作り直して入れ替え、再起動する

コンテナイメージ、bun build --compile で作った実行ファイル、.NETの自己完結型アプリやNativeAOTのアプリは、修正版で作り直して配り直します。動いているプロセスも再起動します。古いプロセスは古いライブラリを読み込んだままです。

5

侵害がなかったか調べる

JPCERT/CCは、修正版の適用とあわせて侵害の有無を調べるよう求めています。外部から受け取ったデータを展開するプロセスに、異常終了の増加や見慣れない子プロセス・通信がないかを確かめます(当サイトの判断)。

6

ロックファイルとベースイメージの固定を直す

package-lock.json、requirements.txt、poetry.lock、Dockerfileの FROM などで古い版を固定していると、次のビルドで元に戻ります。固定している版を修正版に書き換えます。

修正版の一覧

9.2
CVSS v4.0(Googleの評価)
1.0.3〜1.0.9、1.1.0、1.2.0
対象のBrotliのバージョン
未登録
米CISAのKEV(10月27日朝)
報告なし
悪用(一次情報)
使っているもの対象修正版発表元
Brotli(C言語のライブラリ)1.0.3〜1.0.9、1.1.0、1.2.01.0.10、1.1.1、1.2.1Google
Node.js 22系22.23.4より前22.23.4Node.js
Node.js 24系24.22.1より前24.22.1Node.js
Node.js 26系26.12.1より前26.12.1Node.js
Node.js 20系以前(nodejs.orgの公式版)サポート終了なし(22系以降へ移る)Node.js
Bun1.0.21以上1.4.4より前1.4.4Bun
PyPI brotli1.0.3以上1.2.1より前1.2.1GitHub勧告データベース
PyPI brotlicffi1.0.3以上1.2.1.0より前1.2.1.0GitHub勧告データベース
.NET 88.0.33より前ランタイム8.0.33(SDK 8.0.133・8.0.427)Microsoft
.NET 99.0.22より前ランタイム9.0.22(SDK 9.0.123・9.0.320)Microsoft
.NET 1010.0.14より前ランタイム10.0.14(SDK 10.0.114・10.0.403)Microsoft
Envoyv1.39.2、v1.38.5、v1.37.7、v1.36.11v1.40.0、v1.39.3、v1.38.6、v1.37.8、v1.36.12Envoy
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-1PHP

.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)

仮想環境ごとにパッケージを上げる

作ったもの(コンテナ・実行ファイル)

修正版で作り直して入れ替える

Brotliの写しは、置き場所ごとに直し方が違う。OSの更新で直るのはOSのライブラリだけ。

自分が対象かの確かめ方

ここで挙げるのは、自分の環境のバージョンを確かめるコマンドだけです。

1

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のライブラリ」の方法で確かめます。

2

Bun

bun --version で確かめます。1.4.4より前なら対象です。bun build --compile で作った実行ファイルは、作ったときのBunを含んでいるので、作り直すまで対象のままです(Bunの勧告)。

3

Python

pip show brotli brotlicffi(または python -m pip list の中の Brotli・brotlicffi)で確かめます。brotliが1.2.1より前、brotlicffiが1.2.1.0より前なら対象です。どちらも入っていなければ、この脆弱性でPythonのパッケージを直す必要はありません。仮想環境やコンテナごとに別々に入っているので、それぞれで確かめます。OSのパッケージ(python3-brotliなど)として入れたものは、版番号ではなく配布元のセキュリティ情報で判断します。

4

.NET

dotnet --list-runtimes と dotnet --list-sdks で確かめます。Microsoftによると、ASP.NET Coreの要求の自動展開やHttpClientの応答の自動展開でBrotliを有効にしている場合と、BrotliStreamやBrotliDecoderを直接使っている場合に影響を受けます。どちらも初期設定では有効ではありません。

5

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)で修正しました。

何が公表されたのか

Brotliの展開処理における境界外書き込み(CVE-2026-111497)
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の公開情報にもとづく。

次に読む

最新の速報

速報の一覧 →

よくある質問

Q何が起きたのですか?
A

Googleは2026年10月21日(米国時間)、圧縮形式Brotliの公式ライブラリに境界外書き込みの脆弱性CVE-2026-111497があるとして、修正版1.2.1・1.1.1・1.0.10を公開しました。細工した圧縮データを展開させると、メモリが壊れて異常終了や情報の漏えい、場合によってはコード実行につながるおそれがあります。Node.js、Bun、PythonのBrotliパッケージ、.NETなどが、組み込んだ写しを直す修正版を出しています。

QNode2Shell・HTTP2Shellとは何ですか?
A

この脆弱性の呼び名です。JPCERT/CCの注意喚起によると、Node.jsの公表と結び付けてNode2Shell、BrotliがHTTPの圧縮に広く使われることからHTTP2Shellとも呼ばれています。どちらもCVE-2026-111497のことで、別の脆弱性ではありません。

Q自分のサービスは対象ですか?
A

Brotli 1.0.3〜1.0.9、1.1.0、1.2.0を組み込んだソフトで、外から受け取ったBrotliのデータを展開していれば対象です。Node.jsは22・24・26系の修正版(22.23.4・24.22.1・26.12.1)より前、PyPIのbrotliは1.2.1より前、brotlicffiは1.2.1.0より前、.NETは8.0.33・9.0.22・10.0.14より前が対象です。Microsoftによると、.NETのASP.NET CoreとHttpClientは初期設定ではBrotliを自動で展開しないため、展開を有効にしているかどうかで影響が変わります。

QOSのアップデートをしました。これで足りますか?
A

足りないことがあります。nodejs.orgの公式版や公式Dockerイメージ(Node.js・Bun)、PyPIから入れたBrotliパッケージ(wheel)、.NETの自己完結型アプリやNativeAOT、Bunの単一実行ファイルなどは、Brotliを自分の中に持っています。OSのlibbrotliを更新しても、これらの中の写しは変わりません。それぞれを修正版に上げ、コンテナイメージや実行ファイルを作り直して入れ替えてください。なお、UbuntuやDebianのパッケージとして入れたNode.jsはOSのlibbrotliを使うため、OSの更新で直ります(Ubuntu・Debianのセキュリティ情報)。

Q攻撃はもう起きていますか?
A

10月27日朝の時点で、一次情報に悪用の報告は見当たりません。米CISAのKEVにも入っていません。米CISAが10月23日にNVDへ付けた評価では、悪用は「なし」です。攻撃コードの公開については、Google、Node.js、JPCERT/CC、Microsoftの発表には書かれていません。独立系の解説サイトは公開されたとしていますが、当サイトは確かめていません。

Qrequestsやurllib3、httpx、aiohttpも更新が必要ですか?
A

これらのライブラリ自体は、10月27日時点でこの脆弱性の勧告を出していません。urllib3・httpx・aiohttpは、brotliまたはbrotlicffiが入っているときだけBrotliを展開する作りです(requestsはurllib3を使います)。直すべきなのは、同じ環境に入っているbrotli(1.2.1以上)とbrotlicffi(1.2.1.0以上)です。pip show brotli brotlicffi で確かめてください。