Introdução

JSON Web Tokens (JWT) são uma forma compacta, segura e independente de transmitir informações entre partes como um objeto JSON. Eles são comumente utilizados para autenticação e autorização em aplicações web e APIs (1). Este artigo irá discutir problemas de segurança associados ao uso de JWT, formas de utilização, melhores práticas e fontes relevantes, incluindo artigos científicos.

Problemas de segurança

Embora JWT seja uma solução eficiente e popular para autenticação e autorização, existem problemas de segurança que devem ser considerados. Os principais problemas incluem:

  1. Roubo de tokens: Se um atacante obtiver acesso a um JWT, ele pode se passar pelo usuário legítimo e ter acesso não autorizado aos recursos protegidos (2).
  2. Ataques de força bruta: Atacantes podem tentar adivinhar segredos usados para assinar tokens JWT, comprometendo a integridade e a confidencialidade dos dados (3).
  3. Vulnerabilidades de implementação: Implementações incorretas de JWT podem levar a vulnerabilidades, como a falha em verificar a assinatura do token ou o uso de algoritmos fracos para assinar tokens (4).

Formas de utilização

JWT pode ser utilizado de várias formas em aplicações web e APIs:

  1. Autenticação: JWT permite que servidores verifiquem a identidade dos usuários sem a necessidade de armazenar informações de sessão no lado do servidor (1). Os tokens podem ser armazenados no lado do cliente, como em cookies ou localStorage.
  2. Autorização: Após autenticar um usuário, JWT pode ser usado para conceder acesso a recursos específicos com base nas reivindicações (claims) contidas no token (5).
  3. Integração entre sistemas: JWT pode ser utilizado para transmitir informações de maneira segura entre sistemas distintos, garantindo a integridade e a autenticidade dos dados transmitidos (6).

Melhores práticas

Algumas melhores práticas para lidar com JWT incluem:

  1. Utilizar HTTPS: Para proteger a comunicação entre cliente e servidor e evitar o roubo de tokens, é essencial usar HTTPS (7).
  2. Validar a assinatura: Sempre verifique a assinatura dos tokens JWT recebidos para garantir que não foram manipulados (8).
  3. Evitar informações sensíveis: Não inclua informações sensíveis, como senhas, nos tokens JWT, pois eles podem ser decodificados e lidos por qualquer pessoa (9).
  4. Limitar a duração do token: Tokens JWT devem ter uma duração limitada para minimizar o impacto caso sejam roubados (10).
  5. Atualizar segredos e algoritmos regularmente: Use algoritmos fortes para assinar tokens e atualize os segredos periodicamente para reduzir o risco de ataques de força bruta (3).

O que são JWT attacks?
JWT attacks são ataques direcionados à segurança e integridade de tokens JWT (JSON Web Tokens) usados em sistemas de autenticação e autorização. Existem várias formas de ataque, e a seguir estão alguns exemplos e referências de vulnerabilidades publicadas:

  1. Ataque de “None” Algorithm: Nesse ataque, o invasor manipula o JWT, alterando o algoritmo de assinatura para “none”, fazendo com que o servidor aceite o token sem verificar a assinatura. Essa vulnerabilidade foi identificada e corrigida em várias bibliotecas JWT (1).
  2. Ataque de chave pública como segredo compartilhado: Em alguns casos, a implementação JWT pode permitir que um atacante utilize a chave pública do servidor como segredo compartilhado para assinar um token forjado. O servidor, então, aceita o token como válido, permitindo que o atacante acesse recursos protegidos. Essa vulnerabilidade foi descoberta e documentada em várias bibliotecas JWT (2).
  3. Roubo de tokens JWT: Se um invasor obtiver acesso a um token JWT, poderá se passar pelo usuário legítimo e ter acesso não autorizado aos recursos protegidos. Isso pode ocorrer devido a vulnerabilidades na aplicação, como Cross-Site Scripting (XSS) (3) ou exposição indevida de tokens em logs ou URLs (4).
  4. Ataque de força bruta: Nesse ataque, o invasor tenta adivinhar o segredo usado para assinar tokens JWT por meio de tentativa e erro. Se o segredo for descoberto, o invasor pode forjar tokens válidos e ter acesso aos recursos protegidos (5).

Referências:

Fontes e artigos científicos

(1) Jones, M., Bradley, J., & Sakimura, N. (2015). JSON Web Token (JWT). RFC 7519. https://tools.ietf.org/html/rfc7519

(2) Gondree, M., & Peterson, Z. N. (2014).

Leave a Reply

Your email address will not be published. Required fields are marked *

× Fale conosco