パスワード再設定リンクの汚染

C#でのパスワード再設定リンクの汚染

説明

攻撃者が制御できる Request.Host や Host ヘッダーからパスワード再設定リンクのドメインを組み立てると、攻撃者のドメインを含むリンクが送信されるおそれがあります。ユーザーがそのリンクを開くと、再設定トークンが攻撃者に渡る可能性があります。

想定される影響

  • アカウント復旧リンクの悪用、パスワード再設定トークンの漏えい、アカウントの乗っ取り。

対処方法

再設定リンクは、信頼できる設定にある公開用のベースURLから生成してください。リクエストのHostヘッダーをリンクの生成に使わないでください。

例

scheme と host はリクエストから取得した値、configuredBaseUrl は管理者が設定したHTTPSのベースURLとします。resetToken はクエリパラメーター用にエンコード済みの値です。

変更前

csharp
var resetLink = $"{scheme}://{host}/reset-password?token={resetToken}";

変更後

csharp
var resetLink = $"{configuredBaseUrl}/reset-password?token={resetToken}";

解説:

  • 変更前: リクエストのホスト情報から再設定リンクを生成すると、攻撃者がアカウント復旧リンクに悪意のあるドメインを混入させるおそれがあります。
  • 変更後: Request.Host や生のHostヘッダーではなく、信頼できる設定のベースURLからアカウント復旧リンクを生成してください。

参考資料