Repaso
English
SeguridadAvanzadoSEC-14

¿Por qué quien verifica un JWT debe indicar explícitamente los algoritmos permitidos?

Opciones

  1. Por rendimiento, para que la verificación vaya más rápido
  2. Para bloquear alg: none y los ataques de confusión de algoritmo (Opción correcta)
  3. Porque los tokens caducan al cabo de un tiempo
  4. Los algoritmos son opcionales en JWT, así que no hace falta

Respuesta

Para bloquear ataques como alg: none o la confusión de algoritmo (RS256 frente a HS256 usando la clave pública como secreto HMAC)

Por qué

El header de un JWT dice qué algoritmo lo firmó, pero ese header viene del cliente, así que lo controla el atacante.

Con alg: none, una librería débil puede aceptar un token sin ninguna firma. Con la 'confusión de algoritmo', el atacante firma con HS256 usando tu clave PÚBLICA como secreto, y un verificador descuidado lo acepta.

Pasa siempre los algoritmos esperados: jwt.decode(token, key, algorithms=["RS256"]), y comprueba exp, aud e iss.

Recuerda

Fija los algoritmos JWT permitidos; nunca confíes en el header del token.

Términos clave

Practica esta pregunta en Repaso