PythonBrotli(Python・Node.jsほか)メモリ破壊悪用確認

Brotliの脆弱性の確認方法、PythonとNode.jsで対象かを確かめて直す(CVE-2026-111497、コード実行のおそれ)

公開 2026-11-01公表 2026-10-22更新 2026-11-01資料確認 2026-11-01Pythonの脆弱性 233件のまとめ
対象製品Brotli(Python・Node.jsほか)
識別番号CVE-2026-111497
影響範囲Brotli 1.0.3〜1.2.0を組み込んだ環境・外部から受け取った圧縮データを展開する場合
修正情報Python brotli 1.2.1・brotlicffi 1.2.1.0・Node.js 22.23.4/24.22.1/26.12.1

Googleの圧縮形式Brotliで、圧縮データを展開する処理がメモリの範囲外に書き込む脆弱性CVE-2026-111497が、2026年10月22日(日本時間)にGoogleから修正版とともに公表されました。HTTP2Shellとも呼ばれます。Pythonのパッケージ、Node.jsの実行環境、.NETなど、Brotliを組み込んだ言語の環境が対象です。直し方は言語ごとに違い、Node.jsでは表示されるBrotliの番号が修正後も変わりません。

2026-11-01更新:一次情報(CVEの記録、NVD、KEV、Node.js・Google・Microsoft・PyPIの告知とソース)と照合して公開しました。

この記事の要点
  • 米国のCISAが、悪用が確認された脆弱性の一覧(KEV)に追加しています。
  • 対象はBrotli 1.0.3〜1.2.0で、細工した圧縮データを展開すると、メモリの破壊・情報の漏えい・サービス停止、場合によってはコード実行につながるおそれがあります。
  • Pythonはbrotliを1.2.1、brotlicffiを1.2.1.0に、Node.jsは22.23.4・24.22.1・26.12.1以上に上げます。Node.jsではprocess.versions.brotliの表示では判断できません。
  • 影響するのは、外部から受け取った圧縮データを展開する経路がある場合です。HTTPクライアントやWebフレームワークが自動で展開していることがあるので、使っているライブラリの既定の動作も確かめます。

01Brotliの脆弱性CVE-2026-111497で起きることと深刻度

CVEの記録(採番機関はGoogle)によると、展開処理(c/dec/decode.c)の不備で、認証のない遠隔の攻撃者が細工した圧縮データを送ると、展開の状態を持つメモリの破壊、メモリ内容の漏えい、サービス停止、場合によっては任意のコード実行につながるおそれがあります。対象は1.0.3〜1.2.0で、修正版は1.0.10・1.1.1・1.2.1です。Googleは日本時間の10月22日早朝にこの3つを公開しました。[1][4]

深刻度は、Googleの評価でCVSS 4.0の9.2、NVDの評価でCVSS 3.1の9.8です。米CISAは10月27日(米国時間)、この脆弱性を「Google Brotli」としてKEVに追加しました。[1][2][3]

細工した圧縮データを展開すると、Brotliを組み込んだ各言語の環境でメモリの破壊などが起きるおそれ

CVEの記録と各言語の告知から、攻撃の入口と脆弱な部品を並べる。

細工した圧縮データ認証のない遠隔の攻撃者が送る
展開するとき

Brotli 1.0.3〜1.2.0の展開処理

Pythonbrotli・brotlicffi
Node.js実行環境に同梱(node:zlib)
.NET実行環境に同梱
Go移植版andybalholm/brotli
展開処理の不備
起きることメモリの破壊、メモリ内容の漏えい、サービス停止、場合によっては任意のコード実行
気づかないうちに展開している経路
urllib3brotliかbrotlicffiが入っていると応答を展開する。requestsなども同じ
Node.jsのfetch()Brotliで圧縮された応答をnode:zlibで展開する
body-parser 2Express 5で、圧縮された要求の本文を初期設定で展開する

出典 CVEの記録「CVE-2026-111497」(2026-10-22)、NVD「CVE-2026-111497」(2026-10-30更新)、Node.js公式「October 2026 Security Releases」(2026-10-21)

02Brotliの脆弱性の影響を受ける条件

問題が起きるのは圧縮データを展開するときで、圧縮するだけの使い方は対象の記載がありません。[1][2][5][8][13]

直接入れた覚えがなくても、他のパッケージの依存で入っていることがあります。たとえばurllib3は、brotliかbrotlicffiが入っていると、Brotliで圧縮された応答を展開します。requestsなどurllib3を使うライブラリも同じ経路を通ります。[11]

外部のデータを展開する経路は、アプリが直接呼ぶ場合に限りません。Node.js組み込みのfetch()はBrotliで圧縮された応答をnode:zlibで展開し、Express 5が使うbody-parser 2は、Brotliで圧縮された要求の本文を初期設定で展開します。[12][17]

