Brotliの脆弱性CVE-2026-111497とは?Python・Node.jsで上げるバージョンと確かめ方

Brotliの脆弱性CVE-2026-111497。Brotli本体は1.0.10・1.1.1・1.2.1で直った。Pythonではpython -m pip show brotli brotlicffiで入っているか確かめ、Brotliは1.2.1以降、brotlicffiは1.2.1.0以降に上げる。nodejs.orgで配っているNode.jsはnode -vで確かめ、22.23.4・24.22.1・26.12.1以降に上げる。Linuxのディストリビューションから入れたNode.jsは、ディストリビューションのbrotliのパッケージを確かめる。EnvoyはBrotliの展開を設定しているとき1.40.0・1.39.3・1.38.6・1.37.8・1.36.12、IstioはBrotliの展開を有効にしているとき1.31.2・1.30.6・1.29.9に上げる

GoogleのBrotliで、細工した圧縮データを展開すると範囲外への書き込みが起きる脆弱性CVE-2026-111497が見つかり、日本時間10月22日に直ったバージョン1.0.10・1.1.1・1.2.1が出ました。

PythonのrequestsやhttpxでAPIを呼んでいる人はPyPIのBrotliを1.2.1以降(brotlicffiは1.2.1.0以降)に上げます。nodejs.orgで配っているNode.jsは、22.23.4・24.22.1・26.12.1以降に上げます。Linuxのディストリビューションから入れたNode.jsは、ディストリビューションのbrotliのパッケージを確かめます。

python -m pip show brotli brotlicffi
node -v

表示されたバージョンが、下の表の「上げる先」より前なら上げる対象です。node -v のバージョンで判断できるのは、nodejs.orgで配っているNode.jsのときです。EnvoyとIstioは、Brotliの展開を有効にしているときに影響を受けます。

目次

結論:使っているもの別の上げる先

使っているもの 上げる先
Brotli本体(C言語のライブラリ) 1.0.10・1.1.1・1.2.1
PythonのBrotli(PyPI) 1.2.1
Pythonのbrotlicffi(PyPI) 1.2.1.0
Node.js 22.23.4・24.22.1・26.12.1
Bun 1.4.4
Envoy 1.40.0・1.39.3・1.38.6・1.37.8・1.36.12
Istio 1.31.2・1.30.6・1.29.9
  • 2026年10月25日7時58分(日本時間)時点の公式の発表の内容です。
  • 影響するのは、Brotli本体の1.0.3から1.2.0までです。
  • Linuxのディストリビューションのbrotliのパッケージは、バージョンの番号を上げずに修正を取り込むことがあります。たとえばDebianでは、bookwormは1.0.9-2+deb12u1、trixieは1.1.0-2+deb13u1で直っています。OSのパッケージは、ディストリビューションのセキュリティ情報で確かめます。
  • 細工したBrotliのデータを相手に展開させられれば、認証なしで外から攻撃できます。展開した側では、メモリの破壊、情報の漏えい、サービスの停止、任意のコードの実行が起こるおそれがあります。
  • PythonのBrotliやbrotlicffiが入っていると、requests(urllib3)とaiohttp、httpx[brotli] で入れたhttpxは、Brotliで圧縮された応答を自動で展開します。
  • nodejs.orgで配っているNode.jsはBrotliを本体に組み込んでいて、22.x・24.x・26.xが影響を受けます。サポートが終わった20.x以前には修正が出ません。Debianのnodejsのパッケージは、OSのbrotliのライブラリを使います。Linuxのディストリビューションから入れたときは、ディストリビューションのbrotliのパッケージを確かめます。

CVE-2026-111497とは

Brotliは、Googleが作ったデータの圧縮の形式とライブラリです。HTTPでは Content-Encoding: br として、WebページやAPIの応答の圧縮に広く使われています。

CVE-2026-111497は、Brotliのデコーダー(展開する側の処理)にある範囲外への書き込みの不具合です。細工した圧縮データを展開させると、用意したメモリの外に書き込みが起きます。GitHub Security Advisoryでは「Node2Shell」という名前が付いています。

項目 内容
CVE CVE-2026-111497
深刻度 CVSS 4.0で9.2(Critical)。Googleが付けた値です。Node.jsは自分のリリースで「High」としています
種類 範囲外への書き込み(CWE-787)、戻り値を確かめていない(CWE-252)
影響するバージョン Brotli本体の1.0.3〜1.2.0
直ったバージョン 1.0.10・1.1.1・1.2.1
悪用の状況 NVDに載っているCISAの評価では「none」(悪用の証拠はないという評価)

公開の流れ(日本時間)は次のとおりです。

