FixVibe
Covered by FixVibehigh

JWT Seguridad: riesgos de tokens no garantizados y validación de reclamos faltantes

Los JSON Web Tokens (JWT) proporcionan un estándar para transferir reclamaciones, pero la seguridad depende de una validación rigurosa. No verificar las firmas, los tiempos de vencimiento o las audiencias previstas permite a los atacantes eludir la autenticación o reproducir los tokens.

CWE-347CWE-287CWE-613

Impacto del atacante

La validación incorrecta de JWT permite a los atacantes eludir los mecanismos de autenticación falsificando reclamaciones o reutilizando tokens caducados [S1]. Si un servidor acepta tokens sin una firma válida, un atacante puede modificar la carga útil para escalar privilegios o hacerse pasar por cualquier usuario [S1]. Además, no hacer cumplir el reclamo de vencimiento (exp) permite a un atacante usar un token comprometido indefinidamente [S1].

Causa raíz

Un token web JSON (JWT) es una estructura basada en JSON que se utiliza para representar reclamaciones firmadas digitalmente o protegidas de integridad [S1]. Los fallos de seguridad suelen deberse a dos lagunas principales en la implementación:

  • Aceptación de JWT no seguros: si un servicio no exige estrictamente la verificación de firma, puede procesar "JWT no seguros" donde la firma está ausente y el algoritmo está configurado en "ninguno" [S1]. En este escenario, el servidor confía en las notificaciones de la carga útil sin verificar su integridad [S1].
  • Validación de reclamo faltante: El reclamo exp (tiempo de vencimiento) identifica el tiempo a partir del cual el JWT no debe aceptarse para el procesamiento de [S1]. La notificación aud (audiencia) identifica los destinatarios previstos del token [S1]. Si no se marcan, el servidor puede aceptar tokens caducados o destinados a una aplicación diferente [S1].

Arreglos concretos

  • Aplicar firmas criptográficas: configure la aplicación para rechazar cualquier JWT que no utilice un algoritmo de firma sólido y preaprobado (como RS256).
  • Validar vencimiento: implemente una verificación obligatoria para garantizar que la fecha y hora actuales sean anteriores a la hora especificada en el reclamo exp [S1].
  • Verificar audiencia: asegúrese de que la reclamación aud contenga un valor que identifique el servicio local; si el servicio no está identificado en el reclamo aud, se debe rechazar el token [S1].
  • Evitar repetición: utilice el reclamo jti (ID de JWT) para asignar un identificador único a cada token, lo que permite al servidor rastrear y rechazar los tokens reutilizados [S1].

Estrategia de detección

Las vulnerabilidades en el manejo de JWT se pueden identificar analizando la estructura del token y el comportamiento de respuesta del servidor:

  • Inspección de encabezado: Verifique el encabezado alg (algoritmo) para asegurarse de que no esté configurado en "ninguno" y utilice los estándares criptográficos esperados [S1].
  • Verificación de reclamaciones: Confirmación de la presencia y validez de las reclamaciones exp (vencimiento) y aud (audiencia) dentro de la carga útil JSON [S1].
  • Prueba de validación: prueba si el servidor rechaza correctamente los tokens que han caducado según el reclamo exp o que están destinados a una audiencia diferente según lo definido por el reclamo aud [S1].