03悪用の状況

米国のCISAは2026年10月27日、CVE-2026-111497を「悪用が確認された脆弱性の一覧(KEV)」に追加しました。実際の攻撃で使われていることを示すため、優先して対応します。

CVEの記録に参考として載るセキュリティ会社ELLIOによると、PoCは公開されていて、ELLIOはそれを写した攻撃の通信を10月26日(協定世界時)に観測しました。当社はPoCを検証していません。今後30日に悪用される見込みの推定(EPSS)は82.6%です(10月31日時点)。[15][16]

Googleの修正版の公開から5日でKEVに載り、PoCを写した攻撃の通信も観測された

各社の告知、KEV、第三者の調査から、日付のある出来事を並べる。

Google・Node.jsなど提供元 米CISA・第三者

2026年10月21日

Node.jsが22.23.4・24.22.1・26.12.1を公開Brotliの修正を個別に取り込んだ

10月22日

GoogleがBrotli 1.0.10・1.1.1・1.2.1を公開CVE-2026-111497の記録も同じ日に出た。PyPIのbrotli 1.2.1も同じ日
9.2CVSS 4.0(Googleの評価)

10月26日

ELLIOがPoCを写した攻撃の通信を観測協定世界時。公開されたPoCを写したもの

10月27日

米CISAが「Google Brotli」としてKEVに追加米国時間

10月31日

EPSSの推定
82.6%今後30日に悪用される見込み

11月10日

KEVの対応期限

出典 CVEの記録「CVE-2026-111497」(2026-10-22)、Node.js公式「October 2026 Security Releases」(2026-10-21)、米CISA「Known Exploited Vulnerabilities Catalog」(2026-10-27)、ELLIO「Node2Shell(CVE-2026-111497)」(2026-10-26更新)

04攻撃を受けていないかの確認

悪用が確認された脆弱性は、更新に加えて、更新前に攻撃を受けていないかを確認します。

  1. 公開していた期間のWebサーバー・アプリケーションのログで、異常終了や不審な要求がないか確認します。
  2. 見覚えのないファイル(Webシェルなど)や、設定・アカウントの変更がないか確認します。
  3. サーバーから見覚えのない宛先への通信がないか確認します。
  4. 痕跡が見つかった場合は、ログや機器の状態を保全し、専門の窓口に相談します。

05Brotliの対象の版と推奨する版

言語ごとに、Brotliがどの形で入っているかと、修正版が次のとおり違います。[1][2][5][8][13]

言語・環境Brotliの入り方修正版
Python(brotli)C言語のBrotliを組み込んだパッケージ1.2.1
Python(brotlicffi)同上(CFFI経由)1.2.1.0
Node.js実行環境に同梱(node:zlib)22.23.4・24.22.1・26.12.1
.NET実行環境に同梱8.0.33・9.0.22・10.0.14
Go(andybalholm/brotli)Go言語への移植1.2.7(NVDの記載)

Brotliの入り方が言語ごとに違い、上げるものと修正版も違う

CVEの記録と各言語の告知から、言語・環境ごとに並べる。

Brotliの入り方
修正版
Python(brotli)
C言語のBrotliを組み込んだパッケージ
1.2.1
Python(brotlicffi)
同上(CFFI経由)
1.2.1.0
Node.js
実行環境に同梱(node:zlib)
22.23.4・24.22.1・26.12.1
.NET
実行環境に同梱
8.0.33・9.0.22・10.0.14
Go(andybalholm/brotli)
Go言語への移植
1.2.7(NVDの記載)
だから Node.jsはprocess.versions.brotliの番号が修正後も変わらないので、本体の版で判断する。

出典 CVEの記録「CVE-2026-111497」(2026-10-22)、Node.js公式「October 2026 Security Releases」(2026-10-21)、GitHub Advisory Database「GHSA-9v8h-qqgm-4m35」(2026-10-23)、Microsoft「.NET Brotli Decoder Out-of-bounds Write Vulnerability」(2026-10-26)

