- Webアプリの脆弱性を利用した攻撃の一つであるオープンリダイレクトについてメモする。
概要
-
Webアプリのリダイレクト機能を悪用し、ユーザーを悪意のあるサイトに誘導する攻撃
-
流れ
-
攻撃者は、攻撃用リンク(正規サイトURLの遷移先指定クエリパラメータに攻撃者用サイトを指定したもの)を用意する。
-
攻撃用リンクをユーザーにクリックさせ、ユーザーを攻撃者のサイトに誘導させる。
# 正規リンク:正規の遷移先に遷移する http://example.com/openredirect/login?redirect_uri=http://example.com/post_login # 攻撃用リンク:攻撃者のサイトに遷移する。 http://example.com/openredirect/login?redirect_uri=http://evil.example.com/post_login
-
-
何も検証を行わず、パラメーターの値に基づいてユーザーエージェントをリダイレクトするように構成されたエンドポイントをオープンリダイレクターと呼ぶ。
想定される脅威
フィッシング
-
攻撃者は正規サイトに類似した外観の不正なサイトを作成し、ユーザーログインを待機する。
-
攻撃者は正規サイトのオープンリダイレクターを利用したURLを用意し、ユーザーを不正なサイトにリダイレクトさせる。
http://example.com/openredirect/login?redirect_uri=http://evil.example.com/post_login
反射型XSS
- オープンリダイレクターにJavaScript をリダイレクト先として指定し、ブラウザにコードを実行させる。
- 悪質なコードの実行や、ローカル保存データを盗むことが可能になる。
対策
-
リダイレクト先の事前登録
- あらかじめ指定可能なリダイレクト先をWebアプリ側に登録しておき、登録済みの場合はリダイレクトを許可する。
-
ユーザー入力の排除
- アプリが要求する場合のみリダイレクトさせる。
-
リダイレクト使用スキームの制限
- 入力を http または https の URL に制限することでJavaScriptの実行を防ぐ。