Modern Frontend CVEs

対象CVE: CVE-2026-9697

[解説] undiciのSOCKS5プロキシ脆弱性: TLS検証が無視される危険性 (GHSA-vmh5-mc38-953g)

`undici`を使ってSOCKS5プロキシ経由でHTTPS通信を行う際、開発者が設定したTLS証明書検証オプションが意図せず無視され、中間者攻撃 (MITM) により通信が盗聴・改ざんされる危険性がある脆弱性について、フロントエンドエンジニア向けに解説します。

はじめに:`undici`とフロントエンド開発

Node.jsアプリケーションでHTTP通信を行う際のデファクトスタンダードの一つである`undici`は、Next.jsのAPI Routesやサーバーサイドレンダリング(SSR)、ビルドツールなど、バックエンド寄りの処理に関わるフロントエンドエンジニアにとっても馴染み深いライブラリです。効率的なHTTP/1.1およびHTTP/2クライアントとして、日々の開発を支えています。

今回ご紹介する脆弱性「GHSA-vmh5-mc38-953g / CVE-2026-9697」は、この`undici`の特定の利用シナリオにおいて、重要なセキュリティ機能が正しく動作しないというものです。深刻度はHighとされており、早急な対応が求められます。

脆弱性の概要と具体的な影響

この脆弱性は、`undici`の`ProxyAgent`をSOCKS5プロキシ(`socks5://`または`socks://`スキーム)と組み合わせてHTTPS通信を行う場合に発生します。通常、開発者は`requestTls`オプションを使って、信頼するカスタムCA証明書を指定したり、自己署名証明書を拒否する`rejectUnauthorized: true`といった厳格な設定を行いますが、このオプションがSOCKS5プロキシ使用時に完全に無視されてしまうのです。

結果として、Node.jsのデフォルトの信頼ストア(一般的な公開Mozilla CAバンドル)が代わりに使われてしまいます。これはつまり、本来であれば社内CAによって発行された特定の証明書のみを信頼するはずが、公開CAが署名した任意の証明書を受け入れてしまう状態に陥ることを意味します。

この問題により、セキュアであるべきHTTPS通信において、第三者が中間者として介入し、通信内容を盗聴したり、不正に改ざんしたりする「中間者攻撃(Man-in-the-Middle, MITM)」が可能になってしまいます。特に、企業内の厳格なセキュリティポリシー下で`requestTls`オプションに依存しているシステムにとっては、極めて深刻なリスクとなります。

影響を受ける環境と確認方法

この脆弱性の影響を受けるのは、`undici`のバージョン`7.23.0`以降を使用しており、かつ以下の条件を満たすアプリケーションです。

1. `ProxyAgent`(または`Socks5ProxyAgent`)をSOCKS5プロキシと共に使用している。<br>2. `requestTls`オプションでTLS接続のセキュリティ制限(例:特定のCA証明書のみを信頼する、自己署名証明書を拒否する)に依存している。

あなたのプロジェクトで`undici`が使われているか、そしてSOCKS5プロキシ経由でHTTPS通信を行っているかを確認してください。`package.json`の依存関係や、ソースコード内の`new ProxyAgent('socks5://...')`や`undici.request('https://...', { dispatcher: new ProxyAgent('socks5://...') })`のような記述をチェックすることが重要です。

最優先の対応策:速やかなアップグレード

この脆弱性に対する最も効果的かつ推奨される対応策は、`undici`を安全なバージョンにアップグレードすることです。

**`undici`をv7.28.0またはv8.5.0以上にアップグレードしてください。**

`package.json`の`dependencies`または`devDependencies`を確認し、該当する場合は以下のコマンドでアップデートを実行しましょう。

```bash npm install undici@latest # または yarn upgrade undici --latest ```

アップデート後には、意図した通りのTLS検証が機能しているか、必ずテストを実施してください。特に、カスタムCA証明書や`rejectUnauthorized`オプションが期待通りに適用されているかを確認することが重要です。

一時的な回避策(アップグレードが困難な場合)

もし何らかの理由で`undici`のアップグレードがすぐにできない場合、一時的な回避策を検討する必要があります。

SOCKS5プロキシが必須であり、かつTLSのセキュリティ制限も厳密に適用する必要がある場合は、SOCKS5プロキシの代わりにHTTPプロキシの`ProxyAgent`を使用することを検討してください。HTTPプロキシを使用するシナリオでは、`requestTls`オプションが正しく機能することが確認されています。ただし、HTTPプロキシへの移行が技術的・運用的に可能か、慎重に検討が必要です。

まとめ

`undici`のSOCKS5プロキシ利用におけるTLS検証設定無視の脆弱性は、中間者攻撃を可能にする深刻な問題です。Node.js環境で動作するフロントエンドアプリケーションにおいても、API連携やSSRなど、様々な場面で影響を受ける可能性があります。

あなたのアプリケーションのセキュリティを守るため、**直ちに`undici`を安全なバージョン(v7.28.0またはv8.5.0以上)にアップグレード**することを強く推奨します。セキュリティは、堅牢なシステムを構築するための基盤であり、常に最新の状態を保つ意識が重要です。

← ブログ一覧に戻る