Node.js Patches Multiple Vulnerabilities That Enable DoS Attacks and Process Crashes
2026/03/25 CyberSecurityNews — Node.js プロジェクトが 2026年3月24日に公開したのは、Long-Term Support (LTS) ブランチ向けの重要なセキュリティ・アップデートである。Node.js のバージョン v20.20.2/v22.22.2/v24.14.1/v25.8.2 は、TLS エラー処理/HTTP/2 フロー制御/暗号タイミングリーク/パーミッション・モデル・バイパス/V8 ハッシュテーブルの欠陥などの、7 件の脆弱性を修正するものだ。これらの脆弱性の一部は、リモートからのトリガーが可能であり、認証を必要としないものである。

TLS SNICallback 欠陥によるリモート・プロセス・クラッシュ
最も深刻な問題は CVE-2026-21637 (High) であり、同一の識別子を持つ過去の TLS 脆弱性の不完全な修正に起因する。
Node.js の TLS エラー処理において、SNICallback 呼び出しが同期例外から保護されないという問題が生じている。その一方で、ALPN/PSK コールバックは既に修正済みである。
TLS クライアントが想定外のサーバ名を送信すると、例外処理において TLS エラー・ハンドラがバイパスされ、捕捉されなかった例外として伝播されるため、Node.js プロセスがクラッシュする。
今回の修正では、Matteo Collina により SNICallback 呼び出しが try/catch でラップされた。SNICallback が例外を発生させ得る、20.x/22.x/24.x/25.x の TLS サーバが影響を受ける。
HTTP/2 フロー制御エラーによるメモリ・リークと DoS
脆弱性 CVE-2026-21714 (Medium) は HTTP/2 サーバに影響を及ぼすものであり、NGHTTP2_ERR_FLOW_CONTROL エラー・コードの未処理に起因する。
攻撃者は “stream 0” に対して、不正な WINDOW_UPDATE フレームを送信し、接続を繰り返すことによりメモリ・リークを誘発させ得る。それにより、リソースが枯渇し、DoS (denial-of-service) 状態に陥る。
RafaelGSS により、このエラーに関する処理が、Node.js ソース層に追加された。
V8 ハッシュ衝突による HashDoS
脆弱性 CVE-2026-21717 (Medium) は、V8 の文字列ハッシュ機構に影響を及ぼす欠陥である。整数形式の文字列を数値としてハッシュ化するため、衝突の容易な予測が可能となる。
攻撃者は JSON.parse() などを通じて衝突を誘発し、CPU 使用率を増大させることで、HashDoS 攻撃を実行できる。
Joyee Cheung により、deps/build/test レイヤでの修正が実施された。
HMAC 検証におけるタイミング・サイドチャネル
脆弱性 CVE-2026-21713 (Medium) は、Web Cryptography の HMAC 検証におけるタイミング・リークの欠陥である。memcmp() による非定数時間比較により、一致バイト数に応じた処理の時間差が発生する。
高精度な測定環境でタイミング・オラクルとして悪用され、HMAC 推測が可能となる。
Filip Skokan により timing-safe 実装に置き換えられた。
パーミッション・モデル・バイパス
2件の深刻度 Low の脆弱性が修正された。
CVE-2026-21715:”–permission” および、制限付き “–allow-fs-read” 環境で fs.realpathSync.native() を悪用することで、許可外ディレクトリに存在するファイルや、シンボリックリンクの解決が可能になる。
CVE-2026-21716:”lib/fs/promises” におけるパーミッション執行の欠如の問題。
いずれも、RafaelGSS により修正された。
さらに、脆弱性 CVE-2026-21710 に関しては、HTTP ヘッダにおける prototype pollution を修正し、headersDistinct および trailersDistinct に null-prototype オブジェクトを使用するよう変更された。
脆弱性一覧
| CVE | Severity | Component | Impact |
|---|---|---|---|
| CVE-2026-21637 | High | TLS / SNICallback | Remote process crash |
| CVE-2026-21717 | Medium | V8 / JSON parsing | HashDoS / CPU exhaustion |
| CVE-2026-21713 | Medium | Web Crypto / HMAC | Timing oracle / MAC forgery |
| CVE-2026-21714 | Medium | HTTP/2 / nghttp2 | Memory leak / DoS |
| CVE-2026-21710 | Medium | HTTP headers | Prototype pollution |
| CVE-2026-21716 | Low | Permission Model (fs/promises) | Filesystem path disclosure |
| CVE-2026-21715 | Low | Permission Model (realpath) | Filesystem path disclosure |
対策
開発者および管理者は、以下の修正済みバージョンへと、速やかにアップグレードする必要がある。
一連の脆弱性の中で CVE-2026-21637 に関しては、認証不要でプロセス停止を引き起こす可能性があるため、公開 TLS サーバ環境においては、最優先で対応すべきである。
Windows/macOS/Linux/AIX 向けのインストーラ/バイナリが、公式 Node.js 配布チャネルから提供されている。
Node.js プロジェクトが 2026年3月24日に公開した、Long-Term Support (LTS) ブランチなどの重要なセキュリティ・アップデートについて解説する記事です。今回の修正では、リモートからの認証を必要としない攻撃を引き起こすものから、特定の条件下で発生するマイナーなものまで、計 7 件の脆弱性が対処されました。
最も警戒すべきは、深刻度 High と評価された TLS 処理の脆弱性 CVE-2026-21637 です。この問題は、TLS 通信の開始時にサーバ名を確認する SNICallback 手続きにおいて、例外処理が適切に行われていなかったことに起因します。攻撃者が想定外のサーバ名を送りつけるだけで、Node.js プロセスをクラッシュさせることが可能なため、公開サーバを運用している環境では最優先の対応が求められます。よろしければ、Node.js での検索結果も、ご参照ください。
You must be logged in to post a comment.