はじめに
サイバースペースには様々な種類や形態の脆弱性が存在しており、それらを把握・テスト・修正するのは容易ではありません。完全なAPIセキュリティを実現するためには、有名な脅威から未知のものまで十分に認識することが重要です。
その一例がオープンリダイレクトです。XSSペイロードやフィッシングの実行に利用されるこの脆弱性は、AppSecの専門家が注目すべき重要な課題となっています。
リダイレクトとは、ウェブサイトやウェブアプリが裏側の仕組みを使い、エンドユーザーがアクセスするURLを変更する処理です。HTTPヘッダーの転送やJavaScriptの利用など、いくつかの方法があります。
十分な管理や保護がされていない場合、リダイレクトは攻撃対象となりやすく、悪意ある攻撃者が利用してユーザーやクライアント、訪問者を誤ったサイトに誘導する恐れがあります。
これは、クライアント側で生成されるリダイレクトのうち、正しくないか適切にフィルタリングされていないものを指します。このようなリダイレクトは安全ではなく、攻撃者に利用される余地があります。
安全なリダイレクトとそうでないリダイレクトにはそれぞれ特徴があります。例えば、暗号化されたサイトがクライアントを常に固定のURLへリダイレクトするのは安全な方法とされますが、クライアントにリダイレクト先を指定させる場合は安全とは言えません。このようなリダイレクトはオープンリダイレクトと呼ばれます。
また、ユーザー定義のパラメータを利用している場合は安全とされますが、入力の検証やフィルタリングが行われていないと、攻撃者が悪意ある内容を挿入する可能性があります。
まとめると、動的リダイレクトを利用する際は、初めから信頼できないと判断し、強固なセキュリティ対策を講じる必要があります。対策が不十分な場合、攻撃者がリダイレクト先を改ざんされた危険なサイトへ変更する恐れがあります。
分類に関しては、オープンリダイレクトはOWASP Top 10 2013でA10に位置付けられており、Netsparkerでは中程度の危険性があると評価されています。
オープンリダイレクト脆弱性の例を用いて、その概念を理解してみましょう。
例えば、test.comというドメインを所有しているとします。貴社の利用者を狙う攻撃者は、以下のようなURLを生成する可能性があります。
https://test.com/redirect.php?url=http://attacker.com
このURLはフィッシング攻撃に利用され、最初にtest.comが含まれているため、利用者に正規のサイトであると誤認させる狙いがあります。
サイトにオープンリダイレクトの問題が存在すれば、攻撃者はこのURLを容易に実装することができます。
以下は、その実例を示すコードです。
$redirect = $_GET['url']; header("Location: " . $redirect);
JavaScriptを使用しなくても発生する可能性があります。攻撃者はHTTPのLocationヘッダーを利用し、例えば以下のような問題を引き起こします:
このように、URL内に悪意ある内容が含まれていても利用者が気付かない場合、深刻な結果を招く可能性があります。
サーバ側の制限の代わりにJSによるチェックや検証のみを行うと、攻撃者がクライアント側で無効化できるため、ページがリダイレクト攻撃に対して脆弱になります。
もし攻撃者がJS方式のリダイレクトを成功させれば、悪用の可能性は無限大となります。そのため、オープンリダイレクトを利用したフィッシング攻撃では、しばしばJavaScriptが用いられます。
以下のように、複数の悪用方法が考えられます:
一般的な手法です。フィッシング詐欺で見られる手法の一例であり、攻撃者は脆弱なブラウザやCSRF攻撃に弱いページを利用することが多いです。
信頼できるリソースからそのような内容が提供されているように見えると、利用者は罠に陥ります。この手法のもっとも一般的な例は、改ざんされた銀行や金融サービスのサイトが訪問者をCSRF攻撃用のページへリダイレクトするケースです。
オープンリダイレクトを利用したXSS攻撃を実行するには、HTTP以外のプロトコルを使用する必要があります。直接使用すると検出・ブロックされるため、攻撃者はJavaScriptやDOMオブジェクトを用いて攻撃を行います。
信頼性の高いサイトであっても、オープンリダイレクトのエンドポイントが存在すると、攻撃者はフィッシング攻撃の足がかりとして利用することがあります。これにより、正規のサイトに悪意あるリンクを挿入したり、改ざんされたURLを含むフィッシングメールを送信したりすることが可能となります。見た目が本物に似せてあるため、利用者が誤った危険なURLに誘導される恐れがあります。
攻撃者は本物のサイトに見せかけるために細工し、非常に長いエンコード済みパラメータを使用するため、識別が難しくなることが多いです。このため、フィッシング攻撃は成功しやすく、認証フローが確立されたサイトであっても被害に遭う可能性があります。
これは内部ネットワークを狙った攻撃で、内部ホストでリダイレクトが発生した場合にのみ実現可能です。SSRFはパストラバーサルと組み合わせることで、攻撃者が内部にアクセスする恐れがあります。
オープンリダイレクトの忘れてはならない利用例の一つに、ユーザートークンの窃盗があります。SSOを採用したアプリでオープンリダイレクトが存在すると、攻撃者が認証済み利用者になりすまし、セッションハイジャックなどの攻撃を行う可能性があります。
ユーザー入力の検証不足が、オープンリダイレクトが悪用される主な原因です。ここで問題となるのはURLのクエリ文字列です。この脆弱性の発生と影響を減らすため、以下の防止策が有効です。
最新情報を購読