Brotli の脆弱性(通称 HTTP2Shell)、修正版へ更新を

Brotli の脆弱性(通称 HTTP2Shell)、修正版へ更新を ITニュース

圧縮ライブラリ Brotli のデコーダーに、通称「HTTP2Shell」(CVE-2026-111497)の脆弱性が見つかり、Node.js や Envoy などが修正版を公開しています。Node.js の告知は2026年10月21日、Brotli 本体の修正版 1.2.1 の公開も同じ10月21日です。Node.js、Python の Brotli パッケージ、Envoy を社内システムや業務アプリで使っている情シス・運用担当に関係する話で、細工された Brotli データの展開により、任意コード実行に至る可能性があると説明されています。

Brotli の脆弱性、結論は「使っている版の確認と更新」

結論から言うと、Node.js・Python・Envoy のどれかを使っているなら、動いている版を確認して、修正版へ更新する予定を立てるのがおすすめです。Node.js の告知には回避策や緩和策の記載がなく、案内は最新版を使うことだけです(Node.js の10月21日のセキュリティリリース)。Envoy の Advisory も、案内は修正版への更新のみです。

この Brotli の脆弱性は、信頼できない相手から届いた Brotli 圧縮データを展開する場面が入口になります。Web サーバー、API、プロキシのように外部からデータを受け取る系統は、先に見ておきたいところです。

Brotli CVE-2026-111497 の影響範囲と修正版

Google Brotli の1.0.3 から 1.2.0 までが対象で、修正版は 1.2.1、1.1.1、1.0.10 です(GitHub Advisory GHSA-9v8h-qqgm-4m35)。製品ごとの状況は次のとおりです。

製品 影響を受ける条件 修正版 出典
Node.js 信頼できない Brotli 入力を node:zlib で展開するアプリ。26.x・24.x・22.x が修正対象 v22.23.4、v24.22.1、v26.12.1 Node.js
Python(PyPI の Brotli パッケージ) brotli は 1.0.3 以上 1.2.1 未満、brotlicffi は 1.0.3 以上 1.2.1.0 未満 brotli 1.2.1、brotlicffi 1.2.1.0 GitHub Advisory
Envoy Brotli decompressor を設定している 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 Advisory
Bun リリースノートに Brotli の語が出る v1.4.4 のリリースノートに Brotli の記載あり Bun v1.4.4

Node.js の説明では、細工された Brotli データを展開するとき、デコーダーが内部バッファーの終端を越えて書き込みます。原因は、不正な入力を恒久的な形式エラーとして止めず、「入力がまだ必要」と扱ってしまったことです。結果として、プロセスのクラッシュ、メモリ内容の漏えい、リモートコード実行につながり得るとされています。Python の Brotli パッケージについては、GitHub Advisory が Node.js と同じデコーダーの問題としてまとめています。

Bun は、v1.4.4(10月22日公開)の案内にセキュリティ修正の対象として Brotli の語が出ますが、CVE 番号は書かれていません。今回の件の修正版にあたるかどうかは、Bun の案内からは確認できていません。Bun を使っている場合は、Bun の公式案内で対象の版を確認してください。

Brotli の深刻度は出典ごとに表記が違う

Brotli の深刻度は、公式の出典のあいだでも表記が分かれています。ここは分けて読むと、更新の優先度を決めやすくなります。

出典 深刻度の表記
Node.js の告知 high(このリリース全体で最も高い深刻度も HIGH)
GitHub Advisory critical、CVSS v4 のベーススコア 9.2
Envoy の Advisory Critical、CVSS v4 のベーススコア 9.2
NVD CVSS v4 9.2(CRITICAL)。評価元は Google の脆弱性調整窓口で、NVD 自身の分析は Awaiting Analysis

GitHub Advisory は、リモートの認証なしの攻撃者が、メモリ状態の破壊、機密メモリ内容の漏えい、サービス拒否、任意コード実行の可能性を持つと説明しています。「任意コード実行」は可能性として書かれている点に注意してください。現場では、数字の高い方を前提にして、更新の優先度を決めておくと後で慌てません。

なお、Node.js の同じ10月21日のリリースには、この件を含めて10件の CVE(high 4件、medium 3件、low 3件)が入っています。Node.js を更新するなら、Brotli の件だけでなく、まとめて直る前提で計画を立てられます。

Brotli の通称「HTTP2Shell」について

この Brotli の件は、「HTTP2Shell」という通称で呼ばれることがあります。ただし、公式の告知で使われている名前ではありません。GitHub Advisory の要約には「Node2Shell」の名が出ます。通称の由来は、公式の案内に記載がありません。検索結果などで名前が違って見えても、CVE-2026-111497 で確認すれば同じ件だと追えます。

Brotli の更新までにやっておきたいこと

公式に期限の指定はありませんが、すでに修正版が出ているため、数日のうちに棚卸しと更新計画までは進めておくのがおすすめです。NVD に載る CISA の評価(10月23日付)では、その時点で悪用は確認されていない(exploitation: none)とされています。今後変わる可能性があるため、公開済みのサーバーから順に見ていくと安全です。

  1. 使っている場所を洗い出す: Node.js、Python、Envoy、Bun を、本番・検証・開発用サーバー、コンテナーイメージまで含めて一覧にします
  2. 版を確かめる: 次のコマンドで確認できます。Envoy は、Brotli decompressor を設定しているかを設定ファイルで見ます
  3. 修正版を検証環境で試す: Node.js は v22.23.4、v24.22.1、v26.12.1、Python の Brotli パッケージは brotli 1.2.1 や brotlicffi 1.2.1.0 を目安にします
  4. 更新の日時を決める: 再起動を伴うので、止められる時間帯と連絡先を先に決めます
  5. 更新後の確認項目を決める: 画面の表示、API の応答、圧縮データの送受信が通るかを見ます
  6. 組み込み製品も確認する: Brotli を内部に持つ自社アプリやベンダー製品は、ベンダーの案内を確認します
node -v
pip show brotli brotlicffi

Node.js の End-of-Life になった版は、セキュリティリリースのたびに影響を受ける扱いだと告知に書かれています。サポート外の版を使っている環境は、この機会に移行も考えておくとよいでしょう。

現場で起きそうなこと

これは実際にあった話ではなく、ありがちな想定です。

「Node.js は動いているから触らない」という機械や、誰かが前に入れた Python の仮想環境が、版の分からないまま残っています。脆弱性が出てから、まず台帳探しが始まる流れです。冷蔵庫に何が残っているか分からないまま献立を考えるようなもので、棚卸しを先に済ませておくと、更新の判断が速くなります。

ほかの技術ネタは、技術ネタの記事一覧からどうぞ。2026年10月25日時点の、Node.js(10月21日)、GitHub Advisory(10月22日)、Envoy(10月23日)の公開情報にもとづきます。

ITもごはんも、腹八分目が長続きのコツ!

コメント