Un ataque Cross-Site Request Forgery (CSRF), también conocido como XSRF o ataque de “falsificación de solicitudes en sitios cruzados”, es un tipo de ataque donde un atacante engaña a un usuario autenticado para que realice acciones no intencionadas en una aplicación web en la que ya ha iniciado sesión.

¿Cómo funciona un CSRF?

Un ataque CSRF explota la confianza que una aplicación web tiene en el navegador del usuario. Aquí tienes un desglose de cómo ocurre:

  • El usuario inicia sesión en una aplicación web legítima:

    • Por ejemplo, el usuario inicia sesión en un banco en línea con su cuenta (www.banco.com) y el servidor almacena una cookie de sesión para autenticarlo en futuras solicitudes.
  • El atacante prepara un enlace malicioso:

    • El atacante crea un enlace o un formulario que realiza una acción en la aplicación web legítima. Por ejemplo:
      html
      <img src="http://www.banco.com/transferir?cuenta=12345&monto=1000" />

      O un formulario oculto:

      html
      <form action="http://www.banco.com/transferir" method="POST">
      <input type="hidden" name="cuenta" value="12345" />
      <input type="hidden" name="monto" value="1000" />
      </form>
      <script>
      document.forms[0].submit();
      </script>
  • El atacante envía el enlace o formulario al usuario:

    • Esto puede ocurrir por medio de un correo electrónico, un mensaje en redes sociales o un enlace incrustado en un sitio web que el usuario visita.
  • El usuario, sin saberlo, activa la acción maliciosa:

    • Si el usuario está autenticado en la aplicación web (por ejemplo, el banco), el navegador enviará automáticamente las cookies de sesión con la solicitud al servidor del banco.
  • El servidor ejecuta la solicitud:

    • Como el servidor confía en la cookie de sesión del usuario, no distingue que la solicitud fue iniciada por un tercero. Entonces, realiza la acción (como una transferencia de dinero).

Ejemplo práctico de un ataque CSRF

Imagina que estás autenticado en un sitio web de compras (www.tienda.com) y el atacante te envía un correo con un enlace a una imagen:

<img src="http://www.tienda.com/cambiar_direccion?direccion=123%20Falsa%20Calle" />

Cuando haces clic en el enlace o visitas una página que contiene ese código, tu navegador envía la solicitud al servidor de la tienda con tus cookies de sesión. La tienda cree que fue una acción legítima de tu parte y cambia tu dirección de envío sin que te des cuenta.

Mitigación de ataques CSRF

  1. Tokens CSRF (anti-CSRF tokens):

    • Generar un token único y difícil de adivinar para cada sesión o formulario. Este token debe enviarse junto con cualquier solicitud sensible. El servidor verifica que el token sea válido antes de ejecutar la acción.
    • Ejemplo de implementación:
      • El servidor genera un token csrf_token y lo incluye en el formulario:

        <input type="hidden" name="csrf_token" value="d93h29jv9r2h" />

      • El servidor valida el token al recibir la solicitud.
  2. Verificación del Referer o Origin:

    • Configurar el servidor para verificar que las solicitudes provengan del dominio legítimo antes de procesarlas.
  3. Autenticación con cabeceras personalizadas:

    • Usar cabeceras personalizadas que los navegadores no envían por defecto. Esto requiere que el atacante use código JavaScript para incluirlas, pero las restricciones de CORS lo dificultan.
  4. Usar SameSite Cookies:

    • Configurar las cookies como SameSite para que solo se envíen con solicitudes originadas desde el mismo dominio.
      • Ejemplo: Set-Cookie: session_id=abc123; SameSite=Strict

Diferencia entre CSRF y XSS

Aunque ambos son ataques que explotan vulnerabilidades en aplicaciones web, son distintos:

  • CSRF: Se aprovecha de la confianza de la aplicación en el navegador del usuario.
  • XSS (Cross-Site Scripting): Se aprovecha de la confianza del usuario en la aplicación, inyectando scripts maliciosos en el navegador.

Cómo Detectar Ataques CSRF en Aplicaciones Web

Detectar un ataque CSRF puede ser un desafío porque estos ataques se presentan como solicitudes aparentemente legítimas provenientes de usuarios autenticados. Sin embargo, existen técnicas y herramientas que pueden ayudarte a identificar posibles vulnerabilidades o patrones sospechosos en tus sistemas.


1. Revisar Solicitudes Entrantes

  • Examina los registros de solicitudes HTTP para detectar patrones anómalos, como acciones críticas (transferencias, cambios de configuración, etc.) realizadas en momentos inesperados o desde IPs/geolocalizaciones distintas a las habituales.

Indicadores comunes de un posible ataque:

  • Solicitudes HTTP sin tokens CSRF (si ya los implementaste).
  • Referer o Origin ausentes o provenientes de un dominio no autorizado.
  • Acciones sensibles ejecutadas repetidamente en un corto período.

2. Analizar la Implementación de Seguridad Actual

  • Revisión manual:
    • Inspecciona los formularios y endpoints críticos de tu aplicación para verificar si incluyen un token anti-CSRF.
    • Confirma que las cookies sensibles están configuradas con la política SameSite adecuada.
  • Verificación automática:
    • Usa herramientas como Burp Suite o OWASP ZAP para identificar formularios o solicitudes que carecen de tokens CSRF o cabeceras personalizadas.

3. Escanear con Herramientas de Seguridad

  • Existen herramientas automatizadas que pueden ayudarte a simular ataques CSRF y detectar vulnerabilidades:

Herramientas populares:

  • Burp Suite: Permite realizar pruebas automáticas de CSRF en formularios y solicitudes POST.
  • OWASP ZAP (Zed Attack Proxy): Detecta endpoints sin medidas de protección contra CSRF.
  • Acunetix: Escáner web que detecta múltiples tipos de vulnerabilidades, incluidos problemas de CSRF.
  • Nikto: Aunque más generalista, puede señalar configuraciones web que facilitan ataques CSRF.

4. Realizar Pruebas Manuales de Penetración

  • Los pentesters suelen emplear técnicas como:
    • Crear un formulario HTML en un servidor externo que replique las solicitudes críticas de la aplicación y enviarlas con las cookies del navegador del usuario.
    • Probar si endpoints críticos permiten solicitudes sin el token anti-CSRF.
    • Usar proxies para interceptar y modificar solicitudes para observar el comportamiento del servidor.

Ejemplo de prueba manual:

  • Si tu aplicación tiene un formulario para cambiar la contraseña:
    html
    <input type="hidden" name="password" value="nuevo_password" />
    </form>
    • Intenta replicar este formulario en una página externa y verifica si el servidor acepta la solicitud.
  • <form action=“http://tu-app.com/change_password” method=“POST”>

5. Análisis de Referer y Origin

  • Las solicitudes legítimas suelen contener una cabecera Referer o Origin que indica su procedencia.
  • Implementa un sistema que registre y analice estas cabeceras. Si la solicitud proviene de un dominio desconocido, podría ser un ataque CSRF.

6. Revisar las Prácticas de Gestión de Sesiones

  • Asegúrate de que las cookies de sesión tengan configuraciones seguras:
    • SameSite: Restringe el envío de cookies solo a solicitudes originadas desde tu dominio.
    • Secure: Solo permite el uso de cookies en conexiones HTTPS.
    • HttpOnly: Evita el acceso de scripts del lado del cliente a cookies sensibles.

7. Monitoreo y Alerta

  • Implementa sistemas de monitoreo para detectar y alertar sobre comportamientos anómalos, como:
    • Transferencias o cambios de configuración repetidos.
    • Acciones sensibles iniciadas desde IPs sospechosas o fuera del horario habitual.

Herramientas útiles:

  • SIEMs (Security Information and Event Management) como Splunk, Elastic SIEM o Wazuh.
  • Herramientas de monitoreo de tráfico como Wireshark para analizar patrones.

8. Implementar Políticas de Seguridad en los Navegadores

  • Configura las siguientes políticas para protegerte mejor:
    • Content Security Policy (CSP): Aunque no es específica contra CSRF, puede ayudar a mitigar otros ataques combinados, como CSRF + XSS.
    • Restricción de métodos HTTP: Limita los métodos como PUT, DELETE o POST a solicitudes legítimas.

Recursos Adicionales

  • OWASP CSRF Prevention Cheat Sheet: Una guía completa sobre cómo prevenir y detectar CSRF.
  • Pruebas de seguridad manual con Kali Linux: Kali incluye herramientas útiles para realizar simulaciones y detectar vulnerabilidades.

En Ti Rescue, ofrecemos servicios especializados para proteger a las organizaciones contra estas amenazas. Contáctanos para fortalecer la seguridad de tus datos y prevenir ataques dirigidos.

🚀 ¡Contáctanos ahora!

Suscríbete a Nuestro Blog: Mantente actualizado con las últimas noticias y consejos en ciberseguridad. Suscríbete ahora.