MagnoSec

Herramienta gratuita

Analizar y decodificar un JWT

Pega un token JWT para ver su header y su payload en claro, la fecha de expiración y los avisos de seguridad más comunes. El análisis se hace en tu navegador: el token no se envía a ningún servidor.

Qué es un JWT y por qué se malinterpreta

Un JSON Web Token (JWT) es un formato compacto para transmitir información entre dos partes. Tiene tres segmentos separados por puntos: el header (qué algoritmo se usa), el payload (los datos, como el usuario o su rol) y la firma (que acredita que nadie lo ha modificado).

El error más común es creer que el contenido va cifrado. No lo está: header y payload son Base64, que cualquiera decodifica en un segundo. Un JWT firmado garantiza integridad, no confidencialidad. Por eso ningún token debería llevar contraseñas, datos personales ni nada que no quieras que se lea.

Los fallos de seguridad habituales en JWT

  • alg=none aceptado. El servidor confía en el algoritmo que declara el propio token. Si acepta "none", el atacante altera el payload y entra sin firma.
  • Confusión de algoritmo. El servidor espera RS256 (clave pública) pero acepta HS256: el atacante firma con la clave pública como si fuera un secreto. La defensa es fijar el algoritmo permitido.
  • Secreto débil. Un HS256 con una clave corta o de diccionario se rompe por fuerza bruta y con él se firman tokens válidos.
  • Sin caducidad o sin revocación. Un token sin exp, o que no se puede invalidar, sigue sirviendo aunque el usuario cierre sesión o se filtre.
  • Datos sensibles en el payload. Como el contenido se lee sin clave, meter ahí información privada es exponerla.

Decodificar un token no es auditar la API

Ver el contenido de un JWT es el primer paso, no la conclusión. Lo que importa es cómo lo valida el servidor: si comprueba la firma, si fija el algoritmo, si verifica la expiración, si aplica control de acceso por objeto (que no baste cambiar un ID para ver datos de otro usuario). Eso no se ve decodificando: se prueba atacando la API.

Si tu aplicación usa JWT para las sesiones, es una de las primeras cosas que revisamos en pentesting web y APIs. Puedes ver también las cabeceras de seguridad HTTP o la seguridad del correo de tu dominio.

Preguntas frecuentes

¿Está cifrado el contenido de un JWT?

No. Un JWT estándar (JWS) va firmado, no cifrado: el header y el payload son Base64, que cualquiera puede decodificar. Cualquiera que vea el token puede leer su contenido. Si necesitas confidencialidad, hay que usar JWE (token cifrado).

¿Qué es la vulnerabilidad alg=none?

Ocurre cuando el servidor acepta tokens firmados con el algoritmo 'none' (sin firma). El atacante cambia el alg a none, modifica el payload (por ejemplo su rol a administrador) y el servidor lo acepta. Se evita validando el algoritmo contra una lista permitida y rechazando 'none'.

¿Esta herramienta verifica la firma?

No. Solo decodifica el header y el payload para que veas su contenido. Verificar la firma requiere la clave secreta o pública, que no se debe introducir en una web de terceros. La validación real se hace en el servidor.

¿Es seguro pegar mi token aquí?

El análisis se ejecuta íntegramente en tu navegador: el token no se envía a ningún servidor. Aun así, evita pegar tokens reales de producción en cualquier web; usa uno de pruebas siempre que puedas.

¿Por qué alguien querría decodificar un JWT?

Para depurar autenticación (ver por qué un token se rechaza, si un rol no llega bien, si ha caducado) y para revisar qué información se está exponiendo a nivel de seguridad. En una auditoría, el contenido del token revela cómo está diseñada la sesión.

¿Quieres más información?