cd ~/blog

~/vulns/jwt-secret-disclosure-and-token-forgery.md

JWT Secret Disclosure and Token Forgery

webautor: Jordy Pérez Osorio aviso legal
webJWTsecret-disclosuretoken-forgery

~2 min de lectura


1. Descripción técnica

JWT Secret Disclosure and Token Forgery ocurre cuando un atacante obtiene la clave simétrica usada para firmar tokens y puede generar firmas que el servidor acepta. En algoritmos HMAC como HS256, la misma clave sirve para firmar y verificar. Su exposición entrega la capacidad criptográfica del emisor a quien la conoce.

Esta técnica debe diferenciarse de Weak JWT Secret. Un secreto débil se recupera probando candidatos contra una firma conocida; un secreto expuesto se obtiene directamente desde configuración, código, logs u otra fuente, aunque tenga alta entropía.

// renderizando diagrama…

2. Impacto

Permite modificar claims como identidad, rol o permisos y firmar el resultado. El efecto concreto depende de qué claims utiliza la aplicación para autorizar acciones y de si valida emisor, audiencia, expiración y algoritmo. La exposición no descifra tokens ni revela contraseñas de usuarios.

3. Condiciones necesarias

  1. El atacante obtiene la clave de firma simétrica activa.
  2. Conoce el algoritmo y el formato esperado por el verificador.
  3. Puede presentar un token nuevo al servicio.
  4. La aplicación confía en uno o más claims modificables para tomar una decisión sensible.
  5. La clave todavía no ha sido rotada o retirada.

4. Validación y detección

Primero se confirma de forma local que la clave reproduce la firma de un token legítimo. Después se crea un token con el cambio mínimo necesario y se comprueba si el servidor lo acepta. Esta separación evita atribuir a la firma un efecto que en realidad depende de otro control de acceso.

La revisión defensiva debe buscar secretos en repositorios, .env, imágenes, backups y logs. Una falsificación bien formada puede ser indistinguible de un token legítimo firmado con la misma clave, por lo que una exposición confirmada exige rotación.

5. Explotación documentada en los writeups

5.1. 128-devoops

Una Arbitrary File Read sobre Vite permite descargar .env, donde aparece JWT_SECRET. La clave expuesta se usa para firmar un token administrativo que habilita /execute. La ejecución posterior depende de una OS Command Injection separada.

6. Mitigación

  • Guardar claves en un gestor de secretos y excluirlas de repositorios e imágenes.
  • Restringir su lectura únicamente a los procesos que deban firmar o verificar.
  • Separar claves por servicio, emisor, entorno y propósito.
  • Validar algoritmo, iss, aud, exp, nbf y claims de autorización.
  • Rotar inmediatamente una clave expuesta e invalidar tokens firmados con ella.
  • Considerar firmas asimétricas cuando múltiples servicios sólo necesiten verificar.

7. Clasificación

8. Referencias y conexiones

// relacionados