criticalCWE-327A02:2021

JWT Algoritmo None

Aceptar 'none' como algoritmo válido en JWT permite que cualquiera forge tokens sin necesitar el secret.

Cómo Funciona

El header de un JWT trae un campo 'alg'. Si tu código acepta 'alg: none', un atacante puede quitarle la firma al token y pretender ser cualquier usuario. El servidor lo acepta porque nunca valida una firma real.

Código Vulnerable
// MAL: el atacante puede mandar alg=none y saltarse la firma
jwt.verify(token, secret, { algorithms: ['HS256', 'none'] });
Código Seguro
// BIEN: especifica solo el algoritmo que realmente usas
jwt.verify(token, secret, { algorithms: ['HS256'] });

Ejemplo Real

CVE-2015-9235 — el bypass original de 'alg:none' afectó múltiples librerías JWT. Auth0 tuvo que parchear su librería después de que investigadores demostraron que cualquier usuario podía volverse admin editando el header del token.

Cómo Prevenirlo

  • Siempre pasa una lista explícita de algoritmos permitidos a jwt.verify()
  • Nunca incluyas 'none' ni mezcles 'RS256' con 'HS256' si no usas ambos
  • Usa una librería probada como jose en vez de implementar la verificación tú mismo
  • Escanea tu repo regularmente para atrapar estas configuraciones antes de que lleguen a producción

Tecnologías Afectadas

Node.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas