解説動画あり!オープンリダイレクトとは?
オープンリダイレクトとは?
外部⼊⼒を元に次画⾯以降の遷移を組み⽴てているWebアプリケーションにおいて起こり得る問題で、このオープンリダイレクト脆弱性が存在した場合、攻撃者の指定した任意のWebサイトに利⽤者を誘導することが出来ます。
このため攻撃が成⽴した場合、フィッシング⾏為による情報漏洩やマルウェア感染による被害などを引き起こす危険性があります。なお、単純なフィッシング⾏為などについては、運営者の過失を問われることはありませんが、このオープンリダイレクトのあるWebサイトは、誘導の際に起点となるため、運営者の責任を問われる可能性があります。
クロスサイト・スクリプティング攻撃などと同様にオープンリダイレクトの問題は受動的攻撃に分類されるため、攻撃者は罠のWebページやメッセージなどを配布して、利⽤者を介して問題のあるWebアプリケーションを攻撃してきます。
オープンリダイレクト攻撃の仕組み
以下はオープンリダイレクトが起こる典型的な攻撃例となります。
オープンリダイレクト攻撃の例
- 攻撃者は罠ページの公開や不正なリンクを含むメールを送信して罠を仕掛けます。
- 被害者が気付かずに罠ページを閲覧する、あるいはメールのリンクをクリックすることでオープンリダイレクト攻撃が発動します。
- 問題のあるWebアプリケーションではチェック処理がされていないため、オープンリダイレクト攻撃で指定されたURLを元に転送命令を応答します。
- 3までの⼿順で攻撃が成功すると攻撃者は被害者の機密情報などを奪取することができます。
脆弱性の解説動画
オープンリダイレクトが起こる原因
オープンリダイレクトは送られてきた外部⼊⼒の値を元にリダイレクト先を指定することで問題が発⽣します。なお、チェック処理を⾏なっていても以下のようなケースではチェック処理をバイパスしてオープンリダイレクトの問題が発⽣することがあります。
前⽅⼀致チェックのバイパス
以下のように@「アットマーク」で区切ることで前⽅⼀致のチェック処理をバイパスできることがあります。
【攻撃⽂字列の例】
https://sample.com@evil.example.com/
後⽅⼀致チェックのバイパス
以下のように#「シャープ」で区切ることで後⽅⼀致のチェック処理をバイパスできることがあります。
【攻撃⽂字列の例】
https://evil.example.com/#https://sample.com
オープンリダイレクト攻撃への対策⼿法
以下のいずれかの対策を実施することで問題の混⼊を防⽌することが可能です。
必須対策1(転送先を固定にする)
オープンリダイレクトは送られてきた値を元にリダイレクト先を指定することで問題が発⽣します。そのため、Webアプリケーション内のロジックにおいてURLを⽣成する際のドメイン情報をあらかじめ定めた上で、固定の値を⽤いて処理することで問題の混⼊を防⽌することができます。
必須対策2(外部⼊⼒値を検証する)
Webサービスの仕様や運⽤上、前述した必須対策1の実施が難しい場合に⾏う対策となります。Webアプリケーションの処理において、⽣成するURLに⽤いるドメイン情報が複数ある場合やURLのドメイン情報が可変値などの場合には、あらかじめ定義したホワイトリスト形式の許可ドメインを⽤意します。その上で、送られてきた外部⼊⼒値がリストで定義されているドメイン情報と合致しているか検証して許可されている場合のみ処理を実⾏します。
なお、正規表現などでチェックする際には前述したようなチェック漏れが発⽣しないように、可能な限り完全⼀致での⽐較を⾏うことが望ましいと⾔えます。
まずは手軽にツールで脆弱性診断
上述の対策手法が重要となる一方で、脆弱性が混入されていないかを検知する事も重要となります。
脆弱性診断とは何かについて詳しく知りたい⽅は脆弱性診断とは(エンジニア向け)と脆弱性診断とは(⾮エンジニア向け)もぜひご参照ください。
脆弱性検知やセキュリティレベルを強化したい企業様はぜひ弊社の脆弱性診断ツール「Securify Scan」を活⽤ください。
無償でのトライアル実施も⾏っておりますので、お気軽にお問い合わせください。