セキュリティとプライバシー

深刻なBrotliデコーダーの脆弱性がNode.js、Python、HTTPサービスに影響

CVE-2026-111497により、主要なランタイムにおいて細工されたBrotliストリームを介したリモートコード実行が可能になります。Node.js、Python、Bun、Envoy向けの修正パッチが提供されています。

メモリ漏洩を示すデータ圧縮脆弱性のイラスト
この記事用に生成されたイラスト

英語の原文から自動翻訳されました。

GoogleのBrotli圧縮ライブラリにおける重大な脆弱性(CVE-2026-111497として追跡)により、主要なソフトウェアランタイムがリモートコード実行のリスクにさらされています。2026年10月23日に公開されたこの欠陥は、Node.js、Python、Bun、およびEnvoyやIstioなどのインフラストラクチャコンポーネントに影響します。開発者は、サーバー侵害の可能性を防ぐため、影響を受けるライブラリを直ちにパッチ適用するか、Brotliデコーディングを無効にする必要があります。

何が起きたか

当初「Node2Shell」と呼ばれていたこの脆弱性は、Node.jsによって10月22日に公開されましたが、ソフトウェアエコシステム全体により広範な影響があることが判明しました。これはBrotliデコーダー内のメモリセーフティエラーに起因しており、認証されていない攻撃者がプロセスメモリを破損させることを可能にします。特別に細工された圧縮データストリームを送信することで、攻撃者はサービスをクラッシュさせ、機密情報を漏洩させ、または任意のコードを実行できます。共通脆弱性評価システム(CVSS)v4.0では、この問題の評価スコアは9.2であり、「クリティカル」レベルと判定されています。

OpenAIは、根本原因を2026年2月に発見したことを明らかにしました。基盤となるバグはその時点でBrotliソースコード内で修正されていましたが、セキュリティ脆弱性として認識されていなかったため、今回まで修正リリースは発行されませんでした。この遅延により、独自のコピーでBrotliライブラリをバンドルしているすべてのプロジェクトが数ヶ月間、危険な状態のまま放置されていました。2023年10月23日時点では、libbrotli、Python、C++、Node.js、Bun、Envoy向けのパッチがリリースされており、他の依存アプリケーション向けの追加アップデートも予定されています。

仕組み

Brotliは、HTML、CSS、JavaScriptなどのWebコンテンツのサイズをHTTP転送中に削減するために広く使用されている可逆圧縮アルゴリズムです。脆弱性は、デコーダー内のDecodeBlockTypeAndLength()関数に存在します。この関数は、データストリームが解凍に使用するハフマンツリーを変更する際に発生するブロックスイッチを処理します。影響を受けるバージョン(1.0.3から1.2.0)では、この関数は単純なブール値を返しますが、不正なストリームと追加の入力データの要求を区別できません。

高速デコーディングパス上の呼び出し側はこの戻り値を破棄するため、停止すべき状況でもデコーダーが処理を継続してしまう状態が発生します。攻撃者は、ブロックの長さを消費し、無効なスイッチを強制するストリームを作成することでこれを悪用できます。その後、デコーダーは範囲外書き込みを実行し、小さな作業バッファをオーバーフローさせて隣接するメモリを破損させます。修正プログラムでは、特定の错误コードBROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCHを導入し、このようなフォーマットエラーを検出した際にデコーダーが直ちに停止するようにしています。

主な詳細

  • 影響を受けるバージョン: すべてのプラットフォームでのBrotli 1.0.3から1.2.0。
  • 修正済みバージョン: Brotli 1.2.1、1.1.1、および1.0.10; brotlicffi 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。
  • Pythonへの影響: バージョン1.2.0以下がインストールされている場合、パッケージBrotliおよびbrotlicffiが脆弱です。
  • 検出ギャップ: アドバイザリデータベースはまだこのCVEをPyPIパッケージにマッピングしていないため、Dependabotなどのツールは自動的にフラグを立てない可能性があります。
  • 攻撃ベクトル: 悪意のあるBrotliデータを含む細工されたHTTPリクエストまたはレスポンスを介した、リモートからの認証なしのアクセス。

