Impacto do atacante
A validação JWT inadequada permite que os invasores contornem os mecanismos de autenticação forjando declarações ou reutilizando tokens expirados [S1]. Se um servidor aceitar tokens sem uma assinatura válida, um invasor poderá modificar a carga útil para escalar privilégios ou personificar qualquer usuário [S1]. Além disso, a falha em impor a reivindicação de expiração (exp) permite que um invasor use um token comprometido indefinidamente [S1].
Causa Raiz
Um JSON Web Token (JWT) é uma estrutura baseada em JSON usada para representar declarações assinadas digitalmente ou com integridade protegida [S1]. As falhas de segurança normalmente resultam de duas lacunas principais de implementação:
- Aceitação de JWTs não seguros: Se um serviço não aplicar estritamente a verificação de assinatura, ele poderá processar "JWTs não seguros" onde a assinatura estiver ausente e o algoritmo estiver definido como "nenhum" [S1]. Nesse cenário, o servidor confia nas declarações da carga útil sem verificar sua integridade [S1].
- Validação de declaração ausente: a declaração
exp(tempo de expiração) identifica o momento em ou após o qual JWT não deve ser aceito para processamento de [S1]. A declaraçãoaud(público) identifica os destinatários pretendidos do token [S1]. Se não forem verificados, o servidor poderá aceitar tokens expirados ou destinados a um aplicativo diferente [S1].
Correções de concreto
- Aplicar assinaturas criptográficas: Configure o aplicativo para rejeitar qualquer JWT que não use um algoritmo de assinatura forte e pré-aprovado (como RS256).
- Validar Expiração: Implemente uma verificação obrigatória para garantir que a data e a hora atuais sejam anteriores à hora especificada na declaração
exp[S1]. - Verificar público: certifique-se de que a declaração
audcontenha um valor que identifique o serviço local; se o serviço não for identificado na declaraçãoaud, o token deverá ser rejeitado [S1]. - Evitar repetição: Use a declaração
jti(JWT ID) para atribuir um identificador exclusivo a cada token, permitindo que o servidor rastreie e rejeite tokens reutilizados [S1].
Estratégia de detecção
Vulnerabilidades no tratamento de JWT podem ser identificadas analisando a estrutura do token e o comportamento de resposta do servidor:
- Inspeção de cabeçalho: verificação do cabeçalho
alg(algoritmo) para garantir que ele não esteja definido como "nenhum" e use os padrões criptográficos esperados [S1]. - Verificação de reivindicação: confirmação da presença e validade das declarações
exp(expiração) eaud(público) na carga útil JSON [S1]. - Teste de validação: testar se o servidor rejeita corretamente tokens que expiraram de acordo com a declaração
expou são destinados a um público diferente, conforme definido pela declaraçãoaud[S1].
