CSRF (Cross-Site Request Forgery)
🌐 Vulnerabilidad: Cross-Site Request Forgery (CSRF)
🕵️♂️ ¿Qué es CSRF?
Cross-Site Request Forgery (CSRF) es una vulnerabilidad 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 tiene sesión activa. Esto se logra enviando solicitudes maliciosas en nombre del usuario sin su conocimiento.
⚙️ ¿Cómo se produce?
El usuario tiene sesión activa en un sitio web legítimo (por ejemplo, un banco).
El atacante envía una solicitud maliciosa al usuario:
Puede ser un enlace, una imagen, un formulario oculto o un script.
El navegador del usuario envía la solicitud al servidor, incluyendo automáticamente las cookies de autenticación del usuario.
El servidor procesa la solicitud como si hubiera sido legítimamente iniciada por el usuario.
🛠️ Mecanismo de ataque
Ejemplo de formulario malicioso:
El atacante puede engañar al usuario para que cargue esta página o enlace, lo que provocará una transferencia no autorizada.
🎯 Impacto
Transacciones no autorizadas: Transferencias de dinero o compras.
Modificación de datos: Cambiar contraseñas, correos electrónicos o configuraciones de cuenta.
Robo de información: Acceso a datos personales o confidenciales.
Ejecución de acciones administrativas: Si el usuario atacado tiene privilegios altos, el impacto puede ser devastador.
📉 Puntaje CVSS v3
Vector de ataque: Red
Complejidad del ataque: Baja (no requiere autenticación)
Impacto en confidencialidad: Alto
Impacto en integridad: Alto
Impacto en disponibilidad: Medio
Puntaje CVSS v3: 7.0 - 8.8 (Alto) ⚠️
🧑💻 Ejemplo práctico
Código vulnerable en PHP:
Ataque: El atacante envía un enlace al usuario, que carga automáticamente el formulario malicioso:
🛡️ ¿Cómo prevenir CSRF?
1️⃣ Tokens CSRF
Genera un token único para cada sesión o formulario y verifica que esté presente en cada solicitud.
Ejemplo en PHP:
En el servidor, verifica el token:
2️⃣ Validación del encabezado de referencia (Referer o Origin)
Verifica que las solicitudes provengan de una URL legítima:
3️⃣ Métodos seguros
Evita realizar operaciones críticas con métodos GET. Usa POST para cambios de estado.
4️⃣ Implementar SameSite Cookies
Configura las cookies para que solo se envíen en solicitudes del mismo sitio:
5️⃣ Uso de bibliotecas seguras
Frameworks como Django o Laravel tienen mecanismos CSRF incorporados. Aprovéchalos.
6️⃣ Autenticación en cada acción sensible
Solicita al usuario autenticarse nuevamente para acciones críticas como transferencias.
💡 Dato extra: CSRF es más efectivo cuando los usuarios son administradores o tienen privilegios altos, ya que el atacante puede realizar acciones devastadoras.
🚨 Nota importante: Aunque los tokens CSRF son la defensa más efectiva, deben usarse correctamente y almacenarse de manera segura.
Última actualización
¿Te fue útil?