undiciにおいて、BalancedPoolの接続オプションが適切に処理されないために、TLS証明書の検証を回避される脆弱性が存在します。
### 影響
undiciの`BalancedPool`は、コンストラクタのオプションをJSONベースの深いコピー(`JSON.parse(JSON.stringify(...))`)によって複製し、その後、各アップストリームの`Pool`に渡します。JSONは関数を表現できないため、呼び出し元から提供された`connect`または`tls`オプションに含まれる`checkServerIdentity`コールバック(またはカスタムコネクタ関数)は、TLSレイヤーに到達する前に、通知なく無視されます。その結果、カスタムの`checkServerIdentity`によって拒否されるはずのTLSピアが、Nodeのデフォルトのホスト名とチェーンのチェックをパスしている場合、`BalancedPool`を介してリクエストが送信されると、問題なく受け入れられてしまいます。`Client`、`Pool`、`Agent`、および`RoundRobinPool`は、コピー処理の前に`connect`/`tls`オプションを分解するため、影響を受けません。影響を受けるのは、`BalancedPool`を使用しており、関数型の`connect`/`tls`オプション(例えば、カスタムの`checkServerIdentity`やコネクタ)を指定しているアプリケーションのみです。
### 修正
バージョン`7.29.1`または`8.10.2`にアップグレードしてください。`BalancedPool`は、JSONコピーの対象外の`connect`および`tls`オプションを保持するように変更され、カスタムのTLS検証コールバックが、変更されずに各アップストリームに渡されるようになりました。
### 対策
カスタムの`checkServerIdentity`またはコネクタに依存する接続については、アップグレードするまで、`Client`、`Pool`、または`Agent`を使用してください。
影響を受けるパッケージ:
- npm (JavaScript) undici: 影響範囲は、7.24.1以上、7.29.1未満。7.29.1で修正済み。
- npm (JavaScript) undici: 影響範囲は、8.0.0以上、8.10.2未満。8.10.2で修正済み。