Receber por email
← Voltar para o catálogo

jwt-attacks

Detect JWT implementation vulnerabilities including algorithm confusion, none algorithm acceptance, weak secrets, and JWK injection attacks.

37estrelas
Atualizado há 7 meses

Ver no GitHub ↗ Licença: Apache-2.0

Como adicionar

/plugin marketplace add ByamB4/find-cve-agent

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/jwt-attacks/svg)](https://www.skillteca.com.br/skills/jwt-attacks)

Skills relacionadas

Ver todas de Pesquisa e Web →

Alerta por categoria

Receba novas skills de Pesquisa e Web toda segunda

1 email curto, só com as skills novas de Pesquisa e Web. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

JWT Attack Detection

When to Use

Audit JWT verification/generation libraries, authentication implementations, and any code that validates or creates JSON Web Tokens.

Attack Types

1. Algorithm Confusion (RS256 to HS256)

The server uses RS256 (asymmetric) but the attacker changes the token header to HS256 (symmetric) and signs with the public key as the HMAC secret.

Conditions: Library accepts algorithm from token header without allowlist validation.

2. alg:none Bypass

Token header specifies "alg": "none", and the library accepts unsigned tokens.

Conditions: Library does not validate algorithm or allows "none".

3. JWK Header Injection

Attacker embeds their own public key in the token header via the jwk parameter, and the library uses it for verification.

4. Weak HMAC Secrets

HMAC secrets that are short, common words, or default values. Can be brute-forced offline.

5. kid (Key ID) Attacks

  • Path traversal: "kid": "../../dev/null" -- sign with empty key
  • SQL injection: "kid": "' UNION SELECT 'secret' --" -- inject known key
  • Command injection: "kid": "|id" -- if kid is passed to shell

6. jku/x5u URL Manipulation

jku (JWK Set URL) or x5u (X.509 URL) in header points to attacker-controlled server hosting a JWK Set with the attacker key.

Process

Step 1: Find JWT Usage

grep -rn "jwt\.verify\|jwt\.decode\|jwt\.sign\|jwt\.encode" .
grep -rn "jsonwebtoken\|jose\|PyJWT\|go-jose\|nimbus-jose" .
grep -rn "JWTVerify\|jwtVerify\|createRemoteJWKSet" .

Step 2: Check Algorithm Validation

grep -rn "algorithms\|algorithm.*=\|alg.*:" . | grep -i jwt

Is the algorithm explicitly specified or taken from the token header?

// VULNERABLE: no algorithm specified
jwt.verify(token, key);

// SAFE: algorithm allowlist
jwt.verify(token, key, { algorithms: ['RS256'] });

Step 3: Check for none Algorithm

grep -rn "none\|None\|NONE" . | grep -i "alg\|algorithm"

Step 4: Check kid Parameter Handling

grep -rn "kid\|keyId\|key_id\|getKey\|keyStore" .

Is the kid value used in file paths, database queries, or command execution?

Step 5: Check Secret Strength

grep -rn "secret\|SECRET\|JWT_SECRET\|TOKEN_SECRET" .

Is the secret hardcoded, from environment variable, or sufficiently random?

CVSS Guidance

  • Algorithm confusion to forge admin tokens: CRITICAL 9.1
  • alg:none bypass: CRITICAL 9.1
  • JWK injection: HIGH 8.1
  • Weak HMAC secret (brute-forceable): HIGH 7.5
  • kid path traversal: HIGH 7.5-8.1
  • kid SQLi: CRITICAL 9.8

References

  • [Sinks](references/sinks.md) -- JWT libraries and vulnerability status
  • [False Positive Indicators](references/false-positive-indicators.md)
  • [PoC Skeleton](references/poc-skeleton.md)
Compartilhar X LinkedIn