Mengeksploitasi kepercayaan pada token dan protokol: serangan JWT seperti alg confusion none dan RS256 ke HS256, brute force weak secret, dan token leakage, ditambah HTTP request smuggling CL.TE dan TE.CL untuk meracuni request backend dan mem-bypass kontrol akses

Setelah di episode 14 kita menyerang kontrol akses dan autentikasi klasik, sekarang dua topik yang lebih "advanced" dan sangat relevan di era API-first: JWT attacks dan HTTP request smuggling. Keduanya masuk kategori Software and Data Integrity Failures di OWASP Top 10 2025 — kerentanan yang memanipulasi apa yang dipercaya sistem: token dan batas request.
Mengapa penting? JWT dipakai hampir di semua aplikasi modern untuk session dan API auth; HTTP request smuggling jarang ditemui tapi dampaknya masif — bisa mem-bypass WAF, meracuni request user lain, dan mencuri data. Keduanya menguji pemahaman kalian tentang detail protokol, bukan sekadar payload generik.
JWT terdiri tiga bagian yang dipisahkan titik: header, payload, signature:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiJhZG1pbiIsInJvbGUiOiJ1c2VyIn0.
s0me0signature00000000000000000000Header menyatakan algoritma, payload membawa klaim (sub, role, exp), signature mengamankan keduanya. Coba decode dengan jwt.io atau tool CLI:
python3 -c "import base64; print(base64.urlsafe_b64decode('eyJzdWIiOiJhZG1pbiJ9' + '='))"Header alg: none membuat beberapa library tidak memverifikasi signature sama sekali. Payload dimodifikasi bebas:
eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJhZG1pbiJ9.Tanda tangan kosong. Jika server menerima token ini sebagai admin, aplikasi rentan.
Versi yang lebih licik. Server menerima token RS256 (asimetris, public key untuk verifikasi). Penyerang menulis ulang header menjadi HS256 (simetris, satu secret) dan menandatangani dengan public key server — karena public key itu publik, sementara banyak library memakai public key sebagai secret HS256 tanpa cek:
import jwt
public_key = open("public.pem").read()
token = jwt.encode({"role": "admin"}, public_key, algorithm="HS256")Jika server memakai HS256 dengan secret pendek (misalnya secret, password), token bisa di-brute force dari daftar kata umum:
hashcat -m 16500 jwt_token.txt /usr/share/wordlists/rockyou.txtpython3 jwt_tool.py jwt_token.txt -C -d /usr/share/wordlists/rockyou.txtSetelah secret ketemu, forge token admin dengan bebas.
JWT yang bocor lewat log, referrer, query string, atau storage yang salah (localStorage lebih mudah di-XSS daripada HttpOnly cookie). Satu prinsip: JWT di localStorage adalah undangan XSS — dari episode 12 kita tahu XSS bisa membaca localStorage dengan mudah.
Tip
jwt_tool (python) adalah tool serba-bisa untuk JWT: dekode, ubah alg, brute force secret, dan forge token. Latih di lab (misalnya aplikasi yang sengaja rentan) untuk membiasakan urutan uji: cek alg, cek secret, cek klaim yang dimodifikasi.
HTTP request smuggling mengeksploitasi perbedaan interpretasi antara frontend proxy (LB/WAF) dan backend server tentang panjang request. Frontend dan backend mengira panjang request berbeda, sehingga sisa request "diselundupkan" sebagai awal request berikutnya — meracuni permintaan user lain.
Dua header penentu:
chunked — body terbagi potongan dengan ukuran sendiri.Frontend memakai Content-Length, backend memakai Transfer-Encoding:
POST / HTTP/1.1
Host: target.com
Content-Length: 4
Transfer-Encoding: chunked
12
GET /admin HTTP/1.1
Host: target.com
0
Backend membaca potongan 12 byte (berisi GET /admin ...), memprosesnya sebagai request kedua — request yang tidak pernah lewat frontend, sehingga bisa mem-bypass WAF/kontrol akses.
Kebalikannya — frontend memakai chunked, backend memakai Content-Length:
POST / HTTP/1.1
Host: target.com
Content-Length: 4
Transfer-Encoding: chunked
5c
GPOST / HTTP/1.1
Host: target.com
0
Hasilnya request pertama berisi sisa yang diinterpretasikan berbeda kedua server.
Warning
Request smuggling adalah salah satu teknik paling merusak dan paling mudah merusak produksi jika salah eksekusi — request yang salah bisa mengganggu layanan bagi semua user. Jangan pernah menguji ini di sistem produksi tanpa izin eksplisit. Latih di lab (PortSwigger Web Security Academy menyediakan lab khusus) sampai benar-benar paham perilakunya.
| Kerentanan | Mitigasi |
|---|---|
| JWT alg confusion | Fixed algoritma; validasi alg terhadap allowlist |
| JWT weak secret | Secret panjang & acak; rotasi rutin |
| JWT leakage | Simpan di HttpOnly cookie; hindari di query string/log |
| Request smuggling | Normalisasi header (tolak CL+TE bersamaan); proxy modern yang konsisten |
Pada episode 15 ini, kalian telah menguasai dua kerentanan yang memanipulasi kepercayaan protokol.
Inti yang harus dibawa pulang:
alg (none, RS256→HS256), brute force weak secret, dan tempat penyimpanan token.Di episode 16 selanjutnya kita masuk fase network & system attacks: network attacks & packet analysis — analisis paket dengan Wireshark/tcpdump, lalu serangan L2/L3 seperti ARP spoofing, DNS poisoning, MITM dengan bettercap/Ettercap/responder, dan DHCP starvation. Sampai jumpa di episode 16!