URIの権限部分に閉じられていない括弧が含まれている場合、`fast-uri`はホスト名の誤認識の脆弱性を持つ可能性があります。
### 影響
`fast-uri`は、不均衡または誤った位置にある権限の括弧(`[`または`]`)を含むホスト名を、エラーを報告せずに受け入れます。例えば、`[`で始まり`]`で終わらないホスト名(例:`[@127.0.0.1`)は、IPアドレスリテラルとして検証も、ドメイン名として正規化も行われず、`parse()`関数はエラーを未定義の状態でホスト名として返します。一方、Node.jsの`URL`(および`http.get`、`axios`、`got`など、これらに基づいて構築されたクライアント)は、同じ文字列を`127.0.0.1`として解釈します。アプリケーションが`parse().host`を読み取り、ホスト名に基づいて判断を行う場合(例えば、SSRFの除外リスト、リダイレクトの許可リスト、またはプロキシのルーティング)、そして元のURLをHTTPクライアントに渡す場合、そのポリシーは、実際にリクエストが到達するホスト名とは異なる文字列に対して評価されます。同じホスト名が、`normalize()`、`equal()`、および`resolve()`関数を通じて処理されます。
### 修正
この脆弱性は、`fast-uri`のバージョン`4.1.4`、`3.1.7`、および`2.4.6`で修正されています。`parse()`関数は、括弧を含むが有効な`[IPv6]`リテラルではないホスト名に対して、「URIホストが無効です」というエラーを報告するようになりました。すべてのユーザーは、バージョンアップを推奨します。
### 対策
バージョンアップがすぐにできない場合は、ホスト名決定を行う前に、`[`または`]`を含むURLで、有効なIPv6リテラルではないものをすべて拒否してください。認証情報を含むURLに対して、エラーを返すように設定されているクライアント(例えば、Node.jsのグローバル`fetch()`)は、報告されている脆弱性の影響を受けません。
影響を受けるパッケージ:
- npm (JavaScript) fast-uri: 影響あり = 2.4.5、修正済みバージョン = 2.4.6
- npm (JavaScript) fast-uri: 影響あり = 3.1.6、修正済みバージョン = 3.1.7
- npm (JavaScript) fast-uri: 影響あり = 4.1.3、修正済みバージョン = 4.1.4