[解説] fast-uriの重大なホスト混同脆弱性(CVE-2026-13676)について
はじめに:`fast-uri`の深刻な脆弱性とは?
日本のフロントエンドエンジニアの皆さん、こんにちは。今回は、URIのパースと正規化を高速に行うライブラリとして利用されている`fast-uri`に発見された、深刻度「High」の脆弱性(CVE-2026-13676 / GHSA-4c8g-83qw-93j6)について解説します。この脆弱性は、特にNode.js環境で`fast-uri`を用いてURLの検証やルーティングを行っているアプリケーションに大きな影響を及ぼす可能性があります。具体的には、Unicode(国際化ドメイン名、IDN)形式のホスト名が正しく正規化されないことで、想定外の挙動やセキュリティポリシーの迂回を引き起こす危険性があります。
脆弱性の詳細:なぜホスト名が混同されるのか?
`fast-uri`のバージョン`>= 2.3.1, <= 4.0.0`には、URL中のUnicode/IDNホスト名をASCII形式に正規化する処理に問題がありました。通常、`http://example.jp`のようなドメインはそのまま利用されますが、`http://xn--example-jp/`のようにASCII互換表現に変換されるドメインや、`http://127。0。0。1/`のように非ASCII文字を含むホスト名(punycode化されていない形式)が存在します。本来、これらは正しくASCII形式に変換され、一般的なURLパーサー(Node.jsのWHATWG URLパーサーなど)では`http://127.0.0.1/`のように正規化されます。
しかし、`fast-uri`の当該バージョンでは、IDN変換パスでグローバルなWHATWG `URL`コンストラクタ上に存在しない`URL.domainToASCII(...)`を呼び出そうとします。これにより`TypeError`が発生しますが、このエラーはサイレントに処理され、`parsed.error`にルーティングされるだけで、`parse()`、`normalize()`、`equal()`といった主要な関数はホスト名を元のUnicode形式のまま返してしまいます。結果として、`fast-uri`は`http://127。0。0。1/`をホスト`127。0。0。1`として認識し続け、Node.jsのネイティブなURLパーサーや`fetch()`がこれを`127.0.0.1`と認識するとの間に「認識のズレ」が生じるのです。
フロントエンド開発における影響シナリオ
このホスト名の認識のズレは、アプリケーションに以下のような深刻なセキュリティリスクをもたらす可能性があります。
<ul><li><strong>セキュリティポリシーの迂回(Bypass)</strong>: アプリケーションが特定のホストへのアクセスを拒否する「デナイリスト(Denylist)」を`fast-uri`で実装している場合、IDN形式で迂回される可能性があります。例えば、悪意のあるホスト`bad。example.com`をブロックしても、`bad.example.com`と判断されず、チェックをすり抜けてアクセスを許してしまうかもしれません。</li><li><strong>意図しない宛先へのリクエスト</strong>: 内部ネットワークやローカルホストへのアクセスを制限する「ループバックフィルタリング」を`fast-uri`に依存している場合、`http://127。0。0。1/`のような形式で外部からリクエストされると、本来アクセスすべきでない内部リソースが不正に利用されるリスクがあります。</li><li><strong>リダイレクト検証の不備</strong>: ユーザーが提供したURLに対するリダイレクト先を`fast-uri`で検証している場合、悪意のあるサイトへのリダイレクトを誤って許可してしまう可能性があります。</li><li><strong>アウトバウンドプロキシルーティングの誤動作</strong>: リクエストをプロキシ経由でルーティングする際に、`fast-uri`でホスト名を判断していると、意図しないプロキシや宛先にリクエストが送信され、データ漏洩や不正な通信につながる恐れがあります。</li></ul>
対策:速やかなアップグレードが必須
この脆弱性に対する回避策は存在しません。唯一かつ最も推奨される対策は、`fast-uri`をパッチが適用されたバージョンにアップグレードすることです。以下のいずれかのバージョンにアップデートしてください。
<ul><li>`fast-uri` <strong>v4.0.1</strong></li><li>`fast-uri` <strong>v3.1.3</strong></li><li>`fast-uri` <strong>v2.4.2</strong></li></ul>
プロジェクトの`package.json`を確認し、`fast-uri`の依存バージョンを上記いずれかのパッチ済みバージョンに更新してください。例えば、npmやYarnを使っている場合は、以下のコマンドでアップデートが可能です。
<code>npm update fast-uri</code><br>または<br><code>yarn upgrade fast-uri</code>
特定のバージョン範囲で依存している場合は、`package.json`のバージョン指定を修正し、`npm install`または`yarn install`を実行してロックファイルを更新することをお勧めします。
まとめ
`fast-uri`のホスト混同脆弱性は、アプリケーションのセキュリティロジックを容易に迂回しうる、非常に危険な問題です。特にバックエンドAPIや外部サービスと連携する際にURLの検証を行っているフロントエンドアプリケーションにおいては、この脆弱性への対応は最優先事項です。ご自身のプロジェクトで使用している`fast-uri`のバージョンを確認し、速やかにパッチが適用されたバージョンへアップグレードしてください。セキュリティは継続的な取り組みです。依存パッケージの定期的な見直しと更新を心がけましょう。