CSRF o Cross-Site Request Forgery es una vulnerabilidad de un sitio web en la que un atacante puede provocar una acción en la sesión de una víctima en otro sitio web. Una de las cosas que hace que CSRF sea tan riesgoso es que ni siquiera requiere la interacción del usuario, todo lo que se necesita es que la víctima vea una página web con el exploit.
Consejo: CSRF generalmente se pronuncia letra por letra o como "surf de mar".
¿Cómo funciona un ataque CSRF?
El ataque implica que el atacante crea un sitio web que tiene un método para realizar una solicitud en otro sitio web. Esto podría requerir la interacción del usuario, como hacer que presione un botón, pero también podría ser sin interacción. En JavaScript hay formas de hacer que una acción suceda automáticamente. Por ejemplo, una imagen de cero por cero píxeles no será visible para el usuario, pero se puede configurar para que su "src" realice una solicitud a otro sitio web.
JavaScript es un lenguaje del lado del cliente, esto significa que el código JavaScript se ejecuta en el navegador en lugar de en el servidor web. Gracias a este hecho, la computadora que realiza la solicitud CSRF es en realidad la de la víctima. Desafortunadamente, esto significa que la solicitud se realiza con todos los permisos que tiene el usuario. Una vez que el sitio web atacante ha engañado a la víctima para que realice la solicitud CSRF, la solicitud es esencialmente indistinguible del usuario que realiza la solicitud normalmente.
CSRF es un ejemplo de un "ataque adjunto confuso" contra el navegador web, ya que un atacante sin esos privilegios engaña al navegador para que use sus permisos. Estos permisos son su sesión y tokens de autenticación para el sitio web de destino. Su navegador incluye automáticamente estos detalles en cualquier solicitud que realice.
Los ataques CSRF son algo complejos de organizar. En primer lugar, el sitio web de destino debe tener un formulario o URL que tenga efectos secundarios, como eliminar su cuenta. Luego, el atacante debe elaborar una solicitud para realizar la acción deseada. Finalmente, el atacante necesita que la víctima cargue una página web con el exploit mientras está conectado al sitio web de destino.
Para evitar problemas de CSRF, lo mejor que puede hacer es incluir un token CSRF. Un token CSRF es una cadena generada aleatoriamente que se establece como una cookie, el valor debe incluirse con cada respuesta junto con un encabezado de solicitud que incluye el valor. Si bien un ataque CSRF puede incluir la cookie, no hay forma de poder determinar el valor del token CSRF para configurar el encabezado y, por lo tanto, el ataque será rechazado.