TanStack Router: 認証されていないユーザーによるクロスサイトスクリプティング(XSS)の脆弱性について(TanStack Startのサーバー関数応答に関連)
## 影響
認証されていない攻撃者が、脆弱なTanStack Startアプリケーションのサーバー関数へのURLを作成できる可能性があります。誰かがそのリンクを開くと、アプリケーションは攻撃者が制御するHTMLを自身のドメインから返却し、攻撃者のJavaScriptを実行する可能性があります。そのスクリプトは、その訪問者がアクセスできる同一オリジンのデータにアクセスし、その権限でリクエストを送信することができます。
## 原因
サーバー関数のデータ転送において、リクエストのペイロードフィールドが、公開入力フィールドに限定されることなく、内部のミドルウェアの状態に渡されることがあります。不正なペイロードがエラーパスに残ることで、攻撃者が制御する結果が生成される可能性があります。その後、レスポンスハンドリングが、HTTPレスポンスとして整形されたオブジェクトを扱うことになります。
## 影響を受けるバージョン
`@tanstack/start-server-core`、`@tanstack/react-start`、`@tanstack/solid-start`、および`@tanstack/vue-start`の公開バージョンで、`1.143.12`から、それぞれの修正版のバージョン(ただし、含まれません)までのバージョンが影響を受けます。修正版のバージョンは、`@tanstack/start-server-core@1.169.39`、`@tanstack/react-start@1.168.60`、`@tanstack/solid-start@1.168.57`、および`@tanstack/vue-start@1.168.56`です。
## 修正方法
修正は、クライアントから提供されるサーバー関数の入力を公開フィールドに限定し、サーバー境界でレスポンスを検証することによって行われます。対応する修正版のパッケージにアップグレードしてください。
## 一時的な対策
設定されたサーバー関数のパス(通常は`/_serverFn/*`)について、エッジまたはWAFのルールで、リテラルな`x-tsr-serverFn: true`ヘッダーがないリクエストや、ブラウザのドキュメントナビゲーション(例:`Sec-Fetch-Mode: navigate`または`Accept: text/html`)をブロックすることを検討できます。サーバー関数のレスポンスに対する制限的なContent Security Policyを設定することで、ブラウザ側の制限を追加することもできます。これらは、完全な修正ではなく、あくまで対策の提案です。このヘッダーはクライアントによって制御され、認証ではありません。正当なGETおよびPOSTのサーバー関数に対してルールをテストし、可能な場合は、バージョン固有のバックポートを使用してください。
## 協力者
Lovable社は、この問題の発見と報告に協力してくれました。彼らの協力に感謝します。
影響を受けるパッケージ:
- npm (JavaScript) @tanstack/start-server-core: 影響を受けるバージョンは 1.143.12 以降、1.169.39 未満。1.169.39 で修正済み。
- npm (JavaScript) @tanstack/react-start: 影響を受けるバージョンは 1.143.12 以降、1.168.60 未満。1.168.60 で修正済み。
- npm (JavaScript) @tanstack/solid-start: 影響を受けるバージョンは 1.143.12 以降、1.168.57 未満。1.168.57 で修正済み。
- npm (JavaScript) @tanstack/vue-start: 影響を受けるバージョンは 1.143.12 以降、1.168.56 未満。1.168.56 で修正済み。