Brotliの脆弱性の確認方法、PythonとNode.jsで対象かを確かめて直す(CVE-2026-111497、コード実行のおそれ)
CVE-2026-111497Googleの圧縮形式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の展開処理
出典 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日
10月22日
10月26日
10月27日
10月31日
11月10日
出典 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攻撃を受けていないかの確認
悪用が確認された脆弱性は、更新に加えて、更新前に攻撃を受けていないかを確認します。
- 公開していた期間のWebサーバー・アプリケーションのログで、異常終了や不審な要求がないか確認します。
- 見覚えのないファイル(Webシェルなど)や、設定・アカウントの変更がないか確認します。
- サーバーから見覚えのない宛先への通信がないか確認します。
- 痕跡が見つかった場合は、ログや機器の状態を保全し、専門の窓口に相談します。
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の記録と各言語の告知から、言語・環境ごとに並べる。
出典 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を確認・更新する手順
Pythonで、brotliとbrotlicffiの版を確かめます。表示の「Required-by」に、そのパッケージを必要としている別のパッケージが出ます。
ターミナルpython -m pip show brotli brotlicffiロックファイルに古い版が固定されていないかも確かめます。
ターミナルgrep -i -n "brotli" requirements*.txt poetry.lock uv.lockbrotliは1.2.1以上、brotlicffiは1.2.1.0以上に上げます。ロックファイルを使っている場合は、ロックファイルも更新します。
ターミナルpython -m pip install --upgrade "brotli>=1.2.1" "brotlicffi>=1.2.1.0"Node.jsは本体の版を確かめます。22系は22.23.4、24系は24.22.1、26系は26.12.1以上なら修正済みです。
process.versions.brotliの表示では判断しません。ターミナルnode -vOSのパッケージでBrotliを入れている場合(Debian・Ubuntuの例)は、パッケージの版を配布元の告知と照らし合わせます。
ターミナルdpkg -l 'libbrotli*' 'python3-brotli*'更新後は、アプリやコンテナのイメージを作り直して再起動し、動いている環境の中でもう一度版を確かめます。
ターミナル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の関連情報を調べることもできます。

よくある質問
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パッケージの記事で確かめてください。
更新したのに古い版が動いていることはありますか?
あります。コンテナのイメージや、ビルド時に組み込んだ実行ファイルは、作り直して入れ替えるまで古い版のままです。更新後に、動いている環境の中で版を確かめます。
出典・参考資料
- 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)
- NVD:CVE-2026-1114972026-10-22登録・10-30更新 / CVSS 3.1 9.8(NVD)、Node.js・.NET・Go移植版の対象範囲
- 米CISA:Known Exploited Vulnerabilities Catalog(CVE-2026-111497)2026-10-27 / KEVへの追加日、製品名Google Brotli、対応期限11月10日
- Google:Brotli v1.2.1(v1.1.1・v1.0.10も同時)2026-10-22(日本時間) / 修正版の公開日
- Node.js公式:October 2026 Security Releases2026-10-21 / 対象の系列、node:zlibでの展開の条件、影響、修正版、サポート終了版の扱い
- Node.js公式:v24.22.1リリースノート2026-10-21 / Brotliの修正を個別に取り込んだこと(22.23.4・26.12.1も同じ)
- Node.jsのソース:同梱Brotliの版の定義(v24.22.1)2026-11-01確認 / 修正版でも同梱Brotliの番号が1.2.0(22.23.4は1.1.0)のままであること
- GitHub Advisory Database:GHSA-9v8h-qqgm-4m352026-10-23収録(日本時間) / PyPIのbrotli・brotlicffiの対象範囲と修正版
- PyPI:Brotli 1.2.12026-10-22(日本時間) / 配布元への公開日、公開されている版の一覧
- brotlicffi:1.2.1.0の変更履歴2026-10-21 / libbrotli 1.2.1への更新、余分なバイトを拒否する動作の変更
- urllib3公式:Brotli Encoding2026-11-01確認 / brotli・brotlicffiが入っているとBrotliの応答を扱うこと
- body-parser:要求本文の展開処理(lib/read.js)2026-11-01確認 / brの本文の展開、inflateの初期値(README)
- Microsoft:.NET Brotli Decoder Out-of-bounds Write Vulnerability2026-10-26(日本時間) / .NETの対象、初期設定の扱い、回避策、修正版、CVSS 3.1 8.1(Microsoft)
- Debian Security Tracker:CVE-2026-1114972026-11-01確認 / Debianの修正済みパッケージの版、nodejsなどがOSのBrotliを使うこと
- ELLIO:Node2Shell(CVE-2026-111497)(第三者の調査)2026-10-25(10-26更新) / 公開されたPoC、観測した攻撃の通信(CVEの記録に参考として掲載)
- FIRST:EPSS(CVE-2026-111497)2026-10-31 / EPSSの値
- Node.jsのソース:同梱undiciのfetch(v24.22.1)2026-11-01確認 / fetch()がBrotliの応答をnode:zlibで展開すること
あわせて読みたい記事
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などへの入れ替えと確かめ方を説明します。
Starletteの脆弱性BadHost、Hostヘッダーでパスによる認証の確認を回避されるおそれ。FastAPIを上げても古い版が残る場合の確かめ方
Starletteの脆弱性CVE-2026-48710(BadHost)は、細工したHostヘッダーでrequest.url.pathを偽り、パスで判定するアクセスの確認を回避されるおそれがあります。9月2日にKEVに追加されました。FastAPI・vLLM・LiteLLMの下で古いStarletteが残る例と、間接依存の確かめ方を説明します。
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の環境での注意を説明します。