Hello there, ('ω')ノ
✅ 攻撃の概要
パスマッピングのズレによるWeb Cache Deceptionは:
サーバーは動的レスポンスを返すが、キャッシュは静的ファイルだと誤解して保存してしまう
という挙動を利用して、機密情報を不正にキャッシュ化させる手法です。
🧪 テスト手順
① オリジンサーバーのURLマッピングをテスト
- 対象エンドポイントを確認(例:
/api/orders/123
) - これに余分なパス要素を追加(例:
/api/orders/123/foo
) レスポンスが変わらず同じ注文情報を返してくる場合:
- サーバーが
/foo
を無視している=REST的な抽象化が行われている
- サーバーが
② キャッシュサーバーのルールをテスト
- さらにパス末尾に静的拡張子を追加(例:
/api/orders/123/foo.js
) - 同じリクエストを2回送信し、2回目の応答が高速 or
X-Cache: hit
であるかを確認 もしそうなら:
✅ キャッシュが拡張子付きURL全体を静的ファイルと解釈して保存している ✅
.js
や.css
など特定の拡張子に対してキャッシュルールが適用されている
③ 試すべき拡張子の例
拡張子 | 理由 |
---|---|
.css |
典型的な静的スタイルファイル |
.js |
スクリプトファイルとして扱われやすい |
.ico |
ファビコン扱いされがち |
.exe , .zip , .png |
一部CDNが対応している場合あり |
🔥 攻撃の構築例
/api/orders/123 → 注文情報(動的、キャッシュ不可) /api/orders/123/temp.css → 見た目は静的、内容は注文情報 → キャッシュされる
- 攻撃者がこのURLに被害者を誘導
- 被害者の情報がキャッシュに保存される
- 攻撃者が同じURLを叩いて情報を盗み見る
✅ 攻撃が成立する条件のまとめ
条件 | 内容 |
---|---|
サーバーが末尾のパスセグメントを無視 | /123/foo や /123/foo.js も /123 と同様に処理 |
キャッシュがURL末尾の拡張子を元に保存判断 | .css や.js 付きだと静的と判断 |
被害者のセッション状態でアクセスさせる方法がある | リンク、XSS、メールなど |
🧰 自動化支援ツール
- Burp Scanner(Pro版):監査時にWeb Cache Deceptionの検出可能
- Web Cache Deception Scanner(BApp拡張):キャッシュ挙動を自動でテスト
✅ まとめ
テスト内容 | 方法 |
---|---|
サーバーがURLをどう解釈しているか | パスを追加してもレスポンスが変わるか確認 |
キャッシュが何を保存するか | 拡張子付きURLに変えて、キャッシュが効くか確認 |
拡張子の効果 | .css , .js , .ico など様々な拡張子で試す |
Best regards, (^^ゞ