🛡️ Informe: Cross-Site Request Forgery (CSRF) en DVWA
📌 1. ¿Qué es CSRF?
Cross-Site Request Forgery (CSRF) es una vulnerabilidad web que permite a un atacante engañar a un usuario autenticado para que realice acciones no deseadas en una aplicación web en la que ya tiene sesión iniciada.
En otras palabras, el atacante no necesita robar la sesión, sino que aprovecha la sesión activa del usuario para ejecutar peticiones en su nombre.
🧠 Ejemplo sencillo:
Si un usuario está logueado en una web y visita una página maliciosa, esa página puede enviar automáticamente una petición (por ejemplo, cambiar contraseña) sin que el usuario lo note.

⚙️ 2. CSRF en DVWA
En DVWA (Damn Vulnerable Web Application), la vulnerabilidad CSRF se encuentra en el módulo donde se permite cambiar la contraseña del usuario.
🔎 Funcionamiento vulnerable:
- El sistema permite cambiar la contraseña mediante una petición GET o POST.
- No valida tokens CSRF.
- No verifica el origen de la petición.
Esto permite que cualquier petición válida pueda ser ejecutada desde otra web.
💣 3. Explotación de la vulnerabilidad
🎯 Objetivo:
Cambiar la contraseña de un usuario sin su consentimiento.
🧾 Paso 1: Identificar la petición
Ejemplo de URL vulnerable:
http://dvwa.local/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change
Si el usuario está autenticado, acceder a esa URL cambia la contraseña.
🧨 Paso 2: Crear el payload
Se puede crear un archivo HTML malicioso:

🚀 Paso 3: Ejecución del ataque
- El atacante envía el archivo al usuario (phishing, enlace, etc.).
- El usuario abre el archivo mientras está logueado en DVWA.
- La petición se ejecuta automáticamente.
- La contraseña se cambia sin que el usuario lo note.
🔍 4. ¿Cómo detectar CSRF?
🧪 Indicadores clave:
- No existen tokens CSRF en formularios.
- Las peticiones sensibles funcionan solo con parámetros (GET/POST).
- No hay validación de:
- Referer
- Origin
- Acciones críticas (cambiar contraseña, email, etc.) no requieren confirmación adicional.
🛠️ Herramientas útiles:
- Burp Suite
- OWASP ZAP
- Navegador (inspección manual de formularios)
🛡️ 5. Cómo prevenir CSRF
✅ 1. Uso de tokens CSRF
- Generar un token único por sesión.
- Incluirlo en formularios.
- Validarlo en el servidor.
<input type="hidden" name="csrf_token" value="random_token">
✅ 2. Verificación del encabezado Origin/Referer
- Asegurar que la petición proviene del dominio legítimo.
✅ 3. Uso de cookies con atributo SameSite
Set-Cookie: session=abc123; SameSite=Strict
- Strict: bloquea envíos desde otros sitios.
- Lax: permite algunos casos controlados.
✅ 4. Autenticación adicional
- Requerir contraseña actual para cambios sensibles.
- Implementar MFA (autenticación multifactor).
✅ 5. Métodos HTTP adecuados
- Evitar usar GET para acciones críticas.
- Usar POST/PUT con validaciones.
⚠️ 6. Impacto de la vulnerabilidad
- Cambio de contraseñas
- Transferencias no autorizadas
- Modificación de datos del usuario
- Escalada de privilegios
🧾 7. Conclusión
La vulnerabilidad CSRF es peligrosa porque no necesita explotar fallos técnicos complejos, sino confiar en el comportamiento del navegador y la sesión del usuario.
En DVWA se observa claramente cómo la falta de controles permite explotar fácilmente esta vulnerabilidad.
Implementar medidas como tokens CSRF, validación de origen y cookies seguras es fundamental para proteger cualquier aplicación web.
