Nuevos labs cada semana — Accede a todos desde 7,99€/mes

Labs de JWT

JSON Web Token (JWT) Attacks

¿Qué es JWT?

Los ataques a JSON Web Tokens explotan implementaciones inseguras de firma y verificación. Desde aceptar alg=none hasta confusión de algoritmo RS256→HS256, secretos débiles y kid injection: cualquiera de ellos permite forjar tokens y suplantar a cualquier usuario, incluido admin.

¿Por qué practicar JWT?

El JWT es el estándar de facto para sesiones en APIs y SPAs modernas, y los devs siguen tropezando con los mismos fallos de firma. Un JWT forjable es account takeover directo de cualquier cuenta, incluido admin: P1 inmediato con bounties de $2,000-$30,000.

¿Qué aprenderás con los labs de JWT?

Aprenderás a auditar el header y el payload, forzar alg=none, ejecutar key confusion firmando con la clave pública como secreto HMAC, crackear secretos HS256 débiles con hashcat, e inyectar el campo kid/jku/x5u para que el server valide con una clave que tú controlas.

Tipos de JWT que cubrimos

  • alg=none

    Cambias el header a {"alg":"none"} y eliminas la firma. Librerías mal configuradas aceptan el token sin verificar.

  • Algorithm confusion (RS256→HS256)

    El server espera RS256 (asimétrico) pero acepta HS256. Firmas el token con la clave pública (conocida) como secreto HMAC.

  • Secreto HS256 débil

    Si el secreto es corto/común, lo crackeas offline con hashcat y firmas tokens arbitrarios elevando tu rol a admin.

  • kid / jku / x5u injection

    El header kid/jku/x5u indica de dónde sacar la clave. Inyectas un path, SQL o una URL tuya para controlar la clave de verificación.

¿Cómo encontrar y explotar JWT?

Playbook práctico — del recon a la prueba de concepto.

  1. 1

    Decodificar el token

    Separa los tres segmentos y decodifica header y payload en base64url. Mira el algoritmo, el campo kid y claims como role o user_id.

    echo $JWT | cut -d. -f1 | base64 -d   →   {"alg":"RS256","kid":"1"}
  2. 2

    Probar alg=none

    Cambia el algoritmo a none, edita el payload (p. ej. role=admin) y manda el token sin firma. Librerías vulnerables lo aceptan.

    header {"alg":"none","typ":"JWT"}  ·  payload {"user":"admin"}  ·  firma vacía: header.payload.
  3. 3

    Algorithm confusion RS256→HS256

    Si conoces la clave pública RSA, firma un token HS256 usándola como secreto HMAC. El server que verifica con la pública lo da por válido.

    jwt_tool $JWT -X k -pk public.pem   (confusion attack)
  4. 4

    Crackear secretos HS256 débiles

    Vuelca el JWT a hashcat y prueba un diccionario. Un secreto crackeado te deja firmar cualquier token.

    hashcat -a 0 -m 16500 jwt.txt rockyou.txt
  5. 5

    Inyectar kid/jku

    Manipula kid para apuntar a un fichero de clave conocida (/dev/null → secreto vacío) o jku/x5u a un JWKS que tú alojas.

    {"alg":"HS256","kid":"../../../../dev/null"}  →  firma con secreto vacío

Aprende la teoría

Academy: Authentication Bypass

Preguntas frecuentes

¿Qué es un ataque a JWT?

Es la explotación de fallos en la firma o verificación de un JSON Web Token. Si el servidor no valida correctamente la firma (alg=none, confusión de algoritmo, secreto débil, kid injection), un atacante puede forjar tokens y suplantar a cualquier usuario.

¿Cómo se explota un JWT inseguro?

Se decodifica el token, se altera el payload (por ejemplo role=admin) y se logra que el servidor acepte la firma: poniendo alg=none, firmando con la clave pública como secreto HMAC (RS256→HS256), crackeando un secreto débil o inyectando kid/jku hacia una clave controlada.

¿Cómo encontrar fallos JWT en bug bounty?

Decodifica cada token, mira el header (alg, kid, jku) y prueba alg=none, la confusión de algoritmo y un crack del secreto con hashcat. Herramientas como jwt_tool automatizan el barrido de estas técnicas contra el endpoint.

¿Cómo prevenir ataques a JWT?

Fija el algoritmo permitido en el servidor (no leas alg del token), usa secretos largos y aleatorios o claves asimétricas bien gestionadas, valida estrictamente kid/jku contra una allowlist, y considera tokens opacos con sesión server-side para datos sensibles.

¿Diferencia entre un ataque a JWT y un Authentication Bypass genérico?

El ataque a JWT es una sub-categoría concreta del Authentication Bypass centrada en la firma de tokens. El Authentication Bypass es el paraguas que también incluye password reset poisoning, fallos de OAuth o bypass de MFA.

Empieza con labs de JWT

Practica JSON Web Token (JWT) Attacks con labs basados en reportes reales. En español. Desde 7,99€/mes.

Empieza con el primer lab de JWT