Shikata Ga Nai

Private? There is no such things.

パスマッピングのズレによるWeb Cache Deceptionの実例:`.css`付きURLで機密情報がキャッシュされる

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, (^^ゞ