Hello there, ('ω')ノ
🎯 1. Web Cache Deception とは?
Web Cache Deception(WCD)とは、本来キャッシュされるべきでない機密ページ(ユーザ情報など)を強制的にキャッシュさせて、他のユーザが閲覧可能にしてしまう攻撃です。
🧠 どんな仕組み?
- Webキャッシュは 静的ファイル(.css, .js など)をキャッシュする
- 攻撃者が
.css
などの拡張子を使って、本来キャッシュされないURLをキャッシュさせる - そのURLにユーザがログイン状態でアクセスすると、そのページ内容がキャッシュされる
- 他のユーザが同じURLを開くと、前のユーザの機密情報が表示される
🧭 2. チェック対象となるページ・機能
対象 | チェックポイント |
---|---|
🔐 認証後のユーザページ | /profile , /dashboard , /settings |
📄 クレジットカード・注文履歴ページ | /billing , /order/1234 |
📨 個人情報が表示されるページ | /account , /user/settings |
🌐 動的コンテンツURL | .php , .aspx , /view?id=xxx など |
🔍 3. 診断の基本戦略
- 機密ページURLに
.css
,.jpg
,.html
などの拡張子を意図的に追加 - ログイン済みの状態でそのURLにアクセス(本来キャッシュされないページを強制的にキャッシュ)
- ログアウト後、または別のユーザでそのURLにアクセス
- 前のユーザの情報が表示されたら脆弱性あり
🧪 4. テスト例と期待される挙動
🧪 テストURL(通常ページ)
https://example.com/account
🧪 テストURL(WCDペイロード付き)
https://example.com/account/style.css
✅ 正常(安全)な挙動:
- style.cssにアクセスしてもログインページへリダイレクト
- キャッシュされない or エラー
❌ 危険な挙動:
- ログイン中にアクセスすると、ユーザ情報が表示されたままキャッシュされる
- 他のユーザが同じURLにアクセスしても、その内容が見える
🛠️ 5. テスト手順
- ユーザAでログイン
https://example.com/account/something.css
にアクセス- 表示された内容がユーザAのデータであることを確認
- ログアウト、またはユーザBで同じURLを開く
- ユーザAの情報が表示されたら脆弱性あり
📌 6. よく使う拡張子の例(キャッシュ誘導用)
拡張子 | 備考 |
---|---|
.css |
一般的によく使われる |
.jpg |
画像用に見せかける |
.html |
静的ページ風に見せかける |
.js |
JSファイルとして見せかける |
ペイロード形式例:
/profile → /profile.jpg /settings → /settings/abc.css
🔐 7. 防止策・チェックポイント
対策 | 内容 |
---|---|
キャッシュ制御ヘッダの設定 | Cache-Control: private, no-store を機密ページに適用 |
パス拡張子による処理の明確化 | .css などの偽装URLでも必ず認証チェックを実施する |
CDNやWAFのキャッシュルール確認 | キャッシュの対象パスを明確に制限する |
すべてのユーザ固有ページに no-cache |
パーソナライズされたデータは絶対にキャッシュさせない |
🧰 8. 補助ツール・確認方法
- ブラウザ開発者ツール(Network タブで
from disk cache
等を確認) - Burp Suite(Proxy + Repeater)
- curl で
-I
を使い、キャッシュ関連ヘッダをチェック:
curl -I https://example.com/account.css
📓 補足:診断対象の見つけ方
- 認証後に表示される 「個人情報を含むページ」
- URLにパラメータが不要な シンプルなパス形式
- JavaScriptやCSSなどの 静的ファイルと誤認されるURL構造
Best regards, (^^ゞ