Belajar Cyber Security - JWT Attacks & HTTP Request Smuggling
Episode 15 of 26

Belajar Cyber Security - JWT Attacks & HTTP Request Smuggling

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

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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: Anatomi dan Serangannya

Anatomi JWT

JWT terdiri tiga bagian yang dipisahkan titik: header, payload, signature:

Struktur JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiJhZG1pbiIsInJvbGUiOiJ1c2VyIn0.
s0me0signature00000000000000000000

Header menyatakan algoritma, payload membawa klaim (sub, role, exp), signature mengamankan keduanya. Coba decode dengan jwt.io atau tool CLI:

Decode JWT
python3 -c "import base64; print(base64.urlsafe_b64decode('eyJzdWIiOiJhZG1pbiJ9' + '='))"

Alg Confusion: none

Header alg: none membuat beberapa library tidak memverifikasi signature sama sekali. Payload dimodifikasi bebas:

JWT alg none
eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJhZG1pbiJ9.

Tanda tangan kosong. Jika server menerima token ini sebagai admin, aplikasi rentan.

Alg Confusion: RS256 → HS256

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:

PythonForge token RS256 -> HS256
import jwt
public_key = open("public.pem").read()
token = jwt.encode({"role": "admin"}, public_key, algorithm="HS256")

Weak Secret Brute Force

Jika server memakai HS256 dengan secret pendek (misalnya secret, password), token bisa di-brute force dari daftar kata umum:

Brute force secret dengan hashcat
hashcat -m 16500 jwt_token.txt /usr/share/wordlists/rockyou.txt
Cara lain dengan jwt_tool
python3 jwt_tool.py jwt_token.txt -C -d /usr/share/wordlists/rockyou.txt

Setelah secret ketemu, forge token admin dengan bebas.

Token Leakage

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

Konsep Desync

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:

  • Content-Length (CL): panjang body dalam byte.
  • Transfer-Encoding (TE): chunked — body terbagi potongan dengan ukuran sendiri.

CL.TE Attack

Frontend memakai Content-Length, backend memakai Transfer-Encoding:

Payload CL.TE
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.

TE.CL Attack

Kebalikannya — frontend memakai chunked, backend memakai Content-Length:

Payload TE.CL
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.

Dampak

  • Bypass WAF/IPS: request jahat disembunyikan di request kedua yang tidak dianalisis frontend.
  • Poisoning cache: request user A tercampur respons user B → data bocor.
  • Credential theft: jika memungkinkan mem-bypass otentikasi per-path.

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.

Mitigasi Ringkas

KerentananMitigasi
JWT alg confusionFixed algoritma; validasi alg terhadap allowlist
JWT weak secretSecret panjang & acak; rotasi rutin
JWT leakageSimpan di HttpOnly cookie; hindari di query string/log
Request smugglingNormalisasi header (tolak CL+TE bersamaan); proxy modern yang konsisten

Penutup

Pada episode 15 ini, kalian telah menguasai dua kerentanan yang memanipulasi kepercayaan protokol.

Inti yang harus dibawa pulang:

  • JWT: cek alg (none, RS256→HS256), brute force weak secret, dan tempat penyimpanan token.
  • Smuggling: CL.TE dan TE.CL memanfaatkan perbedaan interpretasi frontend vs backend.
  • Dampak smuggling: bypass WAF, poisoning cache, dan kontaminasi request user lain.
  • Selalu uji di lab — salah eksekusi smuggling bisa merusak layanan produksi.

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!

Belajar Cyber Security - JWT Attacks & HTTP Request Smuggling | Belajar Cyber Security