Vulnerabilidades em JWT
O que é Vulnerabilidades em JWT?
Vulnerabilidades em JWTClasses de falhas de implementação na validação de JSON Web Tokens que permitem a atacantes forjar tokens, escalar privilégios ou contornar a autenticação.
Os JSON Web Tokens transportam claims de autenticação e autorização, mas a flexibilidade do seu algoritmo de assinatura declarado no header produziu várias classes recorrentes de vulnerabilidades. O bug alg=none, divulgado por Tim McLean em 2015, ocorre quando um verificador confia no header alg do próprio token e o encaminha para um verificador "none" que devolve verdadeiro para uma assinatura vazia — permitindo que um atacante reescreva o payload e descarte a assinatura. Foi corrigido no jsonwebtoken do Node antes da versão 4.2.2 (CVE-2015-9235).
A confusão de chaves (CVE-2016-10555) é mais subtil: se um servidor aceita tanto RS256 como HS256, um atacante assina um token com HMAC usando a chave RSA pública do servidor como segredo partilhado; um verificador ingénuo entrega essa chave pública ao HS256.verify() e a falsificação passa. Problemas relacionados incluem segredos HS256 fracos que podem ser quebrados offline com hashcat, ausência de verificações de exp/nbf e pontos de injeção no header — path traversal ou SQL injection no kid, e campos jwk/jku/x5u controlados pelo atacante que apontam a verificação para uma chave que o atacante possui. Em 2022, a CVE-2022-23529 no jsonwebtoken levantou preocupações de RCE através de um objeto de chave manipulado (mais tarde retratada depois de os pré-requisitos de exploração terem sido contestados).
Defesas: fixar o(s) algoritmo(s) aceite(s) no servidor e nunca ler alg a partir de entrada não confiável, usar chaves assimétricas fortes, validar o kid contra uma allowlist, ignorar URLs de chave embutidos, impor a expiração e tratar cada campo do JWT como entrada hostil.
flowchart TD
A[Atacante obtém um JWT válido] --> B{Adultera o header}
B -->|alg none, remove assinatura| C[Verificador salta a verificação?]
B -->|RS256 para HS256| D[HMAC com chave pública]
B -->|jku / kid aponta para chave do atacante| E[Verifica contra chave falsa]
C -->|Sim| F[Token forjado aceite]
D -->|Sim| F
E -->|Sim| F
F --> G[Escalada de privilégios / bypass de auth]
C -->|alg fixado| H[Rejeitado]
D -->|alg fixado| H
E -->|allowlist de kid| H● Exemplos
- 01
Header {"alg":"none"} aceite por uma biblioteca mal configurada.
- 02
O servidor valida um token RS256 usando a sua chave pública como segredo HMAC HS256.
● Perguntas frequentes
O que é Vulnerabilidades em JWT?
Classes de falhas de implementação na validação de JSON Web Tokens que permitem a atacantes forjar tokens, escalar privilégios ou contornar a autenticação. Pertence à categoria Segurança de aplicações da cibersegurança.
O que significa Vulnerabilidades em JWT?
Classes de falhas de implementação na validação de JSON Web Tokens que permitem a atacantes forjar tokens, escalar privilégios ou contornar a autenticação.
Como se defender contra Vulnerabilidades em JWT?
As defesas contra Vulnerabilidades em JWT costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.