06PythonとNode.jsでBrotliを確認・更新する手順

  1. Pythonで、brotliとbrotlicffiの版を確かめます。表示の「Required-by」に、そのパッケージを必要としている別のパッケージが出ます。

    ターミナル
    python -m pip show brotli brotlicffi
  2. ロックファイルに古い版が固定されていないかも確かめます。

    ターミナル
    grep -i -n "brotli" requirements*.txt poetry.lock uv.lock
  3. brotliは1.2.1以上、brotlicffiは1.2.1.0以上に上げます。ロックファイルを使っている場合は、ロックファイルも更新します。

    ターミナル
    python -m pip install --upgrade "brotli>=1.2.1" "brotlicffi>=1.2.1.0"
  4. Node.jsは本体の版を確かめます。22系は22.23.4、24系は24.22.1、26系は26.12.1以上なら修正済みです。process.versions.brotliの表示では判断しません。

    ターミナル
    node -v
  5. OSのパッケージでBrotliを入れている場合(Debian・Ubuntuの例)は、パッケージの版を配布元の告知と照らし合わせます。

    ターミナル
    dpkg -l 'libbrotli*' 'python3-brotli*'
  6. 更新後は、アプリやコンテナのイメージを作り直して再起動し、動いている環境の中でもう一度版を確かめます。

    ターミナル
    docker exec <コンテナ名> node -v
    docker exec <コンテナ名> python -m pip show brotli brotlicffi

07すぐ上げられないとき

回避策を示しているのは、確認した一次情報では.NETだけです。Microsoftは、ASP.NET CoreとHttpClientは初期設定ではBrotliを自動で展開しないと説明し、更新まで信頼できないBrotliデータを展開しないこと、使っている場合は展開の設定からbrを外すことを示しています。[13]

Python・Node.js・Googleの告知には回避策がありません。条件から見ると、外部から受け取ったBrotliデータを展開しなければ影響の経路から外れます。body-parserには圧縮された本文を拒否するinflate: falseの設定がありますが、これは当社の整理で、提供元がこの脆弱性の回避策として示したものではありません。[12]

08Pythonのbrotli・brotlicffiの確かめ方と修正版

GitHub Advisoryは、PyPIのbrotli(1.0.3以上1.2.1未満)とbrotlicffi(1.0.3以上1.2.1.0未満)を対象としています。PyPIのbrotliには1.1.1や1.0.10が無く、修正版は1.2.1だけです。1.2.1は10月22日(日本時間)にPyPIへ公開されました。[8][9]

brotlicffi 1.2.1.0では、圧縮データの後ろに余分なバイトがあると例外を出すように変わりました。これまで通っていた入力が失敗する場合があるので、更新後に動作を確かめます。[10]

OSのパッケージ(Debianのpython3-brotliなど)で入れた場合は、OSのBrotliが更新対象です。DebianはBrotliの修正を元の番号のまま取り込み、bookwormでは1.0.9-2+deb12u1、trixieでは1.1.0-2+deb13u1が修正済みです。番号の頭だけで判断せず、配布元の告知の版と照らし合わせます。[14]

09Node.jsは本体の版で判断する

Node.jsは10月21日(日本時間)に22.23.4・24.22.1・26.12.1を公開しました。公式の告知は、node:zlibで外部のBrotliデータを展開するアプリで、異常終了、メモリの漏えい、遠隔からのコード実行につながるおそれがあるとしています。重要度はNode.jsの評価で「High」です。[5]

Node.jsはGoogleの修正だけを取り込んでいて、同梱のBrotliの番号は変えていません。修正版でもprocess.versions.brotliは22系で1.1.0、24系・26系で1.2.0と表示されます。判断にはNode.js本体の版を使います。[6][7]

20系などサポートが終わった系列について、告知は「サポートが終わった版は常に影響を受ける」としていて、修正版はありません。22・24・26のいずれかへ移ります。公式の告知に回避策の記載はありません。[5]

脆弱性の公表・更新一覧で、Pythonの関連情報を調べることもできます。

緊急の場合AI攻撃リスク即点検サービス公開情報と、契約後すぐに用意できるアクセスの記録から先に調べ、被害や狙われやすい構成がないかを早く確かめます。

よくある質問

process.versions.brotliが1.2.0なら対象ですか?

Node.jsでは、その表示では判断できません。修正版の24.22.1や26.12.1でも1.2.0と表示されます。node -vで本体の版を確かめ、22.23.4・24.22.1・26.12.1以上かを見ます。[7]

Pythonのbrotliを1.1.1に上げれば足りますか?

PyPIのbrotliに1.1.1はありません。GitHub Advisoryが示すPyPIの修正版は1.2.1です。1.1.1はGoogleが公開したC言語のBrotliの版です。[8][9]

KEVに載っているのは、どの製品ですか?

KEVの記載は「Google Brotli」で、特定の言語の環境を指していません。米国の政府機関への対応期限は11月10日です。同じBrotliを組み込んでいれば、言語を問わず更新します。[3]

PHPを使っている場合はどうしますか?

PHPのWindows向けパッケージは、同梱のBrotliを入れ替えた版が別に公開されています。PHPのWindowsパッケージの記事で確かめてください。

更新したのに古い版が動いていることはありますか?

