No estoy convencido de la seguridad de un token JWT + token CSRF

0

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í:

  1. Cuando un usuario inicia sesión, el cliente envía una solicitud de inicio de sesión.
  2. 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.
  3. El servidor también envía un token CSRF sin establecer httpOnly para que pueda leerse con el código JavaScript.
  4. 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.

    
pregunta EJC 30.11.2018 - 00:29
fuente

1 respuesta

1
  

CSRF deberá configurarse en el encabezado de la solicitud.

El token anti-CSRF se enviará en el cuerpo del mensaje de solicitud. Si hay una vulnerabilidad XSS y un atacante logra explotarla, lo último que probablemente le importará es el token anti-CSRF. XSS es un ataque mucho más poderoso, y un atacante puede manipular casi cualquier cosa con XSS.

Además, el token anti-CSRF se almacena en un campo de formulario oculto en el código html.

Existe de modo que cada solicitud está vinculada a una sesión de usuario específica. Literalmente existe para hacer que CSRF sea imposible, incluso si el token se filtra de alguna manera. Un atacante solo podría manipular la sesión activa actual de ese usuario en particular del que robó el token anti-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?

El JWT todavía estaría protegido. Le sugiero que lea cómo funciona CSRF: enlace

    
respondido por el Martin Fürholz 30.11.2018 - 00:57
fuente

Lea otras preguntas en las etiquetas