Modern Frontend CVEs

対象CVE: CVE-2026-62985

[解説] request-filtering-agentのDoS脆弱性 (GHSA-r3r9-wp5j-pq5g / CVE-2026-62985)

`request-filtering-agent` ライブラリのバージョン3.2.0以下において、リテラルなプライベートIPアドレスへのリクエスト時にNode.jsプロセスがクラッシュするサービス拒否(DoS)脆弱性が発見されました。本記事では、この脆弱性の詳細、影響、そしてフロントエンドエンジニアが取るべき対策を解説します。

はじめに:request-filtering-agentとは?

`request-filtering-agent` は、Node.jsアプリケーションが意図しない内部ネットワークやプライベートIPアドレスへのアクセスを行わないようにするためのHTTP/HTTPSエージェントライブラリです。サーバーサイドから外部リソースにアクセスする際に、SSRF(Server-Side Request Forgery)攻撃などを防ぐ目的で利用されます。

例えば、ユーザーから提供されたURLをサーバー側で検証してコンテンツを取得するようなケースで、悪意のあるユーザーが `localhost` やクラウドプロバイダのメタデータサービス(`169.254.169.254`など)を狙ったリクエストを送ることを防ぐために導入されます。これにより、内部システムへの不正アクセスや情報漏洩のリスクを低減します。

脆弱性の概要:なぜNode.jsプロセスがクラッシュするのか?

この脆弱性(GHSA-r3r9-wp5j-pq5g / CVE-2026-62985)は、`request-filtering-agent` の `RequestFilteringHttpAgent` および `RequestFilteringHttpsAgent` において、**リテラルなプライベートIPアドレス(例: `127.0.0.1`, `169.254.169.254`)へのリクエストをブロックする際の非同期処理の不備**に起因します。

通常、Node.jsの `http.request` や `http.get` は、エージェントの `createConnection` メソッドがエラーを発生させる場合、非同期的にエラーイベントを発行し、アプリケーション側の `req.on('error', ...)` ハンドラで捕捉されることを期待します。しかし、この脆弱性のあるバージョンでは、リテラルなプライベートIPホストに対しては `createConnection()` メソッド内で**同期的に `throw` が発生**してしまいます。

この同期的な例外は、`req.on('error')` ハンドラでは捕捉されず、結果としてNode.jsプロセス全体がキャッチされない例外(`uncaughtException`)としてクラッシュしてしまいます。これはサービス拒否(DoS)の状態を引き起こします。

注意点として、`localhost` のように名前解決によってプライベートIPとなるホスト名の場合は、DNSルックアップパスが非同期で処理されるため、この脆弱性の影響は受けず、正しく `req.on('error')` イベントが発行されます。問題となるのは、直接IPアドレスが指定された場合のみです。

概念実証(PoC)コードと結果

以下は、実際にNode.jsプロセスがクラッシュすることを示す概念実証(PoC)コードです。

このコードを実行すると、`req.on('error')` は呼び出されず、`process.on('uncaughtException')` が呼び出されてNode.jsプロセスが強制終了することが確認できます。これにより、サーバーがダウンし、サービスが利用できなくなります。

フロントエンドエンジニアへの影響と対策

フロントエンド開発の文脈で直接 `request-filtering-agent` を使用することは稀かもしれませんが、以下のようなケースで間接的に影響を受ける可能性があります。

攻撃者が、脆弱なBFF層に対してリテラルなプライベートIPアドレスを含むURLを送信することで、そのBFFプロセスをクラッシュさせ、サービス停止を引き起こす可能性があります。これは、システム全体の安定性に大きな影響を与えかねません。

まとめ

`request-filtering-agent` のサービス拒否脆弱性は、Node.jsアプリケーションの安定性に直接影響を与える可能性があるため、フロントエンドエンジニアであってもバックエンドの依存関係に目を光らせることが重要です。

本脆弱性に対応するためには、使用しているライブラリのバージョンを常に最新に保ち、依存関係を定期的に監査する習慣をつけましょう。安全なアプリケーション開発のために、常に最新のセキュリティ情報をキャッチアップし、適切な対策を講じることが不可欠です。

← ブログ一覧に戻る