Shikata Ga Nai

Private? There is no such things.

LAB: パスマッピングの違いを悪用したWebキャッシュデセプション攻撃

Hello there, ('ω')ノ

🎯 このラボの目的

このラボでは、Webキャッシュデセプション(Web Cache Deception, WCD)攻撃を利用して、他ユーザー(carlos)のAPIキーを取得する方法を学びます。WCD攻撃は、キャッシュサーバーとオリジンサーバーのURLパスマッピングの違いを悪用し、動的なコンテンツを誤ってキャッシュさせる手法です。


🧪 攻撃の手順

1. ターゲットエンドポイントの特定

  1. Burp Suiteのブラウザで、wiener:peterの資格情報を使用してアプリケーションにログインします。
  2. /my-accountページにアクセスし、レスポンスに自分のAPIキーが含まれていることを確認します。

2. パスマッピングの違いの特定

  1. Burp SuiteのProxyタブで、GET /my-accountリクエストを右クリックし、「Send to Repeater」を選択します。
  2. Repeaterタブで、パスを/my-account/abcに変更し、リクエストを送信します。

    • レスポンスにAPIキーが含まれていれば、オリジンサーバーが追加のパスセグメントを無視していることを示しています。
  3. パスを/my-account/abc.jsに変更し、リクエストを送信します。

    • レスポンスヘッダーにX-Cache: missCache-Control: max-age=30が含まれていれば、キャッシュがこのレスポンスを保存する可能性があります。
  4. 同じリクエストを30秒以内に再送信し、X-Cache: hitに変わっていれば、レスポンスがキャッシュから提供されていることを示しています。

3. 悪意のあるURLの作成と配信

  1. Burp Suiteのブラウザで、「Go to exploit server」をクリックします。

  2. Bodyセクションに以下のスクリプトを入力し、YOUR-LAB-IDを実際のラボIDに置き換えます。

   <script>
     document.location="https://YOUR-LAB-ID.web-security-academy.net/my-account/wcd.js"
   </script>
  1. 「Deliver exploit to victim」をクリックして、carlosユーザーにこのURLを開かせます。

    • carlosがこのURLにアクセスすると、そのレスポンスがキャッシュに保存されます。

4. キャッシュされたレスポンスからAPIキーを取得

  1. ブラウザで以下のURLにアクセスします。
   https://YOUR-LAB-ID.web-security-academy.net/my-account/wcd.js
  1. レスポンスにcarlosのAPIキーが含まれていることを確認し、コピーします。

  2. ラボの「Submit solution」セクションにAPIキーを入力して、ラボを完了します。


🧠 攻撃成功のポイント

  • オリジンサーバーのパス解釈: オリジンサーバーが追加のパスセグメント(例: /abc)を無視するかどうかを確認します。
  • キャッシュサーバーの拡張子ルール: キャッシュサーバーが特定の拡張子(例: .js)を持つリクエストをキャッシュするかどうかを確認します。
  • キャッシュの有効期間: Cache-Controlヘッダーのmax-age値を確認し、キャッシュの有効期間内にリクエストを再送信して、キャッシュが機能していることを確認します。

✅ まとめ

このラボでは、オリジンサーバーとキャッシュサーバーのURLパスマッピングの違いを悪用して、他ユーザーの機密情報を取得するWebキャッシュデセプション攻撃の手法を学びました。実際のアプリケーションでも、同様の脆弱性が存在する可能性があるため、キャッシュの設定やURLの処理方法には注意が必要です。

Best regards, (^^ゞ