FixVibe
Covered by FixVibehigh

Segurança JWT: riscos de tokens inseguros e validação de reivindicação ausente

JSON Web Tokens (JWTs) fornecem um padrão para transferência de declarações, mas a segurança depende de validação rigorosa. A falha na verificação de assinaturas, prazos de validade ou públicos-alvo permite que os invasores ignorem a autenticação ou reproduzam tokens.

CWE-347CWE-287CWE-613

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ção aud (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 aud contenha um valor que identifique o serviço local; se o serviço não for identificado na declaração aud, 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) e aud (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 exp ou são destinados a um público diferente, conforme definido pela declaração aud [S1].