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.

650

hunters entrenando

50

labs de reportes reales

380

completaciones

$200.000

en bounties practicados

40 flags capturadas esta semana·Reportes reales de HackerOne · Bugcrowd · Intigriti·Sin permanencia·Academy gratis
BBLabs · bug bounty en español

Practica JWT en labs reales

Cada lab de JWT replica un reporte real de bug bounty que se pagó. Crea tu cuenta gratis, empieza por la Academy y pasa a los labs cuando quieras.

Sin tarjeta · Academy gratis · cancela cuando quieras