🐍 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!).