日時 できごと
10月22日 4時27分ごろ Brotli本体の1.0.10・1.1.1・1.2.1が公開
10月22日 22時57分 Brotli 1.2.1がPyPIに公開
10月22日 23時17分 CVE-2026-111497がNVDに載る
10月23日 1時19分 brotlicffi 1.2.1.0がPyPIに公開
10月24日 1時03分 GHSA-3wvj-j6qm-62mrをEnvoyが公開

自分の環境にBrotliが入っているか確かめる

Python(requests・httpx・aiohttp)

python -m pip show brotli brotlicffi

「WARNING: Package(s) not found」と出たものは入っていません。入っていれば Version: の行にバージョンが出ます。Brotliは1.2.1より前、brotlicffiは1.2.1.0より前なら上げる対象です。

BrotliやbrotlicffiがPythonの環境に入っていると、requests(urllib3)とaiohttp、httpx[brotli] で入れたhttpxは、サーバーから届いたBrotliの応答を自動で展開します。Content-Encoding: br のリクエストの本文を受け付けるサービスも、届いたデータを展開します。

入っているものだけを上げます。

python -m pip install -U "brotli>=1.2.1"
python -m pip install -U "brotlicffi>=1.2.1.0"

仮想環境やコンテナごとに入っているものは別なので、それぞれで確かめます。requirements.txtなどでバージョンを固定しているときは、固定しているバージョンを書きかえて、イメージを作り直します。PyPAの発表では、Brotli 1.2.1と1.2.0の違いはこの修正とバージョンの番号だけです。

Node.js

node -v

nodejs.orgで配っているNode.jsはBrotliを本体に組み込んでいて、node:zlibで相手から届いたBrotliのデータを展開するアプリが影響を受けます。npmのパッケージを入れていなくても、Node.js本体のバージョンで決まります。

  • 22.x:22.23.4以降
  • 24.x:24.22.1以降
  • 26.x:26.12.1以降

Debianのnodejsのパッケージは、OSのbrotliのライブラリを使うので、node -v のバージョンでは判断できません。aptなどでLinuxのディストリビューションのパッケージから入れたときは、ディストリビューションのセキュリティ情報で、brotliのパッケージが直っているかを確かめます。Debianでは、nodejsが使うbrotliのライブラリはlibbrotli1というパッケージです。

dpkg -l libbrotli1

出たバージョンを、Debianのセキュリティトラッカーの直ったバージョンと比べます。bookwormは1.0.9-2+deb12u1、trixieは1.1.0-2+deb13u1で直っています。

Node.jsは、サポートが終わったバージョンはセキュリティリリースのたびに必ず影響を受けるとしています。20.x以前は24.x以降へ移ります。更新のしかたやDockerイメージの入れ替えは、Node.jsの脆弱性10件(2026年10月)の記事にあります。

Bun

bun --version
bun upgrade

Bun 1.4.4のリリースノートは、セキュリティの修正の対象にBrotliを挙げています。1.4.4より前なら bun upgrade で上げます。

Envoy

envoy --version

Envoyでは、Brotliの展開(decompressor)を設定しているときに影響を受けます。Envoyの発表は、影響するバージョンとして1.39.2・1.38.5・1.37.7・1.36.11を挙げていて、直ったのは1.40.0・1.39.3・1.38.6・1.37.8・1.36.12です。

Istio

istioctl version

Istioは10月15日付のISTIO-SECURITY-2026-007で、EnvoyのBrotliの修正を入れています。EnvoyFilterなどでBrotliの展開を有効にしているときに上げます。

  • 1.31.0〜1.31.1:1.31.2以降
  • 1.30.0〜1.30.5:1.30.6以降
  • 1.29.0〜1.29.8:1.29.9(1.29は10月15日でサポートが終わり、これが最後のリリースです)

よくある質問

Brotliを使っているつもりがなくても対象ですか?

対象になることがあります。Pythonでは、ほかのパッケージといっしょにBrotliやbrotlicffiが入っていると、requestsやaiohttpが自動で使います。nodejs.orgで配っているNode.jsは本体に組み込んでいるので、node -v のバージョンで決まります。Linuxのディストリビューションのパッケージで入れたNode.jsは、ディストリビューションのbrotliのパッケージも確かめます。

CVSSの9.2とNode.jsの「High」はどちらが正しいですか?

付けたところが違います。9.2(Critical)はCVEを割り当てたGoogleがCVSS 4.0で付けた値で、HighはNode.jsが自分のリリースで付けた深刻度です。どちらでも、上げる先は同じです。

Brotli 1.2.1に上げて動きが変わりませんか?

PyPAの発表では、PyPIのBrotli 1.2.1と1.2.0の違いはこの修正とバージョンの番号だけです。

公式の発表

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次