なぜ重要なのか

この脆弱性は、現代のソフトウェアサプライチェーンにおける推移的依存関係に関連するリスクを浮き彫りにします。多くの開発者はコード内でBrotliを明示的にインポートしていませんが、Pythonのrequests、httpx、urllib3などの人気HTTPクライアントや、Node.jsの組み込みfetchは、存在する場合に自動的に読み込みます。つまり、ソースコード内でライブラリを直接参照していなくても、アプリケーションが脆弱になる可能性があります。これらの依存関係の自動的な性質により、依存関係ツリーの深い検査を行わない限り、露出度を評価することが困難になります。

ネットワーク化されたサービスを構築しているチームにとって、その影響は深刻です。なぜなら、攻撃対象領域には受信トラフィックと送信トラフィックの両方が含まれるからです。悪意のあるクライアントは、圧縮されたリクエストボディを送信することでサーバーを標的にでき、悪意のあるサーバーは、圧縮されたレスポンスを返すことでクライアントを標的にできます。この双方向の脅威モデルは、内部マイクロサービスや外部向けAPIを含む、HTTPトラフィックを処理するすべてのサービスの包括的なパッチ適用を必要とします。2月の修正がセキュリティ上の意味を持つことに気づくまでの遅延は、上流ライブラリの変更に対する厳格な監視の必要性をさらに強調しています。

対応策

  • ランタイムのアップグレード: Node.jsを22.23.4、24.22.1、または26.12.1に更新し、Bunを1.4.4以降に更新してください。
  • Pythonパッケージの更新: すべての環境でpip install -U "Brotli>=1.2.1"およびpip install -U "brotlicffi>=1.2.1.0"を実行してください。
  • コンテナの再ビルド: ロックファイルを再生成し、コンテナイメージを再ビルドして、パッチ適用済みのバージョンがデプロイされたアーティファクトに含まれていることを確認してください。
  • デコーディングの無効化: 即時のパッチ適用が不可能な場合は、Accept-Encodingヘッダーからbrを削除し、プロキシレベルで受信Content-Encoding: brリクエストを拒否することにより、Brotliデコーディングを無効にしてください。
  • 依存関係の確認: pipdeptreeなどのツールを使用して、どのライブラリが推移的依存関係としてBrotliを引き込んでいるかを特定してください。
  • アドバイザリの監視: OSパッケージに関するベンダー固有のセキュリティ公告を確認してください。上流のバージョン番号を変更せずに修正をバックポートしている場合があります。
  • #security
  • #vulnerability
  • #nodejs
  • #python
  • #brotli

Bytechapストアのツール

続きを読む

セキュリティとプライバシー

セキュリティ企業、放置された数百万件のPopcorn Timeインストールのアップデータをリモートで無効化

Eye Securityは200万件以上のアップデートを配信し、Time4Popcorn内の脆弱なバックグラウンドプロセスを無効化しました。これにより、WindowsおよびMacシステムでのボットネットへの悪用を防ぎました。

セキュリティとプライバシー

Ruby、GitLabの重大なリモートコード実行脆弱性の原因となる正規表現エンジンのバグを修正

Rubyは、Onigmoエンジンの3つのバグを修正するアップデートをリリースしました。これらのバグは、信頼できない正規表現パターンをコンパイルするあらゆるアプリに影響を与える、GitLabにおける4件の重大なリモートコード実行脆弱性を可能にしていました。

セキュリティとプライバシー

Node.jsのBrotliデコーダーの脆弱性により公式ビルドでリモートコード実行が可能に

Impervaの研究チームは、Node.js 24.22.0において細工されたBrotliデータを用いたリモートコード実行を実証しました。サポート対象バージョン向けのパッチが提供されており、信頼できないデータを復号するサービスには即時の更新が必要です。

すべての記事