オープンリダイレクトの脆弱性を理解して探す

記事の翻訳は、コース「Webアプリケーションセキュリティ」の開始を見越して作成されました








Web開発者が最も一般的でありながら見過ごされている脆弱性の1つは、Open Redirect(Unverified Redirects and Forwardsとも呼ばれます)です。 HTTP GETリクエストのパラメータ値(URLの「?」の後の部分)がターゲットサイトを確認せずにユーザーを新しいサイトにリダイレクトする場合、WebサイトはOpenRedirectに対して脆弱であると見なされます。脆弱なサイトのアーキテクチャによっては、ログインなどの特定のアクションの後にリダイレクトが発生する場合があり、ページの読み込み時に即座に発生する場合もあります。



:脆弱なリンクの例は次のようなものに見えるwww.example.com/login.html?RelayState=http%3A%2F%2Fexample.com%2Fnextを



、この例では、「リレー状態」パラメータ当社でログイン成功後にユーザーをリダイレクトするために指定します(例はexample.com/nextです)。サイトが「RelayState」パラメータの値の正当性とセキュリティをチェックしない場合、攻撃者はこのパラメータを使用して、攻撃者自身が作成した偽のページに被害者をリダイレクトできます:www.example.com/login.html ?RelayState = http%3A%2F %2FEvilWebsite.com



Open Redirectなどの脆弱性は、サイトに直接損害を与えず、攻撃者が会社のデータを直接盗むことができないため、開発者によって無視されてきました。ただし、これはOpenRedirectが脅威ではないことを意味するものではありません。このタイプの攻撃の主な用途の1つは、効果的で信頼性の高いフィッシング攻撃を実行することです。



フィッシング攻撃がOpenRedirectを使用する場合、被害者は、被害者にとって正しくて馴染みのあるドメインを指すリンクが記載された、もっともらしい電子メールを受信する可能性があります。被害者が気付かないかもしれないのは、リダイレクトエンドポイントを変更するパラメータがURLの途中にあることです。 Open Redirectの検出を複雑にするために、被害者が本物のサイトでユーザー名とパスワードを入力した後にリダイレクトが発生する可能性があります。攻撃者は、被害者をだますための効果的な方法は、実際のサイトでユーザー名とパスワードを入力した後、偽のサイトにリダイレクトすることであることに気づきました。偽のサイトは実際のサイトと同じように見え、被害者にパスワードの再入力を求めます。被害者がそうした後、パスワードは攻撃者によって書き留められます、被害者は実際のサイトにリダイレクトされます。すべてが正しく行われている場合、被害者は最初にパスワードを間違えたと思い、ユーザー名とパスワードが盗まれたことに気付かないでしょう。



フィッシングは、最も成功したターゲットハックだけでなく、日和見攻撃でも定期的に使用されます。日常生活でフィッシングがどれほど一般的であるかを考えると、OpenRedirectのような脆弱性も軽視されるべきではありません。



この脆弱性は一般的であるため、特定のサイトまたは会社をOpenRedirectに対して脆弱であると特定することは不公平です。代わりに、そのようなサイトがいくつあるか、そしてそれらを見つけるのがどれほど簡単かを示すことは役に立ちます。



Web検索を行うことは、自分のサイトやインターネット上の他の場所でOpenRedirectを見つけるための最良の方法の1つです。



Googleの検索エンジンを使用すると、ページのURLを具体的に検索するクエリなど、検索クエリを柔軟に作成できます。



次の演算子と特殊文字を使用すると、すべてのユーザーがOpenRedirectの検出に役立つタグ付きクエリを作成できます。



  • allinurl指定されたすべてのキーワードのURLを検索するようにGoogleに指示するオペレーターです。例:allinurl:ReturnUrlアドレスにReturnUrl部分があるすべてのWebページを検索します。
  • site-特定のドメインまたはWebサイトにある結果のみを返すように言うオペレーター。例:site:example.comでWebページを検索しexample.comます。
  • "" -二重引用符は、引用符内の単語と文字の正確な組み合わせを検索することを示すために使用される特殊な文字です。
  • * -アスタリスクは、1つ以上の単語を表すワイルドカードです。


それらを使用すると、潜在的なオープンリダイレクトの兆候を見つけることができます。GETリクエストのパラメータでトークン「http」「https」の存在を同時に検索できます。例えば:



allinurl:%3Dhttps*
allinurl:%253Dhttps*
allinurl:%3Dhttp*
allinurl:%253Dhttp*


GETリクエストパラメータ領域で、リダイレクトに関連する特定の一般的な単語を検索することもできます。例えば:



allinurl:"<keyword>=https"
allinurl:"<keyword>=http"
allinurl:<keyword>=https
allinurl:<keyword>=http
allinurl:<keyword>%3Dhttps
allinurl:<keyword>%3Dhttps*
allinurl:<keyword>%253Dhttps
allinurl:<keyword>%253Dhttps*
allinurl:<keyword>%3Dhttp
allinurl:<keyword>%3Dhttp*
allinurl:<keyword>%253Dhttp
allinurl:<keyword>%253Dhttp*
allinurl:<keyword>


代わりに<keyword>RelayState、ReturnUrl、RedirectUri、Return、Return_url、Redirect、Redirect_uri、Redirect_url、RedirectUrl、Forward、Forward_url、SuccessUrl、Redir、Exit_url、Destinationのいずれかのリダイレクト固有の単語を使用します。これはキーワードの完全なリストではありません。より一般的なURLルックアップクエリの結果を[GETRequest Parameters]セクションで分析すると、詳細を確認できます。



ターゲットを絞った検索の場合«site:<domain_name>»、Google検索の最後に追加できます。この方法は、自分のサイトでOpenRedirectの脆弱性を見つけるのに役立ちます。



このような簡単な検索で、数十のOpenRedirectの脆弱性を数分で見つけることができます。脆弱なサイトのリストには、銀行、国際企業、信頼できる企業、お気に入りのプロジェクトのサイト、および小規模組織の多数のサイトが含まれます。追加のボーナスとして、GoogleクローラーがOpen Redirectのサイトに遭遇するたびに、クエリを使用して更新された結果を受け取ります。



Open Redirectの脆弱性を回避する最善の方法は、ユーザー固有のパラメーターリダイレクトまたはGET要求を回避することです。リダイレクトが避けられない場合は、ターゲットサイトを検証し、検証されたURLのホワイトリストを使用してその評判をクリアすることで対処できます。



Web開発者の友達にOpenRedirectについて伝えることをお勧めします。この記事を彼らに転送したり、上記の方法を使用して脆弱性を発見したりして、問題の詳細な説明とともに会社に報告することもできます。一緒にフィッシング攻撃をしにくくしましょう!



Open Redirect検出で機能するGoogle検索を共有したい場合は、コメントで共有できます。






コースの詳細







All Articles