Laboratorio de Hacking: JWT

Completa los desafíos para convertirte en un experto en seguridad JWT.

0% completado - ¡Comienza tu aventura!

Nivel 1: El API Confiado

Principiante

Misión: La API no verifica la firma. Modifica el payload del token para acceder como admin.

Nivel 2: El Algoritmo "ninguno"

Principiante

Misión: La API acepta tokens con alg:none. Forja un token sin firma para reclamar la recompensa de admin.

Nivel 3: El Secreto Débil

⭐⭐ Intermedio

Misión: El token está firmado con una clave débil. Encuéntrala, forja un token de admin y fírmalo.

1. Token a crackear:

Nivel 4: La Verificación Flexible

⭐⭐⭐ Avanzado

Misión: La API valida el token usando la clave pública del header (jwk). Genera tus propias claves, inyecta la pública y firma un token de admin.

Vista del "Servidor"

Análisis del Token Recibido

// Esperando una interacción...

Resultado de la Verificación

// ...

Respuesta de la API

// ...

⚙️ Opciones de Depuración

🎓 Centro de Aprendizaje JWT

Aprende los conceptos fundamentales de JSON Web Tokens y las herramientas para trabajar con ellos

¿Qué es JWT?

Un JSON Web Token (JWT) es un estándar compacto para representar información de forma segura entre dos partes. Se especifica en RFC 7519 y se puede implementar como:

🔏 JWS

JSON Web Signature - Los datos están firmados digitalmente pero son legibles

🔐 JWE

JSON Web Encryption - Los datos están completamente encriptados

¿Cómo funciona?

El servidor genera un JWT cuando un usuario se autentica. Este token se envía al cliente y se adjunta automáticamente a cada solicitud HTTP posterior, permitiendo al servidor identificar al usuario sin autenticación adicional.

🔄 Flujo de Autenticación JWT

1. Usuario se autentica → 2. Servidor genera JWT → 3. Cliente almacena token → 4. Cliente envía token en cada request → 5. Servidor verifica firma

🏗️ Estructura de un JWT

Un JWT se compone de tres partes separadas por puntos (.):

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaXNBZG1pbiI6ZmFsc2V9.EypViEDiJhjeuXgjtGdibxrFPFZyYKn-KqFeAw3c2No

📋 Header (Encabezado)

Especifica el algoritmo de firma y tipo de token

{"alg": "HS256", "typ": "JWT"}

📦 Payload (Carga útil)

Contiene las "claims" o declaraciones sobre el usuario

{"sub": "1234567890", "name": "John Doe", "isAdmin": false}

✍️ Signature (Firma)

Garantiza que el token no ha sido alterado

HMACSHA256(header + payload, secret)

Tipos de Claims

🏷️ Registradas: Definidas por RFC 7519 (sub, exp, iat, etc.)

🌐 Públicas: Estandarizadas por IANA para evitar colisiones

🔒 Privadas: Definidas libremente por los desarrolladores

⚠️ Vulnerabilidades Comunes

🚨 Firma No Verificada

El servidor no verifica la firma del JWT, permitiendo modificaciones arbitrarias del payload sin detección.

🚨 Algoritmo "none"

El servidor acepta tokens con alg: "none", eliminando completamente la protección de la firma.

🚨 Secretos Débiles

Uso de claves fáciles de adivinar que pueden ser crackeadas por fuerza bruta con herramientas como Hashcat.

🚨 Inyección JWK

Manipulación del parámetro jwk en el header para inyectar claves públicas controladas por el atacante.

🚨 Confusión de Algoritmos

Cambio de algoritmo asimétrico (RS256) a simétrico (HS256) usando la clave pública como secreto.

🛠️ Herramientas Recomendadas

🌐 JWT.io

Debugger online para decodificar, verificar y generar JWT. Ideal para principiantes.

🔗 Visitar jwt.io

🔥 Hashcat

Herramienta de cracking para fuerza bruta de secretos JWT débiles.

hashcat -a 0 -m 16500 [JWT] [wordlist]

🔧 JWT Editor (Burp)

Extensión de Burp Suite para generar, modificar y atacar JWT de forma avanzada.

🔗 Descargar extensión

🍰 CyberChef

Navaja suiza cibernética para decodificar, codificar y manipular datos JWT.

🔗 Usar CyberChef

🔐 rsa_sign2n

Herramienta para ataques de confusión de algoritmos RSA.

python rsa_sign2n.py [JWT1] [JWT2]

📚 SecLists

Colección de listas de palabras incluyendo secretos JWT comunes.

🔗 Ver SecLists

🛡️ Mejores Prácticas de Seguridad

✅ Configuración Segura

• Algoritmo específico: Define explícitamente qué algoritmo usar (HS256, RS256)

• Lista blanca: Usa listas blancas en lugar de listas negras para algoritmos

• Secretos robustos: Usa secretos largos y aleatorios (mínimo 256 bits)

🔒 Validación Estricta

• Verificar siempre: Nunca omitas la verificación de firma

• Validar claims: Verifica exp, iat, nbf y otras claims críticas

• Dominio JKU: Si usas JKU, implementa whitelist de dominios

⏱️ Gestión de Ciclo de Vida

• Expiración corta: Usa tiempos de vida cortos (15-30 minutos)

• Refresh tokens: Implementa sistema de renovación

• Revocación: Mantén lista negra para tokens comprometidos

🚫 Evitar Errores Comunes

• No reutilizar secretos: Usa secretos únicos por aplicación/entorno

• No confiar en el cliente: Valida toda información del JWT en el servidor

• No almacenar datos sensibles: Los JWT son fácilmente decodificables