Hello there, ('ω')ノ
✅ この攻撃の概要
多くのCDNやキャッシュサーバーは、以下のような静的ファイル拡張子(例:.css
, .js
, .png
)を含むリクエストをキャッシュ対象と判断します:
/account.css
,/user.js
,/profile.png
しかし、アプリケーション側(オリジンサーバー)がこの拡張子を無視して処理している場合、以下のようなズレが生じます:
キャッシュの解釈 | アプリの解釈 | |
---|---|---|
/account.css |
静的ファイル → キャッシュ対象 | /account として動的に処理 |
🎯 攻撃の本質
攻撃者が**.css
などの静的拡張子を付けて**被害者のページにアクセスさせると:
- キャッシュサーバーが「静的だ」と思い込んで保存
- アプリは動的ページとして処理し、個人情報などを含むレスポンスを返す
- キャッシュがそのレスポンスを保存
- 攻撃者が同じURLにアクセス → 被害者の個人情報が含まれたレスポンスが表示される
🧪 攻撃URLの例
/account.css /profile.js /dashboard.png
これらは見た目は静的ですが、アプリケーションが動的ページとして処理する場合が多いです。
✅ 攻撃を成功させる条件
条件 | 内容 |
---|---|
キャッシュサーバーが.css 等をキャッシュ対象と認識する |
多くのCDNではデフォルト |
アプリが拡張子を無視する、または正規化する | /account.css → /account として処理される |
被害者がそのURLにアクセスする | 誘導、XSS、メールリンクなどで誘発 |
攻撃者が同じURLでキャッシュを取得 | 機密情報が含まれているか確認 |
🧠 攻撃のポイントまとめ
- 静的拡張子 ≠ 静的コンテンツ
- 拡張子がキャッシュされるかどうかはサーバーとCDNの解釈の差による
- パスの末尾に偽装拡張子を追加して、本来はキャッシュ非対象のデータをキャッシュさせる
✅ まとめ
.css
や.js
を付けただけのURLでも、アプリが拡張子を無視していればWeb Cache Deceptionは成立します。
攻撃対象 | 対応の注意点 |
---|---|
/account.css |
オリジンが/account と解釈して動的データを返すか要確認 |
/profile.png |
CDNが静的だと思いこみ、保存してしまうリスクあり |
Best regards, (^^ゞ