オープンリダイレクトの脆弱性に悩まされるブラウザー
Kyle Suero
Aviad Hahami
2022年4月1日
0 分で読めますエイプリルフールに公開したリックロールのツイートをじっくり見てから、このブログ記事にたどり着いた方は……お見事です!まだの方は、 ツイートしたリンクをチェック して、ジョークを楽しんでください。
「予期しないリンクはクリックしないで!」こんな言葉を聞いたことはありませんか?テクノロジー業界で働く人のほとんどは、見知らぬリンクを警戒しています。それにはもっともな理由があります。標的型攻撃によって、業界を代表する企業から大規模な情報漏えいが起きることが時折あります。誰かを「フィッシング」して認証情報を窃取する確実な手口の一つは、一見安全そうなWebサイトのオープンリダイレクトの脆弱性を悪用し、被害者を悪意あるサイトへ転送することです。認証情報の窃取だけでなく、オープンリダイレクトの脆弱性が、より高度な脆弱性への侵入口になることもあります。
オープンリダイレクトとは?その仕組み
オープンリダイレクトの脆弱性の基本的な仕組みはシンプルです。攻撃者はwww.snyk.ioのような既知のサイトを使ったURLを作成し、パラメーター、クエリー文字列、またはパス要素を追加します。それがサーバーに送信されると、サーバーはリクエスト(およびクライアント)を、意図されたとされるURLやエンドポイントへリダイレクトします。これはあらゆるHTTPリクエストの基本部分であるため、サーバーがリダイレクト先のURLを検証せず、無条件にリクエストを転送すると脆弱性が生じます。この場合、攻撃者は被害者のリダイレクト先を自由に選び、悪意あるリンクを送りつけることができます。この攻撃で使われるURLは、たとえば[www.snyk.io?nextUR](http://www.snyk.io?nextURL=)L=//malicious.comのようになります。malicious.comを構築してwww.snyk.ioとまったく同じ見た目にすれば、疑うことを知らない被害者は両者を見分けるのが難しく、攻撃者の被害に遭う可能性が高くなります。
オープンリダイレクトは、技術的には深刻な問題ではないように見えるかもしれません。しかし、熱心なユーザーの信頼を損なう影響は重大です。結局のところ、被害者は製品の顧客です。顧客の信頼を失えば、顧客が離れ、新たな顧客も獲得できなくなり、製品はいずれ支持を失います。つまり、技術的な深刻度は低くても、製品や信頼性の観点では重大であり、製品全体に影響を及ぼしかねません。
「これは問題ない」と書かれたマグカップにコーヒーを注ぎ足すようですが、オープンリダイレクトの脆弱性は、XSSなどのWeb関連の脆弱性と連鎖させることで、影響を大幅に拡大し、重大な脅威につながる可能性があります。たとえばTwitterでは、2018年3月にXSSにつながるオープンリダイレクトが報告されました。報告内容を見ると、研究者はオープンリダイレクトの脆弱性を利用してXSSを実行できることを発見しました。両者を組み合わせることで、被害者のドメインに関連するデータ(Cookieやローカルストレージなど)が完全に侵害されました。Twitterはこの発見に対し、研究者に1,120ドルを報奨金として支払いました。
同様に、サーバーサイドリクエストフォージェリ(SSRF)は、サーバーを容易に侵害できる脆弱性です。オープンリダイレクトの脆弱性を利用すると、攻撃者はフィルタリング機構を回避できます。この2つを組み合わせるのは、球場でビールを飲むようなもの――相性抜群です!サーバーからのリクエストにユーザー入力が使われているなら、攻撃者にとって格好の標的です。攻撃者は、特定のエンドポイントがユーザー入力をどう処理するかを把握すれば、創意工夫と試行錯誤を重ねてSSRFにつながる経路を見つけられます。オープンリダイレクトを発見すると、該当するURLパラメーターを使い、重要な内部エンドポイントやサービスへのアクセス、さらには外部の悪意あるリソースへの接続を試みます。
アプリケーションからオープンリダイレクトを排除する
今すぐオープンリダイレクトを探しに行こうと思っている方もいるでしょう。こうした問題に対処するには、次の点を確認してください。すべてのユーザー入力を検証し、特にユーザーが制御するデータがURLに反映される場合は注意しましょう。デフォルトで有効になっていないサービスには、強力な認証を導入してください。リダイレクト先を制限するために、許可リストを使用しましょう。修正方法の詳細は、こちらのOWASPチートシートをご覧ください。
結論として、オープンリダイレクトの脆弱性は技術的に目立ちにくいからといって、見過ごしてはいけません。ユーザーへの影響や、それによって生じる被害は深刻なものになり得ます。オープンリダイレクトの脆弱性を放置するのは、誰かが勝手に家に入ってこないことを願いながら、ドアや窓を開けっぱなしにしておくようなものです。まったく理にかなっていません。
