Shikata Ga Nai

Private? There is no such things.

LAB: CSRFトークン検証がリクエストメソッドに依存しているケースの攻略

Hello there, ('ω')ノ

🎯 ラボの概要

このラボでは、メールアドレス変更機能がCSRFトークンを使用して保護されていますが、POSTリクエストに対してのみトークン検証が行われ、GETリクエストでは検証がスキップされるという脆弱性があります。


🧪 攻略手順

1️⃣ 自分のアカウントにログイン

  • Burp Suiteのブラウザを使用して、wiener:peterの資格情報でログインします。

2️⃣ メールアドレス変更リクエストを確認

  • 「Update email」フォームを送信し、BurpのProxyでリクエストを確認します。
  • このリクエストはPOSTメソッドで、csrfパラメータが含まれています。

3️⃣ CSRFトークンの検証を確認

  • リクエストをBurp Repeaterに送信し、csrfパラメータの値を変更して再送信します。
  • サーバーがリクエストを拒否することを確認します。

4️⃣ リクエストメソッドをGETに変更

  • 同じリクエストをGETメソッドに変更し、再送信します。
  • サーバーがcsrfトークンを検証せずにリクエストを受け入れることを確認します。

5️⃣ CSRF攻撃用のHTMLを作成

  • 以下のHTMLフォームを作成します(YOUR-LAB-IDは実際のラボのIDに置き換えてください):
  <form action="https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email">
      <input type="hidden" name="email" value="attacker%40example.com">
  </form>
  <script>
      document.forms[0].submit();
  </script>
  • このフォームは、ユーザーがアクセスすると自動的に送信され、メールアドレスを変更します。

6️⃣ エクスプロイトサーバーにHTMLをアップロード

  • ラボが提供するエクスプロイトサーバーにアクセスし、作成したHTMLを「Body」セクションに貼り付けて「Store」をクリックします。

7️⃣ 攻撃の検証と実行

  • 「View exploit」をクリックして、自分自身で攻撃が成功することを確認します。
  • メールアドレスが変更されたことを確認したら、HTML内のメールアドレスを他のユーザーと重複しないものに変更します。
  • 「Deliver to victim」をクリックして、ラボを解決します。

🧠 攻略のポイント

  • CSRFトークンの検証がリクエストメソッドに依存している場合、攻撃者は検証が行われないメソッド(この場合はGET)を使用して攻撃を実行できます。
  • 状態変更を伴う操作にはPOSTメソッドを使用し、すべてのリクエストメソッドに対してCSRFトークンの検証を行うことが重要です。

✅ まとめ

このラボでは、CSRFトークンの検証がPOSTリクエストに対してのみ行われているという実装ミスを突いて、GETリクエストを使用したCSRF攻撃を実行しました。

このような脆弱性を防ぐためには、すべての状態変更操作に対して適切なHTTPメソッドを使用し、すべてのリクエストメソッドに対してCSRFトークンの検証を行うことが重要です。

Best regards, (^^ゞ