Pasar al contenido principal

CSRF - Cross Site Request Forgery

La técnica de falsificación de petición en sitios cruzados o Cross Site Request Forgery (CSRF o XSRF, por sus siglas en inglés) es una vulnerabilidad web que permite a un atacante inducir a los usuarios a realizar acciones que ellos no tienen intención de llevar a cabo. El atacante es capaz de eludir parcialmente la política del mismo origen (same-origin policy), una medida de seguridad diseñada para evitar que diferentes sitios web interfieran entre sí.

En un ataque exitoso de este tipo, el atacante consigue que la víctima realice una acción determinada de manera no intencionada. Por ejemplo, cambiar la dirección de correo electrónico asociada a una cuenta, cambiar la contraseña o realizar transferencias de dinero a otras cuentas. Dependiendo de la naturaleza de la acción, el atacante puede obtener un control total y absoluto sobre la cuenta de la víctima. Si la cuenta de usuario comprometida pertenece a un usuario que tiene un rol privilegiado dentro de la plataforma, el atacante podrá tomar el control total de la aplicación y de todos los datos almacenados en ella.

 Para que un ataque CSRF tenga lugar deben cumplirse estas tres condiciones:

  • Que exista una acción relevante: debe haber alguna acción dentro de la aplicación que le proporcione al atacante un pretexto para inducir al usuario a hacer algo. Puede ser una acción privilegiada, como la modificación de los permisos de otros usuarios, o cualquier acción sobre los datos específicos de un usuario concreto, como el cambio de contraseña.
  • Que el mantenimiento de la sesión esté basado en cookies: llevar a cabo acciones en una plataforma web implica realizar una o más peticiones HTTP. Si la web basa la identificación y seguimiento de las sesiones de los usuarios únicamente en este mecanismo, entonces cumple con este requisito.
  • Que los parámetros en las peticiones sean predecibles: las peticiones para realizar la acción no deben contener ningún parámetro con valores que el atacante no pueda determinar o adivinar. Por ejemplo, si el atacante quiere que el usuario cambie su contraseña, la función no es vulnerable si el atacante necesita conocer el valor de la contraseña existente.

 Aunque las vulnerabilidades CSRF se describen normalmente en relación con las sesiones de usuario controladas por cookies, también pueden darse en otros contextos donde la aplicación añada automáticamente otras credenciales de usuario para formular la petición. Estos métodos de autenticación de credenciales pueden estar basados en la autenticación básica de HTTP o en certificados. Los ataques CSRF suelen ocurrir de la siguiente manera: el atacante añade código malicioso HTML a una web de su propiedad. A continuación, induce a las víctimas a que visiten dicho sitio web. Puede conseguirlo haciendo que el usuario reciba el enlace a la web maliciosa por correo electrónico o por mensajería instantánea.

Otra forma de realizar este ataque, similar a las vulnerabilidades XSS (Cross-Site scripting o secuencia de comandos en sitios cruzados), es mediante comentarios publicados por el atacante en páginas webs conocidas. Con este método, el delincuente solo tiene que esperar a que los usuarios visiten el enlace. Estos ataques se pueden prevenir mediante el uso de los tokens CSRF, una medida de protección robustas     . Los tokens CSRF pueden prevenir los ataques CSRF al hacer imposible que un atacante construya una petición HTTP totalmente válida y adecuada para alimentar a un usuario víctima. Para ello, el token CSRF debe contener una alta entropía que no pueda ser predecible, que esté ligado a la sesión del usuario correspondiente y que sea validado de forma estricta en cada caso antes de realizar una acción relevante. Esta medida puede ser combinada con las cookies si aplican una política del mismo sitio (SameSite).