CSRF - Cross-Site Request Forgery explicado
Lectura de 2 min aprox.
El CSRF (Cross-Site Request Forgery, falsificación de petición en sitios cruzados) es un ataque en el que el atacante hace que un usuario envíe una petición maliciosa no intencionada a un servicio web en el que el usuario ya está autenticado. Como abusa de las credenciales (cookies) del servicio en el que el usuario tiene la sesión iniciada, la petición se procesa como si el propio usuario la hubiera realizado. Junto con el XSS, es uno de los ataques a aplicaciones web más representativos. A fecha de 2025, los principales frameworks (Django, Rails, Next.js) incorporan protección contra CSRF de forma predeterminada, pero se siguen reportando fallos de implementación en endpoints de API y en SPA.
Dónde suelen producirse las carencias de protección
La protección contra CSRF suele estar implementada en las funciones más visibles, como el inicio de sesión o las transferencias de dinero, pero a menudo falta en las API individuales de cambio de configuración, como las de actualizar la dirección de envío o el correo electrónico. Los valores predeterminados de los frameworks protegen principalmente los envíos mediante formularios, por lo que los endpoints de API añadidos posteriormente pueden quedar desprotegidos si los desarrolladores no los tratan de forma explícita. Como la presencia o ausencia de protección no se ve en pantalla, las evaluaciones de vulnerabilidades examinan una a una las peticiones que cambian el estado para descubrir esas carencias. Incluso la API de una función aparentemente menor importa, porque puede dar al atacante una vía para reescribir la configuración de un usuario con la sesión iniciada.
El flujo de un ataque CSRF
El mecanismo de un ataque CSRF
El atacante prepara una página web trampa y le inserta una petición dirigida a un servicio en el que el usuario tiene la sesión iniciada. Por ejemplo, si un usuario visita la página del atacante mientras sigue con la sesión iniciada en el sitio de un banco, el navegador envía automáticamente una petición de transferencia de dinero al sitio del banco. Como el navegador envía las cookies de forma automática, el sitio del banco no puede distinguir esa petición de una hecha por un usuario legítimo.
Escenarios de daño reales
Hay casos en los que, estando con la sesión iniciada en un sitio de comercio electrónico, al hacer clic en un enlace colocado por un atacante la dirección de envío se cambia a la del atacante. También se han reportado daños en los que, al visitar una página trampa con la sesión iniciada en una red social, se realizan publicaciones o seguimientos no deseados. Cuando se combina con el secuestro de sesión, el daño se vuelve aún más grave. En la banca en línea, la protección contra CSRF en las operaciones de transferencia de dinero es especialmente importante.
Técnicas de defensa
Por parte del desarrollador, la medida estándar es insertar un token CSRF (un valor único y aleatorio) en los formularios y verificarlo cuando se realiza la petición. Configurar el atributo SameSite de las cookies permite restringir el envío de cookies entre sitios. Por parte del usuario, lo básico es adquirir el hábito de cerrar sesión tras las operaciones importantes y no hacer clic en enlaces sospechosos. Proteger tu cuenta con una contraseña aleatoria robusta y habilitar la autenticación multifactor puede mitigar el daño en caso de que ocurra lo peor.
¿Te resultó útil este artículo?