// ferramenta · tokens

JWT / JOSE Attack Lab

Decodifique, edite e re-assine JWTs no seu navegador e dispare os ataques clássicos de autenticação. As chaves nunca saem da máquina — tudo roda com WebCrypto, local.

Roda 100% no seu navegador · nenhuma chave ou token sai da máquina

Assinatura
Gerar par de chaves:

Ataques

Token forjado

Para uso em testes autorizados, pesquisa e educação. Não teste tokens/sistemas sem permissão explícita.

// referência

O que é JWT e JOSE

Um JWT (JSON Web Token) carrega claims em três partes — header, payload e assinatura — codificadas em base64url e separadas por ponto. O detalhe que mais confunde: um JWT típico não é criptografado, é apenas assinado (um JWS). Qualquer pessoa decodifica e lê o header e o payload; a assinatura só garante integridade e autenticidade.

JOSE (JSON Object Signing and Encryption) é a família de specs que padroniza isso: JWS (assinatura), JWE (criptografia), JWA (algoritmos) e JWK (chaves). A maioria das falhas de JWT vem de confiar em campos que o próprio atacante controla — a começar pelo header alg.

Os vetores de ataque clássicos

alg: none

Remove a assinatura (alg none/None/NONE/nOnE). Funciona contra libs que não rejeitam o algoritmo none.

Confusão RS256 → HS256

Usa a chave PÚBLICA RSA (cole no campo de chave pública) como segredo HMAC: a lib verifica HS256 com a pública, que é conhecida.

kid → /dev/null

kid aponta para um arquivo vazio: a chave de verificação vira vazia, então assinamos HS256 com chave nula.

kid SQLi

Injeta SQL no kid para forçar o backend a retornar uma chave conhecida/controlada na consulta de chaves.

jwk injection

Gera um par no navegador, embute a pública no header jwk e auto-assina: libs que confiam no jwk embutido aceitam.

jku injection

Aponta o header jku para uma URL sua; hospede o JWKS gerado abaixo e a lib busca a sua chave.

Perguntas frequentes

O que é o ataque alg:none em JWT?

É quando o token declara alg: none (ou variações como None/NONE) e a biblioteca aceita o JWT sem verificar a assinatura. Se o backend não rejeitar o algoritmo none, dá para forjar qualquer payload.

Como funciona a confusão de algoritmo RS256 → HS256?

O servidor espera RS256 (assinatura assimétrica), mas a biblioteca aceita HS256. O atacante assina o token em HS256 usando a chave pública RSA — que é conhecida — como segredo HMAC, e a verificação passa.

Dá para usar sem o Burp Suite?

Sim. O JWT Attack Lab roda 100% no navegador com WebCrypto: você decodifica, edita, re-assina e dispara os ataques clássicos sem instalar nada nem usar proxy.

O que é jwk e jku injection?

São ataques que apontam a verificação para uma chave controlada pelo atacante: jwk embute a chave pública no próprio header; jku aponta para uma URL com um JWKS hospedado por você. Libs que confiam nesses campos aceitam o token auto-assinado.

Os tokens ou chaves são enviados para algum servidor?

Não. Tudo acontece localmente no navegador via WebCrypto — nenhum token, segredo ou chave sai da sua máquina.

Seus tokens resistem a isso?

A IntruderLabs executa o pentest que encontra e prova falhas de autenticação antes de um atacante — sob a sua marca, com relatório white-label.

Fale com a gente →