Cabecera Penligente

Tutorial de descodificación de tokens JWT: Herramientas, pasos y mejores prácticas

Qué significa realmente descodificar un JWT

Descifrar un JWT significa extraer su encabezado y carga útil -que sólo están codificados en Base64URL- para revelar el algoritmo, los metadatos y las reclamaciones que contiene el token. Este proceso no verificar su autenticidad. Cualquiera puede descodificar un JWT, pero verificar únicamente la firma determina si el token es de confianza. Esta distinción es esencial para la autenticación segura y las pruebas de penetración.

JWT Token Decode Tutorial Penligent

Cómo funciona internamente la descodificación JWT

Un Token Web JSON consta de:

css

header.payload.signature Tanto la cabecera como la carga útil son objetos JSON codificados con Base64URL. Por ejemplo:

json

// Cabecera

{

"alg": "HS256",

"tipo": "JWT"

}

// Carga útil

{

"nombre de usuario": "admin",

"rol": "SuperUsuario"

}

La descodificación manual sólo requiere operaciones Base64URL:

python

importar base64, json

def decode_part(segmento):

acolchado = segmento + "=" * (-len(segmento) % 4)

return json.loads(base64.urlsafe_b64decode(padded))

header, payload, _ = token.split(".")

print(decodificar_parte(cabecera))

print(decode_part(payload))

Esto demuestra una verdad fundamental en materia de seguridad: La descodificación de JWT no implica confianza. Una verificación legítima requiere comprobar la firma, el emisor, la audiencia, la caducidad y el algoritmo de firma.

Tokens JWT

Herramientas populares para descodificar tokens JWT

HerramientaFuerzaEnlace
JWT.ioDescodificación en tiempo real, experimentos rápidoshttps://jwt.io
Decodificador SuperTokensInterfaz de usuario limpia y fácil de usarhttps://supertokens.com/jwt-encoder-decoder
Depurador de tokens Auth0Verificación de nivel empresarialhttps://auth0.com/docs/tokens
PyJWTCLI + biblioteca Pythonhttps://pyjwt.readthedocs.io
jwt-decode (JS)Descodificador ligero del navegadorhttps://www.npmjs.com/package/jwt-decode

Ejemplos reales de ataques JWT vistos en pruebas

La decodificación de JWT se vuelve peligrosa cuando los atacantes la combinan con defectos de firma, secretos débiles y validación insegura. Estos son los escenarios de ataque que aparecen con frecuencia en situaciones reales.

"alg: none" Anulación de firma

Las bibliotecas más antiguas aceptaban JWT sin firmar:

json

{

"alg": "ninguno",

"tipo": "JWT"

}

Los atacantes podrían eliminar la firma por completo y autenticarse sin el secreto.

Fuerza bruta secreta débil (HS256)

Los desarrolladores suelen utilizar secretos como:

nginx

secreto

admin123

contraseña

Los atacantes utilizan Hashcat:

css

hashcat -a 0 -m 16500 token.hash wordlist.txt

Algoritmo Confusión (RS256 → HS256)

El atacante:

  1. Cambia el algoritmo de RS256 a HS256
  2. Utiliza la clave pública del servidor como secreto HMAC
  3. Falsifica tokens válidos que otorgan funciones de administrador

Este sigue siendo uno de los ataques JWT más impactantes jamás descubiertos.

RS256 → HS256

Robo de tokens mediante XSS

Si los JWT se almacenan en localStoragelos atacantes pueden robarlos:

javascript

<script>

fetch("" + localStorage.token);

</script>

Mala configuración de CORS que provoca la exposición de tokens

Si las políticas CORS permiten comodines, las peticiones del navegador pueden filtrar cookies JWT a dominios controlados por atacantes.

Ataques de repetición en tokens móviles de larga duración

Los atacantes extraen fichas de:

  • almacenamiento local no cifrado
  • dispositivos arraigados
  • cachés inseguras

La repetición puede saltarse la MFA por completo.

Descodificación multilingüe de JWT y código de verificación

Node.js

javascript

const jwt = require("jsonwebtoken");

const decoded = jwt.verify(token, PUBLIC_KEY, {

algoritmos: ["RS256"],

emisor: "auth.example.com",

audiencia: "ejemplo.com"

});

console.log(decodificado);

Vaya a

ir

token, err := jwt.Parse(tokenString, func(t *jwt.Token) (interfaz{}, error) {

return []byte("secreto"), nil

})

Óxido

óxido

let decoded = decode::(

simbólico,

&DecodingKey::from_secret(secret.as_ref()),

&Validation::new(Algoritmo::HS256)

);

Flujo de trabajo de descodificación manual de JWT para pentesters

Durante los pentests, la decodificación JWT revela:

  • privilegios almacenados en texto plano
  • falta exp o iat
  • algoritmo mal configurado
  • datos sensibles en la carga útil
  • posibles vectores de escalada de privilegios

Así es como los probadores identifican el control de acceso roto y escalan los roles.

Descodificador JavaScript manual (sin biblioteca)

javascript

function decode(seg) {

seg = seg.replace(/-/g, "+").replace(/_/g, "/");

seg += "=".repeat((4 - seg.length % 4) % 4);

return JSON.parse(atob(seg));

}

Cadenas avanzadas de ataques JWT (Escenarios del Equipo Rojo)

JWT + IDOR → Adquisición total de la cuenta

Flujo:

  1. descodificar JWT
  2. cambiar "sub": "501" a "sub": "1"
  3. volver a firmar o anular la firma
  4. acceso privilegiado
  5. escalar privilegios

Esta cadena aparece casi semanalmente en las evaluaciones de las empresas.

JWT + Suplantación de Microservicios

Una validación interna débil permite a los atacantes suplantar servicios:

  • acceder a los datos de facturación
  • modificar los permisos de usuario
  • colas de mensajes de lectura
  • eludir las pasarelas API

Buenas prácticas defensivas (Equipo Azul)

Cumplimiento estricto de los algoritmos

python

jwt.decode(token, key, algorithms=["RS256"])

Secretos fuertes para HS256

Generar usando:

perl

openssl rand -hex 32

Validar declaraciones estándar

exp

iss

aud

nbf

Almacenar JWT en cookies HttpOnly

Mitiga el robo de tokens XSS.

Implantar la rotación de teclas

Utilice JWKS para la gestión de claves distribuidas:

Análisis de seguridad JWT integrado en Penligent.ai

Los sistemas de autenticación modernos a menudo utilizan docenas de microservicios, cada uno con su propia lógica JWT. La revisión manual se vuelve lenta y propensa a errores. Penligent.aiuna plataforma inteligente de pruebas de penetración, integra el análisis JWT directamente en sus flujos de trabajo automatizados de seguridad.

Penligent.ai realiza:

  • comprobaciones de validación de firmas
  • detección de secretos débiles mediante cracking híbrido CPU/GPU
  • detección de desajustes de algoritmos
  • pruebas de manipulación de reclamaciones
  • simulaciones de abuso de repetición y refresco de fichas
  • escaneo de fugas de tokens en paquetes JS
  • correlación de extremos para detectar validaciones JWT incoherentes

También reconstruye cadenas de explotación, como:

  • Confusión de claves RS256 → HS256
  • IDOR mediante manipulación sub reclamar
  • escalada de privilegios mediante falsificación papel campos

Para aplicaciones de gran tamaño, este análisis JWT automatizado reduce drásticamente la carga de trabajo manual al tiempo que saca a la luz vulnerabilidades que las herramientas tradicionales suelen pasar por alto.

Matriz completa de ataque y defensa de JWT

AtaqueDescripciónEjemploDefensa
alg: ningunoElimina la firmaCampo de firma vacíoRechazar JWT sin firmar
RS→HS ConfusiónClave pública utilizada como secreto HMACToken de administrador falsificadoAplicar el algoritmo
Secreto débilFuerza bruta HS256"password123" secretoClave aleatoria de 32 bytes
Reclamaciones manipuladasModificar rol/sub"rol "adminAutorización del servidor
Robo XSSJS roba JWTlocalStorage.tokenCookies HttpOnly
Ataque de repeticiónFicha de reutilizaciónAplicaciones móvilesTTL corto, rotación
Fichas internas filtradasSuplantación de serviciosMicroserviciosmTLS, JWKS, ámbitos

Reflexiones finales

Descifrar un JWT es sólo el principio. La verdadera seguridad pasa por verificar las firmas, aplicar algoritmos estrictos, validar las reclamaciones, rotar las claves y almacenar los tokens de forma segura. Las aplicaciones modernas dependen en gran medida de la autenticación basada en tokens, y esto hace que la corrección de JWT sea una parte crucial de la postura de seguridad.

Combinando sólidas prácticas de ingeniería con plataformas de seguridad automatizadas como Penligent.aiLas organizaciones pueden identificar rápidamente los errores de configuración, evitar los ataques de escalada de privilegios y garantizar que sus sistemas de autenticación sean resistentes a las técnicas modernas de los adversarios.

Comparte el post:
Entradas relacionadas
es_ESSpanish