CSRF son las siglas en inglés de “Cross-Site Request Forgery” (falsificación de petición en sitios cruzados), una técnica de ataque en la que un atacante engaña a un usuario para que realice acciones no deseadas en un sitio web legítimo en el que el usuario está autenticado.
Funcionamiento del CSRF
El CSRF (Cross-Site Request Forgery) es un tipo de ataque en el que un atacante engaña a un usuario autenticado para que realice acciones no deseadas en un sitio web en el que el usuario tiene una sesión abierta. El atacante logra esto al hacer que el usuario visite una página web maliciosa que contiene código que envía solicitudes HTTP a otro sitio web en nombre del usuario, sin que este lo sepa. Aquí te explico cómo funciona el CSRF:
- Sesión de Usuario Autenticada: El usuario inicia sesión en un sitio web legítimo (por ejemplo, su banco) y establece una sesión válida en el servidor. Esta sesión se identifica a través de una cookie o un token de sesión.
- Visita de una Página Maliciosa: Mientras la sesión del usuario en el sitio legítimo aún está activa, el usuario visita una página web maliciosa (generalmente por medio de un enlace o imagen en un correo electrónico, foro, o sitio web comprometido). Esta página maliciosa contiene código que realiza solicitudes HTTP a sitios web legítimos en nombre del usuario sin su conocimiento.
- Solicitud HTTP Fraudulenta: El código malicioso en la página web hace que el navegador del usuario realice solicitudes HTTP a acciones importantes en el sitio web legítimo. Por ejemplo, podría hacer que se realice una transferencia de dinero o que se cambie la contraseña del usuario en el sitio web legítimo.
- Ejecución de la Solicitud CSRF: El navegador del usuario, que ya tiene una sesión válida en el sitio web legítimo, incluye automáticamente las cookies o tokens de sesión en las solicitudes HTTP generadas por el código malicioso. Como resultado, el servidor del sitio web legítimo recibe y procesa la solicitud como si fuera legítima, ya que las credenciales del usuario se utilizan sin su consentimiento.
- Efecto en el Usuario: El ataque CSRF se lleva a cabo sin que el usuario sea consciente de ello. Puede que ni siquiera note que se realizaron acciones no deseadas en su cuenta.
¿Cómo prevenir ataques de CSRF?
Para prevenir ataques CSRF, los desarrolladores de sitios web pueden implementar medidas de seguridad.
Utiliza Tokens Anti-CSRF
- Genera un token único y aleatorio para cada sesión de usuario y asegúrate de que este token se incluya en cada formulario o solicitud que realice cambios en el estado del servidor.
- Verifica que el token enviado por el usuario coincida con el token asociado a su sesión en el servidor antes de procesar la solicitud.
Implementa CORS de manera Adecuada
- Configura correctamente las políticas de CORS (Cross-Origin Resource Sharing) para limitar las solicitudes solo a los dominios específicos que deberían tener acceso a tu aplicación web.
- Utiliza encabezados como Origin y Access-Control-Allow-Origin para controlar las solicitudes cruzadas.
Utiliza el Encabezado SameSite para Cookies
- Configura las cookies de sesión con el atributo “SameSite” para limitar su acceso a solicitudes del mismo sitio (Same-Site Cookies).
- Esto evita que las cookies se envíen en solicitudes cruzadas y ayuda a prevenir ataques CSRF.
Establece Cookies como HttpOnly
- Marca las cookies de sesión como “HttpOnly” para que no puedan ser accedidas ni modificadas por JavaScript. Esto reduce la exposición de las cookies a ataques CSRF.
Valida el Origen de las Solicitudes
- Verifica que las solicitudes entrantes provengan de fuentes legítimas al comprobar el encabezado “Referer” y/o el encabezado “Origin“.
Implementa Protección de Tiempo
- Limita la validez de los tokens anti-CSRF en tiempo y asocia un período de tiempo limitado durante el cual un token es válido.
- Refresca o renueva los tokens regularmente para evitar la reutilización de tokens expirados.
Utiliza Autenticación de Doble Factor (2FA)
- Implementa la autenticación de doble factor para ciertas acciones críticas o sensibles. Esto puede ayudar a prevenir ataques incluso si un atacante logra realizar solicitudes no autorizadas.
Mantén el Software Actualizado
- Asegúrate de que todos los componentes de tu aplicación, como frameworks, bibliotecas y servidores web, estén actualizados con los últimos parches de seguridad.
Capacitación y Concienciación del Usuario
- Educa a los usuarios sobre los riesgos de seguridad, como no abrir enlaces o correos electrónicos de fuentes no confiables, y fomenta buenas prácticas de seguridad.
Pruebas de Seguridad
- Realiza pruebas de seguridad, como pruebas de penetración y escaneos de vulnerabilidades, para identificar posibles vulnerabilidades de CSRF en tu aplicación.
Ejemplos reales de ataques CSRF
Estos ataques demuestran la importancia de protegerse contra esta vulnerabilidad en las aplicaciones web para prevenir que los atacantes realicen acciones no deseadas en nombre de los usuarios autenticados. La implementación de tokens anti-CSRF y otras medidas de seguridad adecuadas es esencial para mitigar este tipo de amenazas.
- Ataque CSRF en Facebook (2008):
En 2008, se descubrió un ataque CSRF en Facebook. Los atacantes podían engañar a los usuarios para que hicieran clic en un enlace malicioso que, sin su conocimiento, publicaba actualizaciones de estado o realizaba otras acciones en sus perfiles.
- Ataque CSRF en Gmail (2007):
Un ataque CSRF en Gmail permitía a un atacante cambiar la configuración de la cuenta del usuario, incluyendo la reenviación de correos electrónicos o el cambio de contraseña. Esto podría dar lugar a un secuestro de la cuenta.
- Ataque CSRF en YouTube (2008):
Un ataque CSRF en YouTube permitía a un atacante suscribir al usuario a canales de YouTube o agregar videos a sus listas de reproducción sin su consentimiento.
- Ataque CSRF en Twitter (2010):
En 2010, se descubrió un ataque CSRF en Twitter que permitía a un atacante hacer que un usuario retwiteara mensajes o siguiera a cuentas sin su permiso.
- Ataque CSRF en PayPal (2008):
Un ataque CSRF en PayPal permitía a un atacante realizar transacciones financieras en nombre de un usuario autenticado. Esto podría llevar al robo de fondos.
- Ataque CSRF en WordPress (2018):
En 2018, se informó de un ataque CSRF que permitía a un atacante cambiar las credenciales de administrador de un sitio web WordPress, lo que podría dar lugar a la toma de control del sitio.
- Ataque CSRF en Router (2015):
Un ataque CSRF en un router doméstico podría permitir a un atacante cambiar la configuración de red, como las contraseñas de Wi-Fi o las reglas de firewall, sin el conocimiento del propietario del router.