JWT

Javascript Web Token (JWT) es una forma segura de transmitir información entre partes como un objeto JSON. Comprende tres partes: header, payload y signature. El header contiene información sobre el tipo de token y el algoritmo de hash utilizado para firmarlo. El paylaod contiene los datos reales que se están transmitiendo, tal como la identidad del usuario o un ID de sesión. La firma se utiliza para verificar la autenticidad del token.

Términos

  • Estructura JWT: Header (alg + typ) → Payload (claims/datos) → Signature → <HEADER>.<PAYLOAD>.<SIGNATURE>

  • Algoritmos:

    • SimĂ©trico → usa el mismo secreto para firmar y verificar (ej. HS256)

    • AsimĂ©trico → usa un par de claves: clave privada para firmar y clave pĂşblica para verificar (ej. RS256)

  • jwk → JSON Web Key Clave pĂşblica incrustada directamente en el header del JWT.

  • jku → JWK Set URL URL que apunta a un conjunto de claves JWK (JWKS) alojado en un servidor que tĂş controlas.

  • kid → Key ID Identificador usado para seleccionar quĂ© clave, dentro de un JWKS o almacĂ©n de claves, debe usarse para verificar la firma.

  • PEM (Privacy-Enhanced Mail) Formato contenedor basado en texto que codifica datos criptográficos binarios (claves, certificados, CSRs) en Base64 usando delimitadores -----BEGIN----- / -----END-----

Extensiones/Herramientas

JWT Editor (Burp ExtensiĂłn)

MetodologĂ­a

1. InspecciĂłn Inicial del JWT

  • Decodificar header, payload y signature (Base64URL).

  • Verificar:

    • Algoritmo (alg)

    • Tipo (typ)

    • Claims sensibles (sub, iss, aud, exp, nbf, iat, role, etc.)

2. ManipulaciĂłn del Payload

  • Modificar valores crĂ­ticos:

    • Roles (user → admin)

    • Identidad (sub, user_id)

    • Tiempos (exp, nbf)

  • Reenviar el token y observar si el backend valida correctamente la firma y los claims.

3. Ataque alg: none

  • Cambiar el algoritmo a none.

  • Eliminar la firma.

  • Verificar si el servidor acepta tokens sin firma.

  • Si funciona: validaciĂłn criptográfica inexistente.

4. Análisis de Firma Débil (HMAC)

  • Si el algoritmo es simĂ©trico (HS256, HS384, HS512):

    • Intentar fuerza bruta del secreto.

    • Usar diccionarios comunes (secrets, passwords, env vars).

Laboratorios

JWT
  1. Ver si es vulnerable a "unverified signature".

  2. Ver si modificando el algoritmo a "none" y elimando la parte de la firma podemos bypass y escalar privilegios.

  3. Si usa el algoritmo HMAC crackeamos para ver con qué firma los tokens JWT.

  4. Ver si puede aceptar un JWT que incrusta la clave pĂşblica utilizada para verificar su firma, sin comprobar si esa clave viene de una fuente fiable.

  5. Ver si el servidor no valida que la URL de jku pertenece a un origen confiable.

  6. Ver si utiliza el valor de kid para leer, desde el sistema de archivos, la clave utilizada para validar la firma del token.

Last updated

Was this helpful?