あります。コンテナのイメージや、ビルド時に組み込んだ実行ファイルは、作り直して入れ替えるまで古い版のままです。更新後に、動いている環境の中で版を確かめます。

出典・参考資料

  1. CVEの記録:CVE-2026-111497(採番機関Google)2026-10-22 / 対象1.0.3〜1.2.0、修正版1.0.10・1.1.1・1.2.1、影響、CVSS 4.0 9.2(Google)
  2. NVD:CVE-2026-1114972026-10-22登録・10-30更新 / CVSS 3.1 9.8(NVD)、Node.js・.NET・Go移植版の対象範囲
  3. 米CISA:Known Exploited Vulnerabilities Catalog(CVE-2026-111497)2026-10-27 / KEVへの追加日、製品名Google Brotli、対応期限11月10日
  4. Google:Brotli v1.2.1(v1.1.1・v1.0.10も同時)2026-10-22(日本時間) / 修正版の公開日
  5. Node.js公式:October 2026 Security Releases2026-10-21 / 対象の系列、node:zlibでの展開の条件、影響、修正版、サポート終了版の扱い
  6. Node.js公式:v24.22.1リリースノート2026-10-21 / Brotliの修正を個別に取り込んだこと(22.23.4・26.12.1も同じ)
  7. Node.jsのソース:同梱Brotliの版の定義(v24.22.1)2026-11-01確認 / 修正版でも同梱Brotliの番号が1.2.0(22.23.4は1.1.0)のままであること
  8. GitHub Advisory Database:GHSA-9v8h-qqgm-4m352026-10-23収録(日本時間) / PyPIのbrotli・brotlicffiの対象範囲と修正版
  9. PyPI:Brotli 1.2.12026-10-22(日本時間) / 配布元への公開日、公開されている版の一覧
  10. brotlicffi:1.2.1.0の変更履歴2026-10-21 / libbrotli 1.2.1への更新、余分なバイトを拒否する動作の変更
  11. urllib3公式:Brotli Encoding2026-11-01確認 / brotli・brotlicffiが入っているとBrotliの応答を扱うこと
  12. body-parser:要求本文の展開処理(lib/read.js)2026-11-01確認 / brの本文の展開、inflateの初期値(README)
  13. Microsoft:.NET Brotli Decoder Out-of-bounds Write Vulnerability2026-10-26(日本時間) / .NETの対象、初期設定の扱い、回避策、修正版、CVSS 3.1 8.1(Microsoft)
  14. Debian Security Tracker:CVE-2026-1114972026-11-01確認 / Debianの修正済みパッケージの版、nodejsなどがOSのBrotliを使うこと
  15. ELLIO:Node2Shell(CVE-2026-111497)(第三者の調査)2026-10-25(10-26更新) / 公開されたPoC、観測した攻撃の通信(CVEの記録に参考として掲載)
  16. FIRST:EPSS(CVE-2026-111497)2026-10-31 / EPSSの値
  17. Node.jsのソース:同梱undiciのfetch(v24.22.1)2026-11-01確認 / fetch()がBrotliの応答をnode:zlibで展開すること

あわせて読みたい記事

PHP公表 2026-10-26

PHPのWindows版のBrotliの脆弱性、8.5.12-1などへの入れ替えとcURL・Guzzleの確かめ方(CVE-2026-111497)

PHPのWindows版に同梱のBrotliの脆弱性CVE-2026-111497は、米CISAが悪用を確認しています。10月21日の版も対象のままである理由、GuzzleやWordPressで自動展開が有効になる条件、8.5.12-1などへの入れ替えと確かめ方を説明します。

Python公表 2026-05-22

Starletteの脆弱性BadHost、Hostヘッダーでパスによる認証の確認を回避されるおそれ。FastAPIを上げても古い版が残る場合の確かめ方

Starletteの脆弱性CVE-2026-48710(BadHost)は、細工したHostヘッダーでrequest.url.pathを偽り、パスで判定するアクセスの確認を回避されるおそれがあります。9月2日にKEVに追加されました。FastAPI・vLLM・LiteLLMの下で古いStarletteが残る例と、間接依存の確かめ方を説明します。

Python公表 2026-10-23

TwistedのHTTP/2の脆弱性、1接続でCPUを使い切らせるおそれと、HTTP/2が有効かの確かめ方・26.10.0への更新(GHSA-vpp8-g58w-m8mp)

Python向けTwistedのHTTP/2サーバーに、認証なしの1接続でCPUを使い切らせる脆弱性があり、10月30日に正式版26.10.0で直りました。HTTP/2が動く条件(h2とTLS)の確かめ方、修正の効き方、CVE番号の扱い、Python 3.9の環境での注意を説明します。