← Base de Vulnerabilidades
Autenticação A02:2021-Cryptographic Failures CVSS 9.1

JWT — Vulnerabilidades em JSON Web Tokens

JWTs mal implementados permitem falsificação de tokens sem a chave secreta. Veja algorithm confusion (RS256→HS256), none algorithm e weak secrets com exemplos.

Comum em: APIs REST com autenticação JWT, mobile backends, microserviços · Dificuldade: Média — requer entendimento de criptografia assimétrica

O Que É JWT

JSON Web Tokens (JWT) são amplamente usados para autenticação em APIs REST, mas implementações incorretas criam vulnerabilidades críticas. As principais: (1) None Algorithm — aceitar alg:none sem assinatura; (2) Algorithm Confusion — forçar mudança de RS256 para HS256 usando a chave pública como secret; (3) Weak Secret — força bruta com wordlists; (4) kid Injection — parâmetro kid usado em query SQL sem sanitização.

Exemplo Real de Ataque

HTTP Request / Response
# None Algorithm Attack
# Header original: {"alg":"HS256","typ":"JWT"}
# Payload: {"sub":"user123","role":"user"}

# Forjado: {"alg":"none","typ":"JWT"}
# Payload: {"sub":"admin","role":"administrator"}
# Token: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJhZG1pbiIsInJvbGUiOiJhZG1pbmlzdHJhdG9yIn0.

GET /api/v1/admin/users
Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOiJhZG1pbiJ9.

HTTP/1.1 200 OK  ← Servidor aceita token sem assinatura!

Impacto no Negócio e Compliance

Impersonação de qualquer usuário (incluindo admins) sem credenciais. Em SaaS B2B, equivale a acesso irrestrito a todos os tenants. Para fintechs: acesso a contas bancárias, transferências, dados de cartão. Um JWT comprometido invalida toda a camada de autenticação da aplicação.

CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N

Como Remediar

// ❌ INSEGURO — aceita qualquer algoritmo do header
jwt.verify(token, secret);

// ✅ SEGURO — fixe o algoritmo explicitamente
jwt.verify(token, secret, { algorithms: ['HS256'] });

// ✅ RS256: use chave privada para assinar, NUNCA exponha
const token = jwt.sign(payload, privateKey, { algorithm: 'RS256' });
// Verifique com chave pública, algorithm fixado
jwt.verify(token, publicKey, { algorithms: ['RS256'] });

// ✅ Rejeite explicitamente 'none'
if (header.alg === 'none') throw new Error('Algorithm none não permitido');

Como a Veyronn Detecta Esta Vulnerabilidade

Testamos todos os vetores de JWT: algorithm confusion, none algorithm, weak secrets via wordlists customizadas, kid injection SQL/directory traversal, e JWK confusion. Validamos server-side de forma sistemática.

Pronto para Contratar seu Próximo Pentest?

Adquira nossa avaliação pontual feita pelos melhores profissionais do mercado ou implemente o software da Veyronn 24/7.