Hello there, ('ω')ノ
✅ 問題の構造
Web Cache Deceptionの脆弱性は、キャッシュとオリジンサーバーでURLの解釈が異なることによって生まれます。
🧪 具体例
http://example.com/user/123/profile/wcd.css
🔹 オリジンサーバー(RESTスタイルの解釈)
/user/123/profileを処理するエンドポイントがあり- その後ろに続く
/wcd.cssは無視される、またはルーティングのパラメータ扱い - 結果:ユーザー123のプロフィール情報を返す
🔸 キャッシュ(伝統的スタイルの解釈)
- このURLを
/user/123/profile/wcd.cssというファイルへのアクセスと解釈 .css拡張子があるため「静的ファイル」だと誤認- 結果:このレスポンス(=ユーザー123の個人情報)をキャッシュに保存
💥 攻撃のインパクト
攻撃者がこのURLを被害者に踏ませる
- 例:XSS、SNSリンク、リダイレクトなど
- 被害者がログイン中であれば、その人固有のプロフィール情報を含んだレスポンスがキャッシュに保存
- 攻撃者が同じURLを後からアクセス → 被害者のデータが返ってくる
✅ なぜこれが発生するのか?
| 原因 | 詳細 |
|---|---|
| サーバーは拡張子を無視 | RESTスタイルでは、ファイルのように見えてもパスパラメータとして扱われる |
| キャッシュは拡張子に反応する | .css, .js を「静的だ」と判断し、問答無用で保存する |
🔍 防ぐべき点
| 層 | 対策 |
|---|---|
| サーバー側 | 意図しないURL構造は 403 エラーにする、またはリダイレクトする |
| キャッシュ側(CDNなど) | .cssだからといって無条件にキャッシュしないよう制限する |
| 全体設計 | URL解釈が一致しているか定期的に検査・監査する |
✅ まとめ
| 攻撃条件 | 内容 |
|---|---|
| パスに静的拡張子を含める | .css, .js, .jpg など |
| REST的なURL解釈がある | /user/123/profile/wcd.css が /user/123/profile と同じ扱い |
| CDNがファイルと誤認して保存する | 本来キャッシュ非対象のレスポンスが保存されてしまう |
Best regards, (^^ゞ