Modern Frontend CVEs

対象CVE: CVE-2026-19534

[緊急解説] undiciに深刻なDoS脆弱性 - Node.jsプロセス停止のリスクと対応策

Node.jsのHTTP/WebSocketクライアント`undici`に、クライアントが要求していないWebSocketサブプロトコルを受け取るとNode.jsプロセスがクラッシュし、サービス拒否(DoS)を引き起こす深刻な脆弱性(GHSA-rfgv-xxqx-mfg5)が発見されました。Node.jsアプリケーションを運用している場合、直ちに対応が必要です。

はじめに:Node.jsとWebSocket、そしてundiciの脆弱性

日本のフロントエンドエンジニアの皆さん、こんにちは!Node.js環境でアプリケーションを開発・運用している方も多いかと思います。今回は、Node.jsのモダンなHTTP/1.1、HTTP/2、WebSocketクライアントとして広く利用されている`undici`に、非常に深刻な脆弱性が発見されました。この脆弱性(GHSA-rfgv-xxqx-mfg5 / CVE-2026-19534)は、悪意のあるサーバーからの特定の応答によりNode.jsプロセスが強制終了させられ、サービス拒否(Denial of Service; DoS)を引き起こす可能性があります。

`undici`はNode.jsの`fetch` APIの実装としても使われ、多くのフレームワークやライブラリの基盤となっています。そのため、直接`undici`を使用していないプロジェクトでも、間接的にこの影響を受ける可能性があります。特に、Next.jsのAPI RoutesやNuxtのサーバーサイドレンダリングなど、Node.js環境でWebSocket通信を行うアプリケーションを開発・運用している方は、ぜひ最後までお読みください。

脆弱性の概要と影響

この脆弱性は、`undici`のWebSocketクライアントが、サーバーからのWebSocketハンドシェイク応答(`101 Switching Protocols`)に含まれる`Sec-WebSocket-Protocol`ヘッダーを不適切に処理することに起因します。

具体的には、クライアント側がWebSocket接続時に特定のサブプロトコルを要求していないにも関わらず、サーバーが応答ヘッダーに`Sec-WebSocket-Protocol`を含めてきた場合、`undici`クライアントは内部でキャッチされない`TypeError`をスローします。この`TypeError`は`queueMicrotask`コールバック内で発生し、適切な`try`/`catch`ブロックに囲まれていないため、最終的にNode.jsプロセス全体をクラッシュさせてしまいます。

これは、悪意のある攻撃者が制御するサーバー、あるいは中間者攻撃(Man-in-the-Middle)が可能な`ws://`(暗号化されていないWebSocket)接続を介して、ターゲットとなるNode.jsアプリケーションに対してリモートから認証なしでDoS攻撃を実行できることを意味します。アプリケーションがWebSocketを確立しようとした途端、プロセスが強制終了してしまうため、サービスの継続性が脅かされます。

RFC 6455(WebSocketプロトコルの仕様)のセクション4.1では、クライアントが要求していないサブプロトコルがサーバーから返された場合、その接続は失敗するべきであると規定されています。しかし、この脆弱性では接続が失敗するだけでなく、アプリケーション自体がクラッシュしてしまうため、仕様に反する深刻な問題と言えます。

影響を受けるバージョンと対策

この脆弱性の影響を受ける`undici`のバージョンは、**`undici 6.7.0`以降のすべてのリリース**です。

幸い、この脆弱性にはパッチが提供されています。以下のバージョンにアップグレードすることで、この問題は解決されます。

---

✅ **対策済みバージョン**

* `undici 6.28.1`

* `undici 7.29.1`

* `undici 8.10.2`

---

既存のアプリケーションで`undici`を使用している場合は、上記のいずれかのバージョンに速やかにアップグレードしてください。残念ながら、この脆弱性に対する回避策は提供されておらず、**アップグレードが唯一の解決策**となります。

フロントエンドエンジニアが取るべき行動

あなたのプロジェクトが以下のいずれかに該当する場合、この脆弱性の影響を受ける可能性があります。

1. **Node.jsバックエンドで`undici`を直接使用し、WebSocketクライアントとして外部サーバーと通信している。**

2. **Node.jsベースのフレームワーク(例: Next.jsのAPI Routes、Nuxtのサーバーサイドなど)で、WebSocketクライアントとして外部サービスと通信している。** (これらのフレームワークが内部的に`undici`を使用している可能性があります)

3. **開発環境やCI/CDパイプラインで、`undici`を依存関係として持つツールやライブラリを使用している。** (本番環境への直接的な影響は少ないかもしれませんが、開発プロセスに支障をきたす可能性があります)

まずは、プロジェクトの`package.json`ファイルや`package-lock.json` (`yarn.lock`など) を確認し、`undici`が依存関係に含まれているかどうか、そしてそのバージョンが影響範囲内であるかどうかをチェックしてください。もし影響を受けるバージョンを使用している場合は、`npm update undici` や `yarn upgrade undici` などのコマンドで、推奨されるバージョンに更新しましょう。

まとめ

今回の`undici`の脆弱性は、Node.jsアプリケーションの可用性に直接的な脅威を与えるものです。WebSocket通信を利用しているアプリケーションでは、特に注意が必要です。セキュリティは開発ライフサイクルの重要な要素であり、依存ライブラリの定期的な確認と更新は欠かせません。

あなたのNode.jsアプリケーションの安全性を確保するためにも、この脆弱性情報を参考に、速やかに`undici`のバージョンアップを実施してください。不明な点があれば、コミュニティや公式ドキュメントを参照し、適切な対応をお願いいたします。

← ブログ一覧に戻る