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.
// MAL: el atacante puede mandar alg=none y saltarse la firma
jwt.verify(token, secret, { algorithms: ['HS256', 'none'] });// 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
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Modo ECB
mediumUsar modo ECB (Electronic Codebook) para encriptacion produce bloques de texto cifrado identicos para bloques de texto plano identicos, revelando patrones en los datos encriptados.
IV/Nonce Estatico
highUsar un Vector de Inicializacion (IV) o nonce hardcodeado o constante para encriptacion anula el proposito del IV y permite a los atacantes detectar patrones y desencriptar datos.
Tamano de Llave Debil
mediumUsar llaves criptograficas mas cortas que los minimos recomendados (RSA menor a 2048 bits, AES menor a 128 bits) hace la encriptacion vulnerable a ataques de fuerza bruta con hardware moderno.
Validacion de Certificado Deshabilitada
criticalDeshabilitar la validacion de certificados TLS con NODE_TLS_REJECT_UNAUTHORIZED=0 o rejectUnauthorized: false permite ataques man-in-the-middle en todas las conexiones HTTPS.