¿Necesito el token CSRF si estoy usando Bearer JWT?

12

Contexto : el sitio angular está alojado en S3 detrás de CloudFront, separado del servidor Express que se usa como API y casi todas las solicitudes son XMLHttpRequests. Todas las solicitudes se envían sin cookies (con credenciales = falso por defecto) y utilizo el token JWT Bearer para la autenticación al tomarlas de las cookies en forma angular y al encabezado Authorization (esta técnica es una especie de lo que se describe en CSRF Wiki page ).

En el sitio Express, no permito el encabezado Cookie en Access-Control-Allow-Headers .

Las cookies tienen el indicador secure: true , y NO son httpOnly porque necesito acceder manualmente a ellas en angular.

También he leído en este artículo de Medium que JSON-Web-Tokens (JWT) / Token Tokens

  

es sin duda uno de los mejores métodos para prevenir la CSRF

Pregunta 1 : ¿Agregaré seguridad adicional si agregaré el encabezado X-XSRF-Token a cada solicitud y, por ejemplo, dejaré el mecanismo sin estado al verificar el mismo valor en la carga útil de JWT? (Lo leí en este hilo )

Pregunta 2 : ¿Realmente necesito esfuerzos de seguridad adicionales contra CSRF tomando todo lo que describí?

    
pregunta Igor Pomogai 29.09.2017 - 14:25
fuente

2 respuestas

6

Esto es relevante pero no necesariamente responde al 100% de tu pregunta:

enlace

El problema es que siempre que la autenticación se realice en el encabezado (y no a través de las cookies), no tiene que preocuparse por la protección CSRF. Volvería a redactar ligeramente la cita de su artículo: no es que los tokens de portador sean la mejor defensa contra los ataques CSRF, sino que los ataques CSRF son un vector de ataque que ataca específicamente a las cookies (y la autenticación básica), por lo que CSRF no lo hace. No importa si no estás usando ninguno de estos.

Probablemente deberías asegurarte y verificar, en el lado del servidor, que tu aplicación no recurra silenciosamente a la validación de cookies si el token del Portador está ausente. Pude ver algo así como chirriar en una aplicación en un accidente, y como las cookies se enviarán sin importar si las quiere o no, podría resultar en una vulnerabilidad de CSRF inadvertida en una página que se "supuestamente" es inmune a CSRF.

Como resultado, creo que ambas preguntas, una y dos, se pueden responder de la misma manera. Si solo usa la autenticación a través de tokens de portador y no a través de cookies, entonces no hay ninguna preocupación por la vulnerabilidad de CSRF, y no se requieren pasos adicionales para la seguridad.

    
respondido por el Conor Mancone 29.09.2017 - 21:39
fuente
6

En general, CSRF ocurre cuando un navegador agrega automáticamente encabezados (es decir, ID de sesión dentro de una cookie) y luego autentica la sesión. Los tokens de portador, u otros tokens basados en encabezados HTTP que deben agregarse manualmente, evitarían que CSRF.

Por supuesto, pero fuera del tema, si tienes una vulnerabilidad XSS, un atacante podría acceder a estos tokens, pero luego no se convierte en un error CSRF.

    
respondido por el ndrix 29.09.2017 - 18:33
fuente

Lea otras preguntas en las etiquetas