[緊急解説] undiciに深刻なDoS脆弱性 - 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`のバージョンアップを実施してください。不明な点があれば、コミュニティや公式ドキュメントを参照し、適切な対応をお願いいたします。