0Pricing
Cryptology Academy · Lección

Vulnerabilidades de JWT: alg=none y confusión de claves

Aproveche y corrija los errores de seguridad más habituales en JWT.

Vulnerabilidades de JWT: alg=none y confusión de claves es una lección gratuita de Cryptology Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cryptology Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cryptology Academy incluye 4 lecciones en total.

Superficie de ataque de JWT

Los JWT están firmados criptográficamente, pero muchas bibliotecas tuvieron vulnerabilidades graves. Las más explotadas son: el ataque alg=none, el ataque de confusión RS256→HS256 y la fuerza bruta contra secretos débiles. Todas se deben a confiar en campos del encabezado controlados por el atacante.

Ataque alg=none

La especificación de JWT permite alg:"none" para tokens no protegidos. Las bibliotecas defectuosas aceptaban esta opción y omitían por completo la verificación de la firma. Un atacante modifica la carga útil (por ejemplo, "role":"admin"), establece alg:"none", elimina la firma y el servidor lo acepta.

Ejemplo de explotación de alg=none

Original: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIn0.SIG Ataque: eyJhbGciOiJub25lIn0.eyJzdWIiOiJhZG1pbiJ9. (firma vacía, punto final). Un servidor vulnerable verifica correctamente el token y concede acceso de administrador.

Solución para alg=none

Nunca acepte alg:"none" en producción. Incluya explícitamente en una lista blanca los algoritmos permitidos: jwt.decode(token, key, algorithms=["HS256"]). La mayoría de las bibliotecas modernas (PyJWT 2+, jsonwebtoken 9+) rechazan alg=none de forma predeterminada.

Confusión de claves RS256 → HS256

Si un servidor usa RS256 y un cliente cambia alg a HS256, el servidor podría verificar usando su clave pública RSA como secreto HMAC. Dado que la clave pública es... pública, el atacante firma cargas útiles arbitrarias con ella y el servidor las verifica.

Explotación de la confusión de claves

Pasos: 1) Obtenga la clave pública desde el endpoint JWKS. 2) Cree una carga útil maliciosa. 3) Fírmela con HMAC-SHA256 usando los bytes PEM sin modificar de la clave pública como secreto HMAC. 4) Establezca alg:"HS256" en el encabezado. 5) La ruta HS256 del servidor verifica correctamente el token.

Solución para la confusión de claves

Especifique siempre el algoritmo esperado explícitamente en la llamada de verificación. Nunca derive el algoritmo del encabezado del token. Use rutas de código separadas para RS256 y HS256 que el llamador no pueda intercambiar.

Fuerza bruta contra secretos débiles

HS256 con secretos débiles (menos de 256 bits de entropía) puede atacarse mediante fuerza bruta sin conexión. Herramientas como hashcat permiten descifrar JWT: hashcat -a 0 -m 16500 token.txt wordlist.txt. Use secretos criptográficamente aleatorios de al menos 32 bytes.

Inyección de encabezado mediante kid

El encabezado kid (identificador de clave) selecciona qué clave se debe usar. Si el servidor utiliza kid como parámetro de una consulta SQL o como ruta del sistema de archivos sin sanitizarlo: kid="../../dev/null" → HMAC con una clave vacía → se acepta el token falsificado. Sanitize siempre kid.

Inyección del encabezado jwk

El encabezado jwk incluye una clave pública para la verificación. Un servidor vulnerable podría usar directamente la clave incluida, lo que permitiría al atacante proporcionar su propio par de claves, firmar el token con la clave privada e incluir la clave pública. Verifique únicamente contra claves registradas.

Omisión de tokens caducados

Algunas implementaciones olvidaron comprobar la declaración exp o usaron la hora del servidor de forma incoherente. Valide siempre explícitamente exp, nbf e iat. Use una biblioteca que compruebe estas declaraciones de forma predeterminada y nunca desactive la validación de declaraciones en producción.

Comprobación rápida

En el ataque de confusión de claves RS256→HS256, ¿qué utiliza el atacante como secreto HMAC?

Resumen

Las vulnerabilidades de JWT surgen de confiar en el encabezado alg, aceptar alg=none y usar secretos débiles. Solución: fije los algoritmos en el verificador, use secretos robustos y sanee kid. Siguiente: prácticas para implementar JWT de forma segura.

Preguntas frecuentes

¿La lección «Vulnerabilidades de JWT: alg=none y confusión de claves» es gratis?

Sí — el texto completo de «Vulnerabilidades de JWT: alg=none y confusión de claves» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cryptology Academy, actualiza a CoddyKit PRO. El curso de Cryptology Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Vulnerabilidades de JWT: alg=none y confusión de claves»?

Aproveche y corrija los errores de seguridad más habituales en JWT. Practicas Cryptology Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cryptology Academy?

No se requiere experiencia previa. Cryptology Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Vulnerabilidades de JWT: alg=none y confusión de claves»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cryptology Academy?

Sí. Cada lección de Cryptology Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Anatomía de un JWT: encabezado, payload y firma
  2. HS256 frente a RS256: JWT simétricos y asimétricos
  3. Vulnerabilidades de JWT: alg=none y confusión de claves
  4. Buenas prácticas para implementar JWT de forma segura
← Volver a Cryptology Academy