Secure Steady
未検証リダイレクト - オープンリダイレクト の使い方・オプション・サンプル

未検証リダイレクト - オープンリダイレクト

URL パラメータで指定されたリダイレクト先を検証せずに遷移させる脆弱性。フィッシング攻撃に悪用される。

概念図

オープンリダイレクト diagram

攻撃シナリオ

信頼されたドメインを経由したフィッシング

bash
# 脆弱な URL
https://trusted-bank.com/login?redirect=https://evil-bank.com/fake-login

# ユーザーはアドレスバーに trusted-bank.com を確認してログインするが、
# ログイン後に evil-bank.com へ遷移し、再度認証情報を入力させられる

ドメイン検証をバイパスする手法

bash
# バイパスの例(検証が不十分な場合)
?redirect=https://trusted-bank.com.evil.com/
?redirect=//evil.com
?redirect=https://evil.com%23.trusted-bank.com

攻撃の仕組み

ログイン後のリダイレクトや外部リンクの中継ページなど、URL パラメータを使って遷移先を指定する機能がある場合に発生する。

攻撃者はリダイレクト先を悪意あるサイトに書き換えた URL を作成し、フィッシングメールや SNS で拡散する。

ユーザーはアドレスバーに信頼できるドメインが表示されているため、安心してクリックしてしまう。

遷移先のフィッシングサイトでは、「セッションが切れました」などと表示して再ログインを促し、認証情報を窃取する。

対策

  • ホワイトリスト方式: リダイレクト先を許可済みドメインの一覧と照合する
  • 相対パスのみ許可: 外部 URL へのリダイレクトを禁止し、自サイト内のパスのみ受け付ける
  • 間接参照: URL を直接パラメータに入れず、識別子(redirect=dashboard)で内部マッピングする
  • リダイレクト警告ページ: 外部サイトへ遷移する前に「このサイトを離れます」と確認を挟む

関連トピック