google-site-verification=tSMQ4FQhFx1RDsDFsOm7hyKcAa8tJgpr-DpePxzfGzM Node.jsの脆弱性10件、brotliの1件を原典で読む | 見出しの手前

Node.jsの脆弱性10件、brotliの1件を原典で読む

Close-up of artisan bread loaves with flour on a dark surface, highlighting texture and freshness. バズ

10月、Node.jsプロジェクトが3つのリリースラインに同時にセキュリティ修正版を出しました。国内ポータルに載った見出しは「全体での脆弱性を修正」という合計の件数を前に出しています。一方で、検索で関心を集めた語は見出しに入っていない「brotli」でした。本稿ではNode.js公式のセキュリティ告知と各版の変更履歴に当たり、「」が何を数えた数か、brotliのが原典でどう書かれているかを確認します。

何が報じられたか

au Webポータルに掲載された記事見出しは、Node.jsが「22.23.4」「24.22.1」「26.12.1」を配信し、「全体での脆弱性を修正」したという内容です。見出しに出ているのは、3つの版番号と合計件数の2種類の情報です。

発表元はNode.jsプロジェクトで、公式ブログのセキュリティ告知「October 2026 Security Releases」の公開日は10月です。同じ日付で3版のリリースノートも公開されています。22.23.4と24.22.1は長期サポート版、26.12.1は最新版です。

なお、ポータルの転載ページで取得できたのは見出しと配信元の表示だけで、本文の詳細は確認できませんでした。そのため、本稿で比べる対象は見出しの文言に限ります。

原典に当たる

公式のセキュリティ告知は、修正した脆弱性をのCVE番号一覧にし、それぞれに深刻度と影響するリリースラインを付けています。深刻度の内訳はHIGHが、MEDIUMが、LOWがです。

HIGHのは次のとおりです。

  • CVE-: dns.resolve()がNUL文字を含む名前を途中で切る。影響は26.x・24.x・22.x
  • CVE-: 全角数字で書かれたIPアドレスで、TLS証明書のホスト名検証をすり抜けられる。影響は26.x・24.x
  • CVE-: 先頭にゼロが付いたIPv4表記で、同じく検証をすり抜けられる。影響は26.x・24.x・22.x
  • CVE-: 同梱しているBrotliデコーダの範囲外書き込み。影響は26.x・24.x・22.x

Brotliは圧縮形式の名前で、Node.jsは標準モジュールnode:zlibの中にその伸長処理を同梱しています。告知によると、不正なブロック切り替えが「恒久的な形式エラー」ではなく「入力がまだ足りない」という一時的な状態として扱われていました。その結果、ストリーム型のデコーダが8バイトの内部バッファに入力を書き足し続け、バッファの末尾を越えて書き込みます。告知は起こりうる結果として、プロセスのクラッシュ、メモリ内容の漏えい、遠隔からのコード実行を挙げています。成立する条件は、攻撃者が用意したBrotliデータをアプリケーションがnode:zlibで伸長することです。報告者はOpenAI Codex Securityのと記載されています。

修正は、Brotliの開発元であるgoogle/brotliのコミット0ed4268を取り込む形で行われました。このコミットの題は「Detect and report invalid stream earlier.」です。ブロック切り替えの処理が真偽値ではなくエラーコードを返すように改められ、新しいエラーコードBROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH追加されています。Node.js側にも、このエラーコードを公開する変更が同じ修正単位で入っています。

告知はこのほか、eMudhraの中間認証局の侵害に対応するCA証明書の更新と、サポート終了版は常に影響を受けるという注意書きを載せています。

報道との差分

見出しの「全体で」は告知の一覧の件数と一致しています。ただし、すべてを含む版は1つだけです。告知の影響範囲の欄から版ごとに数え直すと、次のようになります。

リリースライン 告知で影響ありとされた件数 差の内訳
26.x 全件
24.x 26.x専用のLOW 除く
22.x さらにHIGHのCVE-を除く

つまり「」は3つのラインの合計で、LTS版を使っている人に関係するのはかです。見出しの「全体で」という語がこの区別を担っていますが、版ごとの数までは示していません。

