
🐍 Um kit de ferramentas para testar, ajustar e quebrar JSON Web Tokens
jwt_tool.py é um kit de ferramentas para validar, forjar, escanear e adulterar JWTs (JSON Web Tokens).

Suas funcionalidades incluem:
Esta ferramenta foi criada para pentesters, que precisam verificar a força dos tokens em uso e sua suscetibilidade a ataques conhecidos. Uma variedade de opções de adulteração, assinatura e verificação está disponível para ajudar a aprofundar as potenciais fraquezas presentes em algumas bibliotecas JWT.
Também tem sido útil para participantes de CTF - já que os CTFs parecem estar interessados em JWTs atualmente.
Também pode ser útil para desenvolvedores que usam JWTs em projetos, mas que desejam testar a estabilidade e vulnerabilidades conhecidas ao usar tokens forjados.
Esta ferramenta foi escrita nativamente em Python 3 (versão 3.6+) usando as bibliotecas comuns; no entanto, várias funções criptográficas (e a estética/legibilidade geral) exigem a instalação de algumas bibliotecas Python comuns.
(Uma versão mais antiga, em Python 2.x, desta ferramenta está disponível no ramo legado para aqueles que precisarem, embora não seja mais suportada ou atualizada)
A utilização preferida do jwt_tool é com a imagem docker oficial do jwt_tool hospedada no Dockerhub.
O comando base para executá-lo é o seguinte:
Comando base para executar o jwt_tool:
docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
Ao usar o comando acima, você pode acrescentar quaisquer outros argumentos normalmente.
Observe que os arquivos locais no seu diretório de trabalho atual serão mapeados para o diretório /tmp do contêiner docker, para que você possa usá-los usando esse caminho absoluto nos seus argumentos.
Ou seja:
/tmp/localfile.txt
A instalação é apenas uma questão de baixar o arquivo jwt_tool.py (ou fazer git clone do repositório).
(chmod o arquivo também se quiser adicioná-lo ao seu $PATH e chamá-lo de qualquer lugar.)
$ git clone https://github.com/ticarpi/jwt_tool
$ python3 -m pip install -r requirements.txt
Na primeira execução, a ferramenta gerará um arquivo de configuração, alguns arquivos utilitários, um arquivo de log e um conjunto de chaves Públicas e Privadas em vários formatos.
jwtconf.ini como o valor "jwkloc".Para corrigir cores quebradas no cmd/Powershell do Windows: descomente as duas linhas abaixo em jwt_tool.py (remova o "# " do início de cada linha).
Você também precisará instalar o colorama: python3 -m pip install colorama
# import colorama
# colorama.init()
O primeiro argumento deve ser o próprio JWT (a menos que ele seja fornecido em um cabeçalho ou valor de cookie). Não fornecer argumentos adicionais mostrará os valores decodificados do token para revisão.
$ python3 jwt_tool.py <JWT>
ou o comando base do Docker:
$ docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
O kit de ferramentas validará o token e listará os valores do cabeçalho e do payload.
Os diversos argumentos adicionais levam você diretamente à função apropriada e retornam um token pronto para uso nos seus testes.
Por exemplo, para adulterar o token existente, execute o seguinte:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -T
Muitas opções precisam de valores adicionais para definir configurações.
Por exemplo, para executar um tipo específico de exploit, você precisa escolher a opção eXploit (-X) e selecionar a vulnerabilidade (aqui usando "a" para o exploit alg:none):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -X a
Algumas opções, como verificar tokens, exigem parâmetros/arquivos adicionais a serem fornecidos (aqui fornecendo a Chave Pública no formato PEM):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -V -pk public.pem
Todos os modos agora permitem enviar o token diretamente para um aplicativo.
Você precisa especificar:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -rh "Origin: null" -cv "Welcome" -M erVárias respostas da solicitação são exibidas:
Aqui está uma rápida visão geral de uma avaliação básica de uma implementação de JWT. Se não houver sucesso com essas opções, então investigue mais a fundo outros modos e opções para procurar novas vulnerabilidades (ou zero-days!).
Leia o valor do token para ter uma noção das claims/valores esperados no aplicativo:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw
Execute um Playbook Scan usando o token fornecido diretamente contra o aplicativo para procurar configurações incorretas comuns:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -M pb
Se alguma vulnerabilidade bem-sucedida for encontrada, altere quaisquer claims relevantes para tentar explorá-la (aqui usando o exploit Inject JWKS e injetando um novo nome de usuário):
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -X i -I -pc name -pv admin
Vá mais fundo testando valores e claims inesperados para identificar comportamentos inesperados do aplicativo, ou execute ataques na lógica de programação ou no processamento de tokens:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -I -hc kid -hv custom_sqli_vectors.txt
Revise qualquer exploração bem-sucedida consultando os logs para ler mais dados sobre a solicitação e :
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -X i -I -pc name -pv admin
Para obter uma lista de opções, chame a função de uso:
Algumas opções, como verificar tokens, exigem parâmetros/arquivos adicionais a serem fornecidos:
$ python3 jwt_tool.py -h
Um guia do usuário mais detalhado pode ser encontrado na página wiki.

Vá até o JWT Attack Playbook para um passo a passo detalhado do que são JWTs, o que eles fazem e um fluxo de trabalho completo de como testá-los minuciosamente em busca de vulnerabilidades, fraquezas comuns e erros de codificação não intencionais.
Regex para encontrar JWTs na busca do Burp
(certifique-se de que as opções 'Case sensitive' e 'Regex' estejam marcadas)
[= ]eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9._-]* - versão url-safe do JWT
[= ]eyJ[A-Za-z0-9_\/+-]*\.[A-Za-z0-9._\/+-]* - todas as versões de JWT (maior possibilidade de falsos positivos)
JWT Attack Playbook (https://github.com/ticarpi/jwt_tool/wiki) - para uma metodologia completa de teste de JWT
Uma ótima introdução aos JWTs - https://jwt.io/introduction/
Grande parte da inspiração inicial para esta ferramenta vem das vulnerabilidades descobertas por Tim McLean.
Confira o blog dele sobre fraquezas de JWT aqui: https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/
Um monte de exercícios para testar vulnerabilidades de JWT são fornecidos pela Pentesterlab (https://www.pentesterlab.com). Eu recomendo fortemente uma assinatura PRO se você estiver interessado em Pentest de Aplicações Web.
OBSERVAÇÃO: Este kit de ferramentas resolverá a maioria dos exercícios de JWT da Pentesterlab em poucos segundos quando usado corretamente; no entanto, eu o incentivo fortemente a trabalhar nesses exercícios por conta própria, descobrindo a estrutura e as fraquezas. Afinal, tudo se resume a aprender...