オープンリダイレクト
ある Web アプリケーションは,ログイン後に returnUrl パラメータで指定された URL へ検査なしで遷移する。攻撃者は returnUrl に外部の偽サイトの URL を仕込んだリンクを配り,正規サイトでログインした利用者を偽サイトへ誘導するフィッシングに悪用した。対策として,最も適切なものはどれか。
- ア遷移先を利用者の入力そのものにせず,短い識別子を受け取ってサーバ側で許可済みの URL に対応付けるか,入力をパースしてスキーム・ホスト・ポートを許可リストと照合する。
- イreturnUrl が "http://" または "https://" で始まる正しい形式の URL であることを確認してから遷移する。
- ウreturnUrl に自サイトのドメイン名(example.com)が前方一致または部分一致で含まれることを確認してから遷移する。
- エ遷移の直前に Referer ヘッダを確認し,自サイトのログイン画面からの要求である場合にだけ returnUrl へ遷移する。
正解と解説を見る
正解 ア
この問題の基礎知識
- オープンリダイレクトは,パラメータで指定された任意の URL へ検査なしで遷移させる脆弱性である。リンクが正規サイトのドメイン名で始まるので利用者が信用しやすく,フィッシングに悪用される。
- URL は「スキーム://ユーザ情報@ホスト:ポート/パス」の構造をもち,https://example.com@attacker.example/ のホストは attacker.example なので,文字列の一致では遷移先のホストを正しく判定できない。
- 許可リスト方式は許可するものだけを列挙してそれ以外を拒否するので,拒否リスト方式や「http:// で始まる」などの形式の確認に比べて,想定外の遷移先を通しにくい。
- Referer ヘッダは遷移元のページを示すものであり,遷移先の安全性を示すものではない。
ア遷移先を利用者の入力そのものにせず,短い識別子を受け取ってサーバ側で許可済みの URL に対応付けるか,入力をパースしてスキーム・ホスト・ポートを許可リストと照合する。正解
遷移先を入力から直接決めず,サーバ側の対応表や許可リストで限定するのがオープンリダイレクトの基本対策である。任意の外部 URL への遷移を防げる。
イreturnUrl が "http://" または "https://" で始まる正しい形式の URL であることを確認してから遷移する。
形式の確認だけでは外部の任意ホストへの URL も通る。構文として妥当であることと,遷移先が安全であることを混同している。
ウreturnUrl に自サイトのドメイン名(example.com)が前方一致または部分一致で含まれることを確認してから遷移する。
文字列の一致検査は example.com.attacker.net のようなホスト名や userinfo で回避される。パースした要素で照合せず文字列で判定するのは危険である。
エ遷移の直前に Referer ヘッダを確認し,自サイトのログイン画面からの要求である場合にだけ returnUrl へ遷移する。
利用者は攻撃者のリンクから正規のログイン画面に入り,そこでログインするので,遷移時の Referer は自サイトになり検査を通過する。遷移先そのものを検査しない限り外部へ誘導される。
検証用の出典出典照合済み
OWASP Unvalidated Redirects and Forwards Cheat Sheet / CWE-601 URL Redirection to Untrusted Site (Open Redirect)照合の根拠(5 件)
- ア(正解): 利用者には短い名前・ID・トークンを渡させ,サーバ側で遷移先の URL に対応付ける
Where possible, have the user provide short name, ID or token which is mapped server-side to a full target URL.
OWASP Unvalidated Redirects and Forwards Cheat Sheet · Preventing Unvalidated Redirects and Forwards(新しいタブで開きます) - ア(正解): パースしたスキーム・ホスト・ポートを明示的な許可リストと照合する。イ(誤り): スキームの形式を確かめるだけでは任意のホストが通る
Compare the parsed scheme, canonical host, and effective port against an explicit allowlist; constrain the path when only specific endpoints are permitted.
OWASP Unvalidated Redirects and Forwards Cheat Sheet · Validating URLs(新しいタブで開きます) - ウ(誤り): 文字列の前方・後方一致は userinfo や紛らわしいホスト名で回避される
Do not use raw prefix or suffix matching: GitLab demonstrates how userinfo and misleading hostnames bypass such checks .
OWASP Unvalidated Redirects and Forwards Cheat Sheet · Validating URLs(新しいタブで開きます) - エ(誤り): 遷移はログイン成功後に自サイトのログイン処理から行われるので Referer は自サイトになる。問題は returnUrl 自体を検査していないことであり,Referer の確認では防げない
After a successful login, the controller returns a redirect to the returnUrl. You can see that no validation is being performed against the returnUrl parameter.
OWASP Unvalidated Redirects and Forwards Cheat Sheet · Dangerous URL Redirect Example 2(新しいタブで開きます) - 前提: 利用者が制御できる入力で外部サイトへのリダイレクト先を指定できることがオープンリダイレクトの弱点である
The web application accepts a user-controlled input that specifies a link to an external site, and uses that link in a redirect.
CWE-601 · Description(新しいタブで開きます)