未検証リダイレクト - オープンリダイレクト
URL パラメータで指定されたリダイレクト先を検証せずに遷移させる脆弱性。フィッシング攻撃に悪用される。
概念図
攻撃シナリオ
信頼されたドメインを経由したフィッシング
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)で内部マッピングする - リダイレクト警告ページ: 外部サイトへ遷移する前に「このサイトを離れます」と確認を挟む
関連トピック
フィッシング- 正規のサービスを装った偽サイトやメールでユーザーの認証情報・個人情報を詐取する攻撃。全サイバー攻撃の起点として最も多い手法。 XSS(クロスサイトスクリプティング)- 悪意あるスクリプトを Web ページに注入する攻撃手法。反射型・格納型・DOM Based の 3 種類がある。 アクセス先 URL の確認- リンクをクリックする前にアクセス先の URL を確認する習慣が、フィッシングやクリックジャッキングなどの攻撃から身を守る基本的な対策になる。 セキュアコーディングの基本- 安全なコードを書くための基本原則。入力検証・最小権限・エラーハンドリングの3原則で大半の脆弱性を防止できる。 