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

Brotli デコーダーの重大な脆弱性により、Node.js、Bun、Python でリモートコード実行が可能に

Google の Brotli C ライブラリにおけるメモリ破損バグ(CVE-2026-111497)により、Node.js や Bun など複数のランタイムでリモートコード実行が可能になります。

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

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

Google の Brotli 圧縮ライブラリにある重大なメモリ破損脆弱性により、広く使用されているソフトウェアスタックがリモートコード実行のリスクにさらされています。2026年10月21日に公開されたこの欠陥は、Node.js、Bun、Python パッケージ、そして Envoy や Istio などのインフラストラクチャプロキシに影響します。現時点で活発な攻撃は報告されていませんが、研究者らはパッチ未適用の Node.js ビルドでのコード実行に成功しています。

何が起きたか

CVE-2026-111497 として追跡されているこの脆弱性は、Brotli 圧縮データをデコードする C コードに存在します。多くのアプリケーションやランタイムがこのデコーダーのコピーを独自にバンドルしているため、バグは異なるエコシステム間で独立して伝播します。Google は CVSS 4.0 スケールで深刻度 9.2 という「クリティカル」評価を与え、Node.js はこれを「高」と分類し、Red Hat は「重要」と分類しました。根本原因は実際には2月27日に Brotli ソースコードで修正されましたが、開発者が当初これをセキュリティ脆弱性と認識していなかったため、10月21日までリリースされませんでした。

Imperva の Red Team は、Linux ARM64 上で動作する未修正の Node.js 24.22.0 ビルドにおいて、攻撃者が任意のコードを実行できることを実証しました。これは、取得したレスポンスまたは Express リクエストボディを通じて、細工された圧縮データを送信することで達成されました。このエクスプロイトには複数回の試行が必要であり、一般公開されてはいませんが、理論的なリスクが現実的であることが確認されました。この欠陥を報告した OpenAI の Codex Security チームは、問題が双方向で機能することを指摘しています。悪意のあるクライアントはサーバーを侵害でき、悪意のあるサーバーはクライアントを侵害できます。

仕組み

Brotli は Web トラフィックのサイズを削減するために Google が開発した圧縮アルゴリズムです。この脆弱性は、デコーダーにおけるバッファオーバーリードおよびオーバーライトの欠陥です。プログラムが特別に細工された Brotli データを処理すると、デコーダーは割り当てられたメモリバッファの末尾を超えて書き込みを行います。このメモリ破損により、クラッシュ、データ漏洩、または攻撃者制御の命令の実行が発生する可能性があります。バグが基盤となる C ライブラリに存在するため、Google の Brotli コードの脆弱なバージョンに対してリンクまたはバンドルするすべてのソフトウェアはこのリスクを継承します。

露出度は、ソフトウェアが信頼できない Brotli ストリームを積極的にデコードするかどうかに依存します。Node.js と Bun では、Content-Encoding: br を持つレスポンスを取得するために組み込みの fetch() API を使用する場合、または Express 5 や body-parser 2 などのミドルウェアがリクエストボディを解凍する場合に発生します。Python ではリスクがより広範です。Brotli または brotlicffi パッケージがインストールされている場合、requests、urllib3、httpx などの HTTP クライアントは、開発者の明示的な介入なしに Brotli レスポンスを自動的にデコードすることがあります。Envoy や Istio などのインフラツールは、設定で Brotli 解凍が明示的に有効になっている場合にのみ脆弱です。

主要な詳細

  • CVE 識別子: CVE-2026-111497。
  • 影響を受ける Node.js バージョン: 修正前の 22.x、24.x、26.x。20.x 以前はサポート終了です。
  • 修正済み Node.js バージョン: 22.23.4、24.22.1、26.12.1。
  • 影響を受ける Bun バージョン: 1.4.3 以前。1.4.4 で修正。
  • 影響を受ける Python パッケージ: Brotli 1.2.0 以前、brotlicffi 1.2.0.x 以前。それぞれ 1.2.1 および 1.2.1.0 で修正。
  • インフラ: Envoy と Istio は、Brotli 解凍が設定され有効になっている場合にのみ影響を受けます。

なぜ重要なのか

エンジニアリングチームにとって、この脆弱性は推移的依存関係とバンドルされた C ライブラリの隠れたリスクを浮き彫りにします。典型的な JavaScript パッケージの脆弱性とは異なり、この欠陥はランタイム環境そのものに存在します。基盤となる Node.js または Bun ランタイムがパッチ未適用のままでは、package.json の依存関係を更新しても不十分です。さらに、Python 開発者は Brotli ライブラリを直接インポートしない場合でも脆弱である可能性があります。一般的な HTTP クライアントがそれを自動的に取り込むためです。これにより、標準的な依存関係スキャナーがシステムレベルまたは推移的な C バインディングを検査しない場合に見逃す可能性のある、静かな攻撃対象領域が生じます。

修正のリリース遅延は、オープンソースメンテナンスにおけるギャップも強調しています。コード変更は数ヶ月間存在しましたがリリースされず、パッチが作成されていたにもかかわらずシステムは露出状態でした。このシナリオはインシデント対応を複雑にします。チームはパッケージレジストリからの自動アラートだけに頼ることができません。外部データを処理したり他のサーバーへのクライアントとして動作したりするサービスでは、特にランタイムバージョンとコンテナイメージの手動検証が必要になりました。

対処法

  • Node.js を 22.23.4、24.22.1、または 26.12.1 に更新し、Bun を 1.4.4 以降に更新してください。
  • Python の Brotli を 1.2.1 に、brotlicffi を 1.2.1.0 にアップグレードするか、厳密に必要でない限りアンインストールしてください。
  • 更新後、すべてのサービスを再起動し、コンテナイメージを再ビルドしてください。実行中のプロセスは古い脆弱なライブラリをメモリに保持するためです。
  • 即時の更新が不可能な場合は、リクエストがアプリケーションに到達する前に Content-Encoding: br を拒否するようにプロキシを設定してください。
  • HTTP クライアントでの自動 Brotli デコーディングを無効にし、可能な限り Accept-Encoding ヘッダーから br を削除してください。ただし、サーバーが依然として Brotli コンテンツを送信する可能性があることに注意してください。
  • 依存関係スキャナー(Dependabot など)がこの CVE に関連する特定の PyPI パッケージをまだフラグしていない可能性があるため、インストール済みの Python パッケージのバージョンを手動で検証してください。
  • #security
  • #nodejs
  • #python
  • #vulnerability
  • #brotli

Bytechapストアのツール

続きを読む

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

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

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

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

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

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

すべての記事