Supongamos que tengo una aplicación web que utiliza tokens JWT y tokens CSRF en su esquema de autenticación. Como lo entiendo, funciona así:
- Cuando un usuario inicia sesión, el cliente envía una solicitud de inicio de sesión.
- El servidor establece un token JWT firmado como una cookie con
Set-Cookie ... ;Secure ;httpOnly
en su encabezado de respuesta. Esto evita los ataques XSS ya que Javascript no puede acceder a la cookie.
- El servidor también envía un token CSRF sin establecer
httpOnly
para que pueda leerse con el código JavaScript.
- Cuando el cliente realiza cualquier solicitud futura, la cookie de JWT se enviará automáticamente y el CSRF deberá establecerse en el encabezado de la solicitud. Esto debería evitar los ataques CSRF ya que la cookie CSRF tendrá que ser leída.
En resumen, tenemos:
-
La configuración del token JWT con
;Secure;HttpOnly
evitará los ataques XSS. -
Hacer que el cliente establezca la cookie CSRF en el encabezado de la solicitud evitará los ataques CSRF.
Pero, ¿qué sucede si un atacante obtiene su token CSRF utilizando XSS y lo configura como encabezado de las solicitudes enviadas por un sitio web malicioso con un exploit CSRF? ¿Es posible este ataque? Si es así, ¿cómo podría mejorar mi esquema de autenticación?
Gracias de antemano.