Mission

ログイン後リダイレクトの脱出を止めろ

ログイン成功ページは ?redirect= の値をそのまま res.redirect に渡している。攻撃者は redirect=https://evil.example.com を仕込んだリンクを配り、被害者が正規ログインの直後に攻撃者の用意したフィッシングサイトへ飛ばされる、という導線を作れる。攻撃テストで外部URLへリダイレクトされることを確認し、相対パスのみ許可する方向へコードを修正しよう。

redirect クエリの値を検証せずに res.redirect に渡しているため、絶対URLでもプロトコル相対URLでも何でも通ってしまいます。受け取った値が『/ で始まり // で始まらない相対パス』であることを確かめてからリダイレクトする方向の修正を目指します。

脆弱性

Open Redirect

難易度

Easy

状態

available

Difficulty

出題モードを選ぶと、プレビュー有無・ヒント・スコア上限が変わります。

現在ステップ: Step 1状態: 未開始

次にやること: 攻撃テストを実行

Step 1

攻撃テスト

redirect=https://evil.example.com を渡したリクエストを実行し、外部URLへの 302 リダイレクトが返ることを確認しましょう。

Lightweight Preview

Auth Service / mvp-0.2

GET /login-success?redirect=<url>

static

Payload

GET /login-success?redirect=https://evil.example.com

この問題は低メモリ公開版では軽量プレビューです。検証は静的パッチ判定で行います。

自動攻撃で検証

未実行

$ automated-attack

使用ペイロード: GET /login-success?redirect=https://evil.example.com

ボタンを押すと、左のプレビューを手動で操作しなくても 脆弱性の有無を即座に判定します。

実際の脆弱アプリケーションに対して攻撃を実行し、防御を検証します。