米グーグルが開発するデータ圧縮ソフト「Brotli(ブロトリ)」のC言語版に、細工した圧縮データを展開させると任意のプログラムを実行されるおそれのある欠陥(CVE-2026-111497)が見つかった。グーグルは10月21日に修正版を公開し、国内で脆弱性情報を扱うJPCERTコーディネーションセンター(JPCERT/CC)は26日、緊急の注意喚起を出した。米サイバーセキュリティ・インフラ安全保障庁(CISA)は27日、この欠陥を悪用が確認された脆弱性の目録に加えた。Brotliはサーバー用の実行環境「Node.js」などに組み込まれており、影響は多くの製品に及ぶ。
HTTP通信で使われる圧縮ソフト
Brotliは、グーグルが開発したデータ圧縮の方式と、それを実装したソフトの名前だ。JPCERT/CCは注意喚起で、BrotliをHTTP通信で利用されるデータ圧縮ライブラリと説明している。ライブラリは、ほかのソフトが部品として組み込んで使うプログラムを指す。単独のアプリとして使われることは少なく、利用者が名前を目にする機会はほとんどない。
今回の欠陥は、圧縮されたデータを元に戻す「展開」の処理にある。対象はBrotliの1.2.0、1.1.0から1.1.1より前、1.0.3から1.0.10より前の各版だ。グーグルはGitHubで10月21日に修正版の1.2.1を公開し、古い系統の利用者向けに1.1.1と1.0.10も出した。1.2.1のリリースノートには、この欠陥を「SECURITY」の項目として1行だけ載せている。
欠陥には「Node2Shell」「HTTP2Shell」という通称がある。JPCERT/CCによると、当初はNode.jsが同じ日に公表した脆弱性に関連して「Node2Shell」と呼ばれていた。その後、原因がNode.jsではなくBrotliのC言語実装にあり、HTTP通信で使われるため複数の製品が影響を受けることから「HTTP2Shell」とも呼ばれるようになったという。
8バイトの領域に書き込み続ける
Node.jsの開発陣が公表した説明によると、欠陥はデータの区切りを切り替える箇所の扱いにある。本来は形式の誤りとして処理を止めるべき不正なデータを、展開の処理が「続きのデータが届くのを待っている状態」として扱っていた。このため、データを少しずつ受け取りながら展開する処理が、8バイトしかない内部の領域に入力を書き足し続け、領域の外側までメモリーを書き換えてしまう。
GitHubの脆弱性データベースは、攻撃者が細工した圧縮データを使えば、ネットワーク越しに認証なしで、展開処理のすぐ隣にあるメモリーを壊したり、メモリー上の機微な情報を盗み出したり、サービスを止めたりでき、任意のプログラムを実行できる可能性もあると記している。共通の評価基準「CVSS」の第4版による深刻度は10点満点で9.2とし、最も高い区分の「Critical(緊急)」に分類した。
JVNは、攻撃者によって細工されたBrotli圧縮データを処理した場合に、任意のコードの実行、機微な情報の窃取、サービス運用妨害(DoS)につながる可能性があるとしている。JPCERT/CCも、影響を受けるアプリケーションが細工されたデータを展開すると、メモリーの破損によりアプリケーションの異常終了、メモリー上の情報の漏えい、任意のコード実行などにつながる可能性があると説明している。
Node.js、Bun、Python向け部品も対象
JPCERT/CCは、Brotliを組み込んだ製品と版は多岐にわたるとしたうえで、影響を受ける製品にNode.js、別の実行環境「Bun」、Python向けのBrotliパッケージなどが含まれると挙げた。JVNも、Brotliを同梱する複数の製品に影響が及ぶことが確認されていると記している。
Node.jsは10月21日、現在サポートしている26.x、24.x、22.xの3系統に修正版を出した。今回の安全更新で直した脆弱性は10件で、深刻度の内訳は「高」が4件、「中」と「低」が各3件だった。Brotliの欠陥は「高」の1件で、Node.jsの標準機能「node:zlib」でBrotliのデータを展開するアプリが影響を受ける。Node.jsは3系統すべてが対象だとし、サポートが終わった版は安全更新のたびに常に影響を受けるとして、最新版を使うよう求めている。
Python向けでは、パッケージ配布サイトPyPIで公開されている「Brotli」と「brotlicffi」が対象になった。GitHubの脆弱性データベースによると、Brotliは1.0.3以上1.2.1未満が影響を受け、1.2.1で直った。brotlicffiは1.2.1.0で修正された。
表: Brotliの欠陥(CVE-2026-111497)の主な影響範囲と修正版
| 対象 | 影響を受ける版 | 修正版 |
|---|---|---|
| Brotli(C言語版) | 1.2.0/1.1.0〜1.1.1未満/1.0.3〜1.0.10未満 | 1.2.1/1.1.1/1.0.10 |
| Node.js | 26.x、24.x、22.x | 26.12.1、24.22.1、22.23.4 |
| PyPI「Brotli」 | 1.0.3以上1.2.1未満 | 1.2.1 |
| PyPI「brotlicffi」 | 1.0.3以上1.2.1.0未満 | 1.2.1.0 |
米政府、悪用を確認し11月10日を期限に
CISAは10月27日、この欠陥を「悪用が確認された脆弱性」の目録(KEV)に加えた。名前のとおり悪用が確認された脆弱性を集めた一覧で、対応期限は11月10日とした。目録では欠陥を「戻り値を確かめない脆弱性」と分類し、オープンソースの部品や第三者のライブラリにあたるため、さまざまな製品で使われうると注記した。ランサムウエア(身代金要求型ウイルス)の攻撃に使われたかどうかは「不明」としている。
CISAの目録には、ほかのオープンソースソフトの欠陥も多く載っている。ウェブメールソフトでは、記事「ウェブメール「Roundcube」に欠陥20件 更新版1.6.20と1.7.5を公開」で伝えたように、過去の欠陥11件が目録に入っている。
Node.jsによると、今回の欠陥は米オープンAIの「Codex Security」に所属する研究者2人が報告した。修正にはNode.jsの開発者が加わった。グーグルの修正版公開からCISAの目録への追加までは6日で、JPCERT/CCの注意喚起とJVNの公開はその間の26日だった。
修正版への更新を、組み込み製品は開発元の情報を
対策は修正版への更新になる。JPCERT/CCは、グーグルが修正済みの版を公開しているとして、十分なテストのうえ速やかに適用するよう求めた。JPCERT/CCによると、グーグルは更新以外の緩和策を示していない。
利用者がBrotliを直接入れていなくても、使っているソフトが内部にBrotliを組み込んでいる場合がある。JPCERT/CCは、アプリケーションなどでBrotli形式の圧縮データを展開する処理を使っている場合は、各開発元が出す最新の情報で影響の有無と対応状況を確かめるよう呼びかけた。影響を受ける製品を使っている場合は、対策の適用とあわせて、すでに侵入されていないかの調査も速やかに行うよう求めている。
Node.jsを使う開発者やサーバーの管理者は、26.12.1、24.22.1、22.23.4以降の版へ上げる必要がある。Pythonのパッケージは、BrotliとbrotlicffiのPyPI上の版を確かめることになる。
