Shikata Ga Nai

Private? There is no such things.

Web Cache Deception 診断マニュアル

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. 診断の基本戦略

  1. 機密ページURLに .css, .jpg, .html などの拡張子を意図的に追加
  2. ログイン済みの状態でそのURLにアクセス(本来キャッシュされないページを強制的にキャッシュ)
  3. ログアウト後、または別のユーザでそのURLにアクセス
  4. 前のユーザの情報が表示されたら脆弱性あり

🧪 4. テスト例と期待される挙動

🧪 テストURL(通常ページ)

https://example.com/account

🧪 テストURL(WCDペイロード付き)

https://example.com/account/style.css

✅ 正常(安全)な挙動:

  • style.cssにアクセスしてもログインページへリダイレクト
  • キャッシュされない or エラー

❌ 危険な挙動:

  • ログイン中にアクセスすると、ユーザ情報が表示されたままキャッシュされる
  • 他のユーザが同じURLにアクセスしても、その内容が見える

🛠️ 5. テスト手順

  1. ユーザAでログイン
  2. https://example.com/account/something.css にアクセス
  3. 表示された内容がユーザAのデータであることを確認
  4. ログアウト、またはユーザBで同じURLを開く
  5. ユーザ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, (^^ゞ