Node2Shell が HTTP2Shell に進化し、影響範囲が多くの HTTP ライブラリとアプリに及ぶ

2026/10/24 17:06

Node2Shell が HTTP2Shell に進化し、影響範囲が多くの HTTP ライブラリとアプリに及ぶ

RSS: https://news.ycombinator.com/rss

要約▶

Japanese 翻訳:

「node2shell」という名称の重大なセキュリティ脆弱性(CVE-2026-111497)は、数千のシステムを任意の実行コード、深刻なクラッシュ、およびメモリリークという直ちにリスクに晒しています。この欠陥は、Node.js、Python、Envoy、および Istio 全体にわたる Brotli デコンプレッションライブラリ内に存在します。攻撃者は、悪意を持って作成された圧縮された Brotli データをシステムに投入することで、これらの問題をトリガーできます。問題は、

DecodeBlockTypeAndLength()
内の不適切な処理によりデコーダーが過剰なデータを処理してしまう境界外書き込みエラーに起因しており、これにより CVSS v4.0 スコアは 9.2(Critical)という高い深刻度スコアとなっています。

OpenAI は 2 月にこのコードを特定し修正しましたが、パッチの出荷までの遅延により多くのプロジェクトが脆弱なまま残りました。Apache の標準 mod_brotli や Brotli をデフォルトでデコードしない特定のサーバーモジュールは影響を受けませんが、人気の HTTP クライアントは隠れた依存項としてこれらの壊れたバージョンを自動的に読み込む傾向にあります。影響を受けた Python パッケージには、Brotli(バージョン ≤1.2.0)および brotlicffi(バージョン 1.2.0.x)が含まれ、requests、httpx、aiohttp、urllib3、Scrapy など多くのクライアントがこれらを移行型依存項として読み込んでいます。

システムを安全に保つために、管理者は Envoy(≥1.37.8;補正は適用されていますが 1.36 はサポート停止中)や Istio(≥1.29.9;1.29 ブランチはライフサイクル終了済みであることに注意)などのライブラリを緊急にアップグレードする必要があります。Node.js については、バージョン 22.23.4、24.22.1、または 26.12.1(または新しいサポートされているリリース)へのアップグレードが必要です。libbrotli/Google Brotli については、バージョン 1.2.1 以降を推奨します(古いラインではパッチ済み 1.0.10 または 1.1.1 を使用しています)。Python については、Brotli を 1.2.1 に、brotlicffi を 1.2.1.0 にアップグレードした後、コンテナイメージを再構築し、依存関係ロックファイルを再生成する必要があります。Bun については ≥1.4.4 へのアップグレードが必要です。

自動ツールの適切な検出が可能になるまで(例として、pip-audit、Dependabot、Safety は 10 月 23 日時点では脆弱な PyPI パッケージをフラグせず、これは advisory データベースが CVE とのマッピングを行っていないためです)、手動チェック(

pip show
)は不可欠です。パッチが利用できない場合の回避策としては、Python で Brotli/brotlicffi をアンインストールする(httpx[brotli] のようなオプション依存項を削除)、Brotli デコーディングを無効化、リバースプロキシ/ロードバランサーで
Content-Encoding: br
を拒否し、
Accept-Encoding
ヘッダーから
br
を削除することが挙げられます。アップストリームによる技術的修正は、Google Brotli のコミット
0ed46268
において、
DecodeBlockTypeAndLength()
の戻り値の動作を変更し、形式エラーに対して境界外書き込みを引き起こすのではなく、デコーディングを停止させるためのエラーコード
BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH (-17)
を導入しています。

本文

CVE-2026-111497「node2shell」:Brotli デコーダー脆弱性に関する勧告

概要と緊急対応 ⚠️

  • Brotli は Google が開発する広く利用されている圧縮ライブラリです。
  • 2026 年 10 月 21 日(水): NodeJS において CVE-2026-111497(「node2shell」)が発覚し、Brotli データのデコード時にメモリリークや任意コード実行が可能になることが判明しました。
  • 2026 年 10 月 22 日(木): Python のパッケージでも影響が確認されました。
  • 2026 年 10 月 23 日(金): NodeJS、Python、C++ など多様な言語および HTTP サーバーに影響し、全環境で即座にパッチが利用可能にはなっていません。

直ちに実施すべき対応

  • 依存関係の確認: Brotli をデコードするライブラリやパッケージの存在を確認してください。
  • 警戒体制の強化: 脆弱性の影響範囲を広げる報告が続くため、即座にアップグレード可能な準備を完了させてください。
  • 緩和策(Mitigation): パッチが入手できない場合は、パッチ適用までの間はBrotli のデコード機能を無効化してください。

更新タイムライン(太平洋時間 PT)

  • 4:12 PM PT:
    libbrotli
    、Python、C++、NodeJS、bun、Envoy などに対してパッチが利用可能になりました。
    • 備考:Apache および Nginx はデフォルトで Brotli をデコードしないため影響はありません。
  • 4:15 PM PT: OpenAI から同脆弱性が 2026 年 2 月に発見されていたことが発表されました。当時はソースコード内で修正されたものの、セキュリティ上の問題であるとして認識されていませんでした。

Brotli とは?

  • Google が開発したロスレス圧縮アルゴリズムおよびデータ形式です。
  • データの保存サイズ削減やインターネット伝送効率化に使用されます。
  • HTTP 圧縮において広く利用され、HTML、CSS、JavaScript などのウェブコンテンツを圧縮します。

CVE-2026-111497 の概要

  • タイプ: Brotli デコーダーにおけるバウンドアウトオブ(Out-of-bounds)書き込み。
  • 影響範囲: 全プラットフォームにおいて、バージョン 1.0.3 から 1.2.0 まで脆弱です。
  • 重大度: CVSS v4.0 スコア 9.2(Critical)。
  • 悪用可能インパクト: リモートかつ未認証の攻撃者は、改ざんされた Brotli 圧縮ストリームを送信することで以下の行動が可能です。
    • メモリ汚染
    • 機密データの漏洩
    • プロセスの停止(DoS)
    • 任意のコードの実行
  • 根本原因: 2026 年 2 月のソースコード修正(コミット 0ed468)で解決されましたが、当初はセキュリティ問題として認識されず、脆弱性を公開するまで修正済みリリースが提供されていませんでした。

影響を受ける環境

Brotli 1.2.0 以前 または brotlicffi 1.2.0.x を使用しているあらゆる環境が暴露されています。

  • 主要な HTTP クライアント(
    requests
    、
    httpx
    、
    aiohttp
    )は、これらのパッケージが存在する場合は自動的に読み込みます。

是正戦略

  • アップグレード: Brotli
    1.2.1
    または
    brotlicffi 1.2.1.0
    へ移行するか、該当バージョンをバンドルしたコンテナイメージへの再構築が必要です。
  • ツールの制限: 10 月 23 日時点では、勧告データベースが CVE を特定の PyPI パッケージにマッピングしていない可能性があるため、
    pip-audit
    、
    Dependabot
    、
    Safety
    などのツールで即座に検知されない場合があります。

パッチ状況:修正済みリリース(2026 年 10 月 23 日確認)

プロジェクトパッチ状況修正済みバージョン備考
Node.js✅ 利用可能
22.23.4
、
24.22.1
、
26.12.1
サポートされているリリースラインを使用してください。
Bun✅ 利用可能
1.4.4
Brotli 1.2.1 を含む。
Envoy✅ 利用可能
1.40.0
、
1.39.3
、
1.38.6
、
1.37.8
1.36.12
も修正を含むが、ブランチはサポート終了(EOL)。
Istio✅ 利用可能
1.29.9
、
1.30.6
、
1.31.2
1.29 ブランチは EOL。サポートラインへ移行してください。
Google Brotli (Upstream)✅ 利用可能
1.0.10
、
1.1.1
、
1.2.1
ライブラリのブランチに対応する修正済みリリースを選択してください。

言語/フレームワークごとのアップグレードパス

  • Node.js:
    22.23.4
    、
    24.22.1
    、または
    26.12.1
    へアップグレードしてください。
    • Native Brotli / libbrotli:
      1.2.1
      以降へのアップグレードが必要です(古いライン:修正済み
      1.0.10
      または
      1.1.1
      を使用)。
  • Python:
    • Brotli
      :
      1.2.1
      以降へ。
    • brotlicffi
      :
      1.2.1.0
      以降へ。
    • バンドル済みまたは静的にリンクされた場合はアプリケーションの再ビルドが必要です。
  • curl / libcurl: Brotli 依存関係を
    1.2.1
    または修正済みリリース、あるいはベンダーからのセキュリティ修正済みパッケージへ更新してください(静的ビルドの場合は再コンパイル必要)。
  • Bun:
    1.4.4
    以降へアップグレードし、コンパイル済み実行ファイルを再構築してください。
  • Envoy / Istio: 上記テーブルのバージョンへ更新してください。
  • OS パッケージ: ベンダーのセキュリティアップデート(SUA)を適用してください。
  • その他の HTTP サーバー/API ゲートウェイ: ランタイムまたは Brotli ライブラリを更新してください(マネージドサービスの場合は提供元に是正確認を依頼)。

アップグレード後のチェックリスト

  1. 依存関係ロックファイルの更新。
  2. 影響を受けるアプリケーションとコンテナイメージの再構築。
  3. サービスの再デプロイおよび再起動。
  4. 実行中のワークロードが修正済みコンポーネントを使用しているかの確認。

アップグレード不能場合のための緩和策(ワークアラウンド)

パッチ適用までの間、暴露リスクを低減するための対応です。

Python アプリケーション

  • オプショナルな Brotli サポート: 影響を受ける環境から
    Brotli
    および
    brotlicffi
    をアンインストールしてください。
    • 依存関係のエキストラ(例:
      httpx[brotli]
      )を除去し、自動再インストールを防いでください。
    • 依存関係ロックファイルを再生成し、ワークロードを再起動してください。
    • 備考:
      HTTPX
      、
      Requests
      、
      urllib3
      は Brotli を除外しても gzip/deflate で動作します。ただし、Brotli を送信するサーバーとの通信は破綻する可能性があります。
  • ワークロードの再起動: 脆弱なデコーダーを使用する入出力(I/O)経路を無効化します。注意: 他のランタイムや製品にバンドルされている別個のデコーダーには影響しません。

入る HTTP リクエスト(リバースプロキシ / ミドルウェア)

  • Brotli リクエスト拒否: 構成を変更し、
    Content-Encoding: br
    ヘッダーを含むリクエストを拒否してください。
    • タイミング: 脆弱なデコーダーがボディを処理する前にチェックを実行してください。

出る HTTP リクエスト(レスポンス)

  • Brotli ヘッダーの除去:
    Accept-Encoding
    ヘッダーから
    br
    を削除してください。
  • 応答の拒否: Brotli 応答デコードを無効化するか、
    Content-Encoding: br
    を持つ応答を拒否してください。
    • 警告:
      Accept-Encoding
      の変更だけでは不十分です。悪意のあるサーバーはそれでも Brotli 応答を送信でき、クライアントが強制デコードを行う可能性があります。

重要: 影響を受けるコンポーネントがパッチ適用済みで検証されるまで、これらのコントロールを維持してください。ベンダーが確認に従って追加の影響があるか監視してください。


テクニカル詳細:仕組み

  • 位置: 欠陥は
    DecodeBlockTypeAndLength()
    にあり、ブロックスイッチ(ストリームがハフマンツリーを変更する箇所)を処理します。
  • 脆弱な振る舞い: 脆弱なバージョンでは、この関数が単純なブール値を返し、
    BROTLI_FALSE
    が「破損」かつ「入力不足」の両方の意味を持ちます。呼び出し元は通常、高速パスでこの戻り値を無視します。
  • 悪用: 攻撃者はブロックタイプと長さを宣言し、デコーダーにエラーを強制します。デコーダーはこれを「正常な入力不足」と解釈して処理を続け、バウンドアウトオブ書き込みが発生します。
  • 修正(google/brotli コミット 0ed468): 関数は現在エラーコードを返し、
    BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH (-17)
    を導入しました。これにより安全かつ高速なパスの両方で形式エラー時にデコードが停止します。
    • Brotli 1.2.1 と 1.2.0 の主な違いはバージョンアップとこのデコーダー修正です。

Python 特有:CVE-2026-111497

影響を受けるパッケージ

NodeJS で使用される脆弱なデコーダーをコンパイルする 2 つの PyPI パッケージがあります。

  • ダウンロード数:
    Brotli
    は月間約8,280 万回ダウンロードされています。
  • トリガー: 攻撃者はレスポンス(出る)またはリクエストボディ(入る)を通じてデコーダーに到達できます。HTTP クライアントエキストラ経由で間接的に使用される場合、明示的にインポートしていないアプリケーションも暴露されます。

誰が影響を受けるか?

Python 環境に以下のいずれかがインストールされている場合です:

  • Brotli
    (PyPI):バージョン 1.2.0 以前
  • brotlicffi
    (PyPI):バージョン 1.2.0.x

自動的な影響を受けるクライアント(パッケージが存在する場合):

  • urllib3
    /
    requests
  • httpx
    (brotli エキストラあり)
  • aiohttp
  • Scrapy
    (および派生版)

Python への是正手順

  1. パッケージのアップグレード:
    pip install -U "Brotli>=1.2.1"
    pip install -U "brotlicffi>=1.2.1.0"
    
  2. ロックファイルの更新: Poetry、
    uv
    、または
    pip-tools
    を使用している場合は、制約を更新しロックファイルを再生成してください。
  3. イメージの再構築: これらパッケージをバンドルしたコンテナイメージとホイールを再構築してください。古いイメージは脆弱です。
  4. 環境の確認: すべての環境(ラップトップ、CI ランナー、サーバー、コンテナ)を確認してください。

検証チェックリスト

  • インストール済みバージョンの確認:
    pip show Brotli brotlicffi
    
  • コンテナイメージの確認:
    docker run --rm <image> pip show Brotli brotlicffi
    
  • 依存関係の追跡:
    pipdeptree -r -p Brotli
    
  • ロックファイルでの検索:
    grep -i brotli poetry.lock uv.lock requirements*.txt
    

FAQ: Python 脆弱性について

Q: CVE-2026-111497 を修正するバージョンはどれですか? A:

Brotli
1.2.1
と
brotlicffi
1.2.1.0
(およびそれ以降)。

Q: コードで Brotli をインポートする必要がありますか? A:いいえ。インストール済みパッケージだけで十分です。HTTP クライアントである

urllib3
および
httpx
は、これらのパッケージが存在する場合自動的に使用します。

Q: pip-audit や Dependabot でフラグされますか? A:現時点では(10 月 23 日時点)、OSM が PyPI へのマッピング作業を行っているため、まだフラグされない可能性があります。

Q: ワークアラウンドはありますか? A:

Brotli
および
brotlicffi
をアンインストールすると脆弱なデコーダーを除去でき、HTTP クライアントは gzip/deflate にフォールバックします。エッジで Brotli を拒否することは入る暴露を軽減しますが、Brotli を含む出庫応答に対する保護にはなりません。

同じ日のほかのニュース

一覧に戻る →

2026/10/25 8:11

米国のメディア・映画・芸術分野で20万人の雇用が失われた。その内訳はいくらなのか?AIの影響はどれくらいか?

## Japanese Translation: ## サマリー: 米国のクリエイティブ産業は歴史的な縮小に直面しており、雇用喪失の規模は 2001 年および 2008 年の不況と匹敵する深刻さです。この減少の主因は、映画制作、サウンド録音、出版セクターにおける大規模なリストラにあります。ハリウッドだけで 4 年で 10 万超の雇用を失い、同セクター全体の雇用の約3分の1となり、総雇用数は 2008 年以来の水準に後退し、30 年ぶりの低水準に近づいています。同様の期間中に記述出版物は約 7 万の雇用を喪失し、デジタルアートの各サブセクターも減少を続けており、特に新聞社のスタッフ数は 90 年代以降に 85% も減少し、雑誌出版業者は同期間でスタッフの 66% を失っています。ツアーや物理メディア販売によって支えられていた過去の時代とは異なり、現在のストリーミング収益では以前ほどの水準には達せず、音楽業界もそのビジネスモデルをシフトさせています。この経済的後退に拍車をかけているのは人工知能技術の戦略的な転換です。これらの労働者の約 32% がすでに生成型 AI を利用しているにもかかわらず、画像、映像、音楽生成などの高コスト分野では数学や科学への投資と比較して経済的リターンが低いため、テックセクターはそうした分野から撤退しており(アンソルピックなどで見られるように)、AI ツールによる迅速な回復は短期間で望むことはできず、伝統的なアートの労働力にとって長引く課題を示唆しています。さらに状況は複雑化しており、2022 年のテック雇用の増加が約 30 万でしたが、それ以降毎年雇用を喪失し続けており、これらのデジタルの逆風にもかかわらず対面エンターテインメントは引き続き成長しているという事実が加わっています。

2026/10/25 6:47

構築するソフトウェアに対し、より雄大であるべきです

## 日本語訳: 本件の核心メッセージは、高度な AI ツールを利用する個人が、大規模資金調達なしに高パフォーマンスで影響力のあるソフトウェアを構築できる可能性を示しており、「vibeslop」や低品質な AI 出力に対する懐疑論に挑戦している点です。具体的な証拠としては、Michael Malis の pgrust プロジェクトがあり、これは PostgreSQL に重大なバグ(SP-GiST、JSONPath、pgcrypto、メモリ安全性)を発見しており、メインプロジェクトが成功しない場合でもその最適化は Clickhouse などの主要システムを採用される可能性があります。パフォーマンスは重要な推進力であり、AI モデルは今や数年を要する論文やコードベースからの複雑な技術(例:カスタムレギュラー表現式エンジン、ボードゲーム AI、IMAP RFC 処理)を数時間以内に実装しており、Ripgrep 検索、Rust コンパイル、ファイルシステムオーバーヘッドなどのタスクにおけるボトルネックを大幅に減少させています。大規模な研究所が SOTA モデルのために高価なハードウェアを使用する一方、独立した取り組みは AI が検証および実装可能な能力の差が広がっていることを証明しており、これによりエンジニアリング課題への挑戦が最小限のオーバーヘッドで行えるようになり、データベースおよびツールエコシステムにおける漸進的な進展を促進しています。

2026/10/25 4:06

Goose プログラミング言語

## 日本語訳: Goose は、動的値をコンパイラ管理のスタック上にインライン保持することで、ヒープ割当とガベージコレクションを排除し、メモリ安全性を実現するシステム言語です。リソースの解放は手動のデアロケーションではなくスコープ終了経由で行われ、単一スタックメモリモデルによって再割当なしでの成長がサポートされ、参照がポインタが進むにつれて拡大する配列内を維持します。コンパイラはすべての参照に対する静的ルートを自動的に推論し、所有者よりも長生きする可能性があるものは却下し、ライフタイムアノテーションやアンセーフブロックの必要はありません。 パフォーマンスベンチマークでは、Goose が標準的な C++、手動最適化された C++、そして安全な Rust に比べて速度とメモリ使用量でともに優れています:標準的な C++ の場合最高 3.3 倍高速に動作し、メモリ使用量は約半分(1.9 倍削減)です。アーキテクチャ上の革新であるバリアントモード enums(各バリアントの正確なサイズを格納)、ナローリンク(位置非依存参照のために 1/2/4 バイトのオフセットを使用)、およびインプレース構築は、オーバーヘッドが著しく低い連続したネスト型データ構造を可能にします。エラーは関数フレーム間を静的に返すことができ、アンワインダーや Result タイプを必要とせず、スレッドは分離されたメモリ空間で動作し、memcpy によってフラットな値が転送されることでデータ競合とロックを回避します。全体として、Goose は組み込みシステムや高频度取引といったクリティカルドメインにおいて高いパフォーマンスと安全性を提供するとともに、開発ライフサイクルを簡素化します。

Node2Shell が HTTP2Shell に進化し、影響範囲が多くの HTTP ライブラリとアプリに及ぶ | そっか~ニュース