Astro: ホストヘッダー内の不正なポートがNodeアダプターをクラッシュさせる可能性がある
## 概要
Astro Nodeアダプターにおいて、`Host`ヘッダーに不正なポートが含まれているリクエスト(例:`example.com:65536`または`example.com:8080:8080`)が、無効なリクエストURLを生成していました。解析できないURLからの回復を意図したフォールバック処理が、同じ不正なホストを再利用するため、再度失敗し、リクエストの構築中に、ルーティング処理が開始される前に、`TypeError: Invalid URL`という未処理の例外が発生していました。
## 影響
影響はアダプターの設定によって異なります。
- デフォルト設定(`standalone`):リクエストは`500 Internal Server Error`を返し、サーバーは実行を継続します。
- `staticHeaders: true`オプションを有効にした場合:例外は同期HTTPハンドラーに到達しますが、ハンドラーは例外をキャッチしないため、`uncaughtException`となり、プロセスが終了します。
これは可用性に関する問題であり、データ漏洩やコード実行を許可するものではありません。この問題を発生させるには、手動で作成した`Host`ヘッダーを送信する必要があります。また、多くのプロキシやCDNは、オリジンサーバーに到達する前に不正なホストを拒否します。
## 影響を受けるバージョン
`@astrojs/node` <= 11.1.2。
## 修正
`@astrojs/node` 11.1.3で修正されました。受信したホストを解析できない場合、リクエストURLはサーバーが制御するホストに切り替わり、例外を発生させる代わりにリクエストが処理されるようになりました。また、複数の`hostname:port`ペアを含むホストも、ホストの検証時に拒否されます。
## 対策
`@astrojs/node`を11.1.3以降にアップグレードしてください。リバースプロキシまたはCDNで不正な`Host`ヘッダーを遮断している環境では、この問題は発生しません。
## 貢献者
@Celggarによって報告されました。
影響を受けるパッケージ:
- npm (JavaScript) @astrojs/node: 影響を受けるバージョン <= 11.1.2、修正されたバージョン 11.1.3