深刻度の表記にも、原典どうしの差があります。告知はCVE-をMEDIUMとしています。ところが3版の変更履歴では、CVE-とCVE-が「tls: reject non-canonical IP addresses」という1行にまとめられ、行末に「High」と付いています。変更履歴だけを見てHighの行に載った番号を数えるとになり、告知のと合いません。件数の正本は、番号ごとに深刻度を付けている告知の側です。

選択・省略・強調の3点で整理すると、見出しは版番号と合計件数を選び、個別の内容を省略しています。告知が唯一、遠隔からのコード実行の可能性を明記した項目はBrotliのですが、その名前は見出しにありません。

なぜそうなったか

見出しの形は、資料の構造から説明できます。告知は冒頭で「26.x、24.x、22.xの各ラインに更新が出た」と述べ、そのあとにの一覧を並べています。読者が最初にすべきことは自分の版を上げることなので、版番号と総数を前に出す見出しは、この構造をそのまま要約した形になります。の中身は、DNS、TLS、HTTP、暗号、権限モデル、ZIP、Brotliと7つの領域に分かれていて、1つの語でまとめられません。

それでもbrotliが検索語として残ったのは、告知の中でこのだけ性質が違うからだと考えられます。ただし、検索した人の動機は資料からは確認できません。ここで言えるのは資料の側の事実です。HIGHののうちは証明書検証や名前解決の取り違えですが、Brotliの件だけが「遠隔からのコード実行」を結果に挙げています。さらに条件が「外から受け取った圧縮データを伸長する」ことなので、HTTPのContent-Encodingを扱うサーバーやプロキシなど、自分の用途に当てはまるかを調べる必要が生じやすい項目です。

もう1つの構造上の要因は、修正の出どころがNode.jsの外にあることです。変更履歴の該当行は「deps: brotli: cherry-pick」、つまり依存ライブラリへの上流修正の取り込みとして書かれています。同じBrotliのデコーダを組み込んだ他のソフトにも同じ欠陥があるのかという問いは、Node.jsの告知だけでは答えが出ず、ライブラリ名での検索に向かいます。ただ、この見立てを裏づける検索データは取得していないため、推測にとどまります。

変更履歴と告知で深刻度がずれた件は、変更履歴が「修正につき1行」で書かれていることから説明できます。1つの修正が2つのCVEを同時に塞いだため、2つの番号が1行にまとめられ、その行の深刻度には高いほうが付いたと読めます。これは資料の書式から読み取った説明で、Node.js側がそう説明した記述は見つかっていません。

分からなかったこと

GIGAZINEの元記事の本文は取得できず、本文でBrotliにどこまで触れていたかは確認できませんでした。比較は見出しに限っています。26.12.1の変更履歴の主要変更欄では、告知が26.x専用とするCVE-の番号を確認できませんでした。各CVEのCVSS値告知の取得範囲に載っておらず、本稿では書いていません。上流のBrotliが修正を含む正式リリースを出したか、他のソフトが影響を受けるかは調べきれていません。検索量の推移の元データも未確認です。

出典

  • Node.js公式ブログ「October 2026 Security Releases」10月 https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
  • Node.js公式ブログ「Node.js 26.12.1 」10月 https://nodejs.org/en/blog/release/v26.12.1
  • Node.js公式ブログ「Node.js 24.22.1 」10月 https://nodejs.org/en/blog/release/v24.22.1
  • Node.js公式ブログ「Node.js 22.23.4 」10月 https://nodejs.org/en/blog/release/v22.23.4
  • google/brotli コミット0ed4268「Detect and report invalid stream earlier.」 https://github.com/google/brotli/commit/0ed4268a4401abcb44720963
  • au Webポータル「Node.jsがセキュリティアップデートで…全体での脆弱性を修正」 https://article.auone.jp/7e67b70c-cd8a-4971-b79b-3a1165016edf
※本記事は報道・公開情報をもとに作成した速報であり、内容が後に更新・訂正される場合があります。最新かつ正確な情報は、一次情報や公式発表をご確認ください。

コメント

タイトルとURLをコピーしました