Cross-Site Request Forgery (CSRF) es un ataque que engaña a un usuario para que realice una acción no deseada en una aplicación web en la que está autenticado. Este tipo de ataque explota la confianza que una aplicación web tiene en un usuario autenticado.
Resumen: Un ataque CSRF obliga a un usuario con sesión iniciada a enviar, sin saberlo, una solicitud maliciosa a un sitio web, como cambiar su dirección de correo electrónico o transferir fondos sin su consentimiento. Piénsalo como un actor de amenazas que secuestra tu sesión autenticada para hacer cosas en tu nombre.
¿Qué es Cross-Site Request Forgery (CSRF)?
Cross-Site Request Forgery, a menudo llamado CSRF o XSRF, es una de las amenazas de ciberseguridad más engañosas que existen. Es un ataque que obliga a un usuario final a ejecutar acciones no deseadas en una aplicación web en la que tiene la sesión iniciada. El objetivo de un ataque CSRF es explotar la confianza que una aplicación web tiene en un usuario.
Entonces, ¿cómo funciona esto en realidad? Vamos a analizarlo.
Imagina que tienes la sesión iniciada en tu sitio de banca en línea. Sin cerrar sesión, abres una nueva pestaña y visitas otro sitio web, quizás uno que te llegó en un correo de phishing o en un foro sospechoso. Ese otro sitio podría tener código oculto que envía automáticamente una solicitud de vuelta a tu banco. Como sigues autenticado con tu banco, el servidor del banco ve esta solicitud como legítima y la procesa. ¡Listo! Podrías haber transferido dinero o cambiado los datos de tu cuenta sin darte cuenta.
¿Cómo funciona un ataque CSRF?
Para que un ataque CSRF tenga éxito, deben coincidir algunas condiciones:
-
Acción relevante: El atacante necesita una acción objetivo que pueda desencadenar. Puede ser desde cambiar una contraseña, hacer una compra o enviar un mensaje. Cuanto más privilegios tenga el usuario, mayor será el daño posible.
-
Manejo de sesión basado en cookies: La aplicación debe depender únicamente de las cookies de sesión para identificar al usuario que hace las solicitudes. El navegador incluye automáticamente estas cookies en cada solicitud al sitio.
-
Ausencia de parámetros impredecibles: La solicitud maliciosa no debe requerir parámetros que el atacante no pueda determinar o adivinar. Si la solicitud necesita un token de autenticación secreto, por ejemplo, el ataque probablemente fallará.
Un método común de entrega para un ataque CSRF es a través de un enlace malicioso o una etiqueta de imagen HTML especialmente diseñada. Por ejemplo, un atacante podría incrustar una etiqueta de imagen en un correo electrónico que apunte a una URL que realiza una acción, como:
< img src="http://yourbank.com/transfer?amount=1000&to=hacker" width="0" height="0" >
Cuando tu navegador intenta cargar esta "imagen", en realidad envía una solicitud a tu banco para transferir $1.000. Como ya tienes la sesión iniciada, el banco la procesa. Qué mal.
Ejemplo del mundo real
Nuestro equipo examinó una vulnerabilidad en ConnectWise Control, reportada originalmente por Bishop Fox (asignada como CVE-2019-16513). En este caso, la aplicación carecía de protección CSRF, lo que significa que si un usuario autenticado visitaba un sitio web malicioso de terceros, un script oculto podía enviar solicitudes de API no autorizadas, como deshabilitar alertas de seguridad, sin el conocimiento ni el consentimiento del usuario.
Una vez validado que, tras aplicar los parches y endurecer las políticas de CORS, la prueba de concepto CSRF específica ya no funcionaba. Sin embargo, la lección más amplia sigue vigente: incluso cuando existen otras defensas, la ausencia de tokens CSRF puede seguir abriendo la puerta a acciones no autorizadas y encubiertas en nombre de un usuario, lo que subraya por qué las protecciones CSRF son esenciales para modificar datos en nombre de usuarios autenticados
Prevención de CSRF: cómo detenerlo
Por suerte, existen formas sólidas de defenderse contra este tipo de amenazas de ciberseguridad. La mayoría de los frameworks modernos de desarrollo web tienen protecciones integradas, pero vale la pena saber cuáles son.
-
Tokens anti-CSRF: La defensa más común y robusta es el uso de tokens anti-CSRF. La aplicación genera un token único e impredecible para cada sesión de usuario y lo incrusta en campos ocultos dentro de los formularios. Cuando un usuario envía el formulario, el token se envía de vuelta al servidor, que lo valida. Como un atacante no puede adivinar este token, no puede forjar una solicitud válida. Como explica ≈, una organización sin fines de lucro líder enfocada en la seguridad del software, este método es muy eficaz.
-
Cookies SameSite: Este es un mecanismo de seguridad a nivel de navegador que los desarrolladores pueden usar para controlar si las cookies se envían con solicitudes entre sitios. Al configurar el atributo SameSite de una cookie en Strict o Lax, un desarrollador puede evitar que el navegador envíe la cookie de sesión con una solicitud entre sitios, lo cual neutraliza el ataque CSRF. Puedes encontrar más detalles técnicos sobre este método en recursos comolos consejos de seguridad de CISA (Agencia de Ciberseguridad e Infraestructura).
-
Interacción del usuario: Requerir la interacción del usuario para acciones sensibles, como volver a ingresar una contraseña o resolver una prueba CAPTCHA antes de cambiar una dirección de correo electrónico, también puede prevenir el CSRF. Esto asegura que el usuario legítimo esté presente y dando su consentimiento a la acción.
Puntos clave
Cross-Site Request Forgery (CSRF) es un ataque que engaña a los usuarios autenticados para que realicen acciones que no pretendían hacer. Esta amenaza de ciberseguridad funciona explotando la confianza que una aplicación tiene en el navegador de un usuario con sesión iniciada. Los ataques CSRF exitosos pueden provocar transferencias de fondos no autorizadas, robo de datos o la toma completa de la cuenta. Las mejores defensas incluyen el uso de tokens anti-CSRF y la implementación de cookies SameSite para validar que las solicitudes provienen de la aplicación original, y no de un sitio malicioso de terceros.