Cross Site Request Forgery (CSRF)

· · | Ciberseguridad en Cross Site Request Forgery (CSRF)

Un ataque de falsificación de consulta entre sitios, Cross Site Request Forgery o CSRF por sus siglas en inglés, tiene como objetivo que la víctima realice acciones que no pretende en un sitio web en el que ya está autenticado. Esta acción puede ser la eliminación de la cuenta, el cambio de las credenciales, cambio de correo electrónico asociado a una cuenta, entre otras.

¿Cómo funciona un ataque Cross Site Request Forgery?

Para comprender un CSRF, debemos entender primero lo que son las cookies. Las cookies son pequeños pedazos de información, que se asignan a un cliente al entrar a un sitio web y que se almacenan en el navegador. Cuando el cliente ingresa a la página por segunda vez, el navegador incluirá las cookies en la consulta y el servidor reconocerá al cliente. Esto permite mejorar la experiencia de usuario agregando historiales, preferencias de configuración como también mantener la sesión de un usuario abierta.

Las cookies asociadas a un sitio web son incluidas por el navegador al momento de hacer la consulta. A diferencia de una inyección XSS, donde se abusa de la confianza del cliente en el sitio web, un ataque CSRF abusa de la confianza que tiene el servidor con las cookies del cliente.

Si el atacante logra que la víctima haga una consulta determinada incluyendo las cookies de la víctima, el servidor confiará en que la consulta es legítima y la realizará. La analogía de este tipo de ataque es equivalente a un hombre enmascarado entrando a una organización con una credencial de acceso, confiando en que es quien dice ser, aunque no haya revelado su rostro.

¿Cómo explotar un ataque CSRF?

Para explotar esta vulnerabilidad, basta que la víctima haga clic en un enlace que lo dirija a un sitio web y que realice la consulta en su código HTML. El navegador incluirá las cookies y la consulta se llevará a cabo como si la hubiera hecho el mismo usuario. El formulario para la consulta no tiene que estar a la vista y es relativamente fácil de elaborar una vez que se identifica la vulnerabilidad. Por esta razón, algunos consideran al CSRF un One-clic attack.

En la siguiente imagen, es posible visualizar un diagrama de explotación de la vulnerabilidad CSRF:

 

Cross Site Request Forgery - Diagrama

Impacto de un ataque CSRF

Un ataque CSRF podría decantar en:

  • Cambio de contraseñas
  • Cambio de correos electrónicos asociados a una cuenta
  • Iniciar o finalizar procesos internos de una organización
  • Eliminar una cuenta
  • Robo de credenciales e información personal

Las acciones potenciales dependerán tanto de las funcionalidades del sitio web vulnerable como de la creatividad del atacante.

Mitigación de un Cross Site Request Forgery

Una técnica usual de mitigación es implementar un token único cada vez que el formulario es cargado en un navegador. Se envía el token anti-csrf con los datos del formulario y se verifica su valor en el servidor. Si no se incluye el token o este no coincide con el token esperado, entonces el servidor no ejecuta la consulta. Está solución ha demostrado funcionar muy bien, sin embargo, un atacante podría intentar predecir el token anti-csrf, aunque las implementaciones ofrecidas por los entornos de desarrollo actuales parecieran ser muy seguras.

Se debe tener en cuenta los siguientes puntos al momento de implementar una contramedida para la vulnerabilidad CSRF:

  • Implementar el protocolo HTTPS no previene esta vulnerabilidad: La petición automatizada de igual manera se llevará a cabo pero será cifrada, característica la cual no impide la explotación de un CSRF.
  • Agregar más pasos a las funcionalidades de un sitio no es una medida de prevención efectiva: Mientras un atacante conozca o pueda adivinar cada paso, estos siempre podrán ser automatizados.
  • Realizar consultas a través de método POST no previene este ataque: Un cibercriminal de igual manera podría enviar una solicitud automatizada por medio de este tipo de peticiones.

De forma complementaria, se recomienda concientizar a los usuarios con las siguientes buenas prácticas:

  • Acostumbrar cerrar sesión (logout) antes de salir de un sitio.
  • Tener un browser para navegar en la web y otro para manejar información sensible.
  • No hacer clic en todos los enlaces que ves.

Conclusiones

Al día de hoy, existen formas efectivas de prevenir ataques CSRF, desde la implementación de tokens en la aplicación hasta una buena cultura de la seguridad. Si bien en la actualidad los frameworks implementan tokens anti-csrf, en muchos casos, estos tienen que ser programados en los end-points de manera explícita. Por lo tanto, se recomienda altamente poner a prueba los controles de seguridad existentes en los formularios de un sitio web, y además teniendo en cuenta que no es la única vulnerabilidad que podría afectar a una aplicación desarrollada con un framework.