Mission
ログイン後リダイレクトの脱出を止めろ
ログイン成功ページは ?redirect= の値をそのまま res.redirect に渡している。攻撃者は redirect=https://evil.example.com を仕込んだリンクを配り、被害者が正規ログインの直後に攻撃者の用意したフィッシングサイトへ飛ばされる、という導線を作れる。攻撃テストで外部URLへリダイレクトされることを確認し、相対パスのみ許可する方向へコードを修正しよう。
redirect クエリの値を検証せずに res.redirect に渡しているため、絶対URLでもプロトコル相対URLでも何でも通ってしまいます。受け取った値が『/ で始まり // で始まらない相対パス』であることを確かめてからリダイレクトする方向の修正を目指します。
脆弱性
Open Redirect
難易度
Easy
状態
available
Difficulty
出題モードを選ぶと、プレビュー有無・ヒント・スコア上限が変わります。
次にやること: 攻撃テストを実行
Step 1
攻撃テスト
redirect=https://evil.example.com を渡したリクエストを実行し、外部URLへの 302 リダイレクトが返ることを確認しましょう。
Lightweight Preview
Auth Service / mvp-0.2
GET /login-success?redirect=<url>
Payload
GET /login-success?redirect=https://evil.example.com
この問題は低メモリ公開版では軽量プレビューです。検証は静的パッチ判定で行います。
自動攻撃で検証
未実行$ automated-attack
使用ペイロード: GET /login-success?redirect=https://evil.example.com
ボタンを押すと、左のプレビューを手動で操作しなくても 脆弱性の有無を即座に判定します。
実際の脆弱アプリケーションに対して攻撃を実行し、防御を検証します。