Vulnerabilidades en JWT
¿Qué es Vulnerabilidades en JWT?
Vulnerabilidades en JWTClases de fallos de implementación en la validación de JSON Web Tokens que permiten a los atacantes falsificar tokens, escalar privilegios o evadir la autenticación.
Los JSON Web Tokens transportan claims de autenticación y autorización, pero la flexibilidad de su algoritmo de firma declarado en la cabecera ha producido varias clases recurrentes de vulnerabilidades. El bug alg=none, divulgado por Tim McLean en 2015, ocurre cuando el verificador confía en la propia cabecera alg del token y delega en un verificador "none" que devuelve verdadero para una firma vacía, permitiendo al atacante reescribir el payload y eliminar la firma. Se corrigió en la librería jsonwebtoken de Node anterior a la 4.2.2 (CVE-2015-9235).
La confusión de claves (CVE-2016-10555) es más sutil: si un servidor acepta tanto RS256 como HS256, un atacante firma un token con HMAC usando la clave RSA pública del servidor como secreto compartido; un verificador ingenuo introduce esa clave pública en HS256.verify() y la falsificación pasa. Otros problemas relacionados incluyen secretos HS256 débiles que se pueden romper offline con hashcat, ausencia de comprobaciones de exp/nbf y sinks de inyección en la cabecera: path traversal o inyección SQL en kid, y campos jwk/jku/x5u controlados por el atacante que apuntan la verificación hacia una clave que él mismo posee. En 2022, la CVE-2022-23529 en jsonwebtoken planteó preocupaciones de RCE mediante un objeto de clave manipulado (posteriormente retirada tras cuestionarse los requisitos previos del exploit).
Defensas: fijar el algoritmo o algoritmos aceptados en el lado del servidor y nunca leer alg desde entrada no confiable, usar claves asimétricas fuertes, validar kid contra una lista de permitidos, ignorar las URLs de claves embebidas, forzar la caducidad y tratar cada campo del JWT como entrada hostil.
flowchart TD
A[El atacante obtiene un JWT válido] --> B{Manipular cabecera}
B -->|alg none, quitar firma| C[¿El verificador omite la comprobación?]
B -->|RS256 a HS256| D[HMAC con clave pública]
B -->|jku / kid apunta a clave del atacante| E[Verificar contra clave maliciosa]
C -->|Sí| F[Token falsificado aceptado]
D -->|Sí| F
E -->|Sí| F
F --> G[Escalada de privilegios / evasión de auth]
C -->|alg fijado| H[Rechazado]
D -->|alg fijado| H
E -->|kid en lista de permitidos| H● Ejemplos
- 01
Cabecera {"alg":"none"} aceptada por una librería mal configurada.
- 02
El servidor valida un token RS256 usando su clave pública como secreto HMAC de HS256.
● Preguntas frecuentes
¿Qué es Vulnerabilidades en JWT?
Clases de fallos de implementación en la validación de JSON Web Tokens que permiten a los atacantes falsificar tokens, escalar privilegios o evadir la autenticación. Pertenece a la categoría de Seguridad de aplicaciones en ciberseguridad.
¿Qué significa Vulnerabilidades en JWT?
Clases de fallos de implementación en la validación de JSON Web Tokens que permiten a los atacantes falsificar tokens, escalar privilegios o evadir la autenticación.
¿Cómo defenderse de Vulnerabilidades en JWT?
Las defensas contra Vulnerabilidades en JWT combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.