Un pentest informa de que tu API acepta JWT con `alg: none`. ¿Cuál es el impacto y la corrección?
Respuesta breve
`alg: none` permite a cualquiera fabricar un token sin firmar de apariencia válida y suplantar a cualquier usuario — una elusión total de autenticación, no un hallazgo menor. Corrígelo permitiendo en el servidor una lista blanca de los algoritmos esperados y verificando siempre la firma con la clave correcta; nunca confíes en el encabezado alg del propio token para elegir el método de verificación. Una expiración más larga o cambiar dónde se guarda el token no hace nada contra tokens falsificados y sin firmar. Es crítico y explotable, así que documentar no es una corrección.
La seguridad de un JWT proviene por completo de su firma. El campo alg del encabezado le dice al verificador qué algoritmo se usó — pero si el servidor confía en ese campo y se permite none, omite por completo la verificación de la firma. Un atacante envía entonces un token con el encabezado {"alg":"none"}, la carga útil que quiera (por ejemplo un sub distinto o un rol de administrador) y una firma vacía. El servidor lo da por válido.
Por qué es crítico, no cosmético
Es una elusión completa de la autenticación. El atacante no necesita romper una clave ni adivinar un secreto — simplemente afirma quién es y el servidor le cree. Puede suplantar a cualquier usuario, incluidos administradores, con un token falsificado en segundos. Es el peor resultado posible para un sistema de autenticación, por lo que la opción de "impacto bajo, documentarlo" es peligrosamente errónea.
La corrección correcta
- Permitir en el servidor una lista blanca de los algoritmos esperados (p. ej. solo
RS256). Rechaza todo lo demás y rechaza explícitamentenone. - Verificar siempre la firma con la clave correcta antes de leer cualquier reclamación.
- Nunca dejar que el encabezado
algdel token elija la ruta de verificación. Desacoplar la confianza de la entrada controlada por el atacante también bloquea el ataque de confusión de algoritmo, donde un token pasa deRS256aHS256para que la clave pública se use indebidamente como secreto HMAC.
Por qué fallan los distractores
- Una expiración más larga cambia cuánto vive un token legítimo; no hace nada con tokens que nunca se firmaron válidamente.
- Mover el token a una cookie afecta al transporte y a la exposición a XSS/CSRF, no a si se acepta un token sin firmar falsificado.
Qué evalúa el entrevistador
Si entiendes que la firma es el ancla de confianza completa, sabes articular con claridad la elusión y recurres a una lista blanca de algoritmos en el servidor con verificación obligatoria — el criterio que se espera de un ingeniero AppSec sénior.
Posibles preguntas de seguimiento
- ¿Cómo funciona el ataque relacionado de confusión `RS256` a `HS256` y cómo se previene?
- ¿Dónde debe residir la lista blanca de algoritmos y por qué tiene que estar en el servidor?
- ¿Cómo detectarías intentos de falsificación `alg: none` en tus registros?