Menangani kerentanan paling umum di OWASP Top 10 2025: IDOR dan BOLA serta horizontal dan vertical privilege escalation pada broken access control, ditambah serangan terhadap autentikasi seperti login bypass session fixation insecure password reset dan MFA bypass

Di episode 13 kita mengeksploitasi server yang mempercayai input. Sekarang kita masuk ke peringkat #1 di OWASP Top 10 2025: Broken Access Control — kerentanan paling banyak ditemukan dan paling sering berdampak besar di aplikasi modern. Seperti kita catat di episode 10, aplikasi modern sudah makin tahan terhadap injection, tapi kontrol akses sering dianggap remeh.
Di episode ini kita menyerang dua lapis AAA (dari episode 2): Authorization (siapa boleh mengakses apa — IDOR, privilege escalation) dan Authentication (pembuktian identitas — login bypass, session fixation, password reset, MFA). Memahami keduanya adalah kunci laporan yang tajam: keluhan yang berbeda butuh bukti yang berbeda.
IDOR (Insecure Direct Object Reference) terjadi ketika aplikasi memakai identifier langsung (ID) untuk mengambil object tanpa memverifikasi apakah user berhak atas object itu. Contoh paling sederhana:
GET /api/v1/users/1001/profile
GET /api/v1/users/1002/profile <- ubah ID sajaJika akun user A bisa membaca profil user B hanya dengan mengganti angka di URL, itu IDOR. Uji dengan Burp Repeater: buka endpoint sebagai user sendiri, lalu ganti parameter identifier.
BOLA (Broken Object Level Authorization) adalah nama yang dipakai dalam konteks API (OWASP API Security Top 10). Secara konsep sama dengan IDOR: objek diakses tanpa pengecekan otorisasi di level objek. Di dunia API-first, BOLA konsisten berada di peringkat #1 kerentanan API.
Kunci membedakannya: IDOR adalah penggantian identifier tanpa pengecekan, bukan sekadar menebak. Kalau parameter memakai UUID yang tidak bisa ditebak tapi akses tetap tanpa cek, tetap IDOR — cukup cek apakah ID lain bisa diakses langsung.
Privilege escalation adalah langkah setelah menemukan akses:
role=user menjadi role=admin, atau memanggil endpoint admin tanpa cek.GET /api/v1/admin/users -> 403 (ditutup)
POST /api/v1/user/profile -> ubah parameter role menjadi "admin"Uji yang sistematis: daftar semua fungsi yang bisa dipanggil user biasa, lalu cek apakah ada endpoint admin yang bisa diakses langsung (via URL guessing atau dari JS bundle).
Variasi klasik: query yang bisa di-inject (episode 11), logika if (user) return true yang cacat, atau respons yang membocorkan apakah username valid (username enumeration) — bahan untuk brute force terarah:
hydra -l admin -P /usr/share/wordlists/rockyou.txt target.com http-post-form \
"/login:username=^USER^&password=^PASS^:Invalid"Penyerang menentukan session ID korban sebelum login, lalu memaksa korban login dengan ID itu. Setelah login, session ID yang sama digunakan penyerang. Mitigasi: rotasi session ID setelah autentikasi — periksa apakah aplikasi mengganti PHPSESSID/session setelah login.
Password reset adalah target empuk:
token=12345).curl -H "Host: attacker.com" .../reset membuat link reset mengarah ke server penyerang.curl -X POST http://target.com/api/reset -H "Host: attacker.com" \
-d "email=victim@example.com"Jika email korban berisi link http://attacker.com/reset?token=..., penyerang tinggal menunggu token.
MFA bukan tembok — ada beberapa pola bypass:
Tip
Saat menguji kontrol akses, buat dua akun user di aplikasi (user A dan user B). Uji akses A ke resource B secara sistematis: profile, order, file, message. Ini metode yang paling banyak menemukan IDOR/BOLA di engagement nyata — dan paling mudah direplikasi saat demo ke client.
| Kerentanan | Mitigasi |
|---|---|
| IDOR/BOLA | Validasi otorisasi object secara server-side; gunakan identifier acak (UUID) sebagai tambahan |
| Privilege escalation | RBAC yang tegas; deny by default; jangan percaya parameter client |
| Login bypass | Parameterized query; rate limiting; pesan error yang netral |
| Session fixation | Rotasi session ID saat login; cookie SameSite |
| Password reset | Token acak + short-lived; validasi host header |
| MFA bypass | MFA konsisten; invalidasi session lama; validasi perangkat |
Warning
Mengubah parameter seperti role=admin di lab adalah latihan yang bagus, tapi di sistem produksi bisa mengubah data nyata. Selalu gunakan data dummy, dan pastikan setiap uji di lab/platform resmi — bukan aplikasi milik orang lain. Untuk uji password reset/MFA, gunakan email yang kalian kendalikan sendiri.
Pada episode 14 ini, kalian telah menguasai kelas kerentanan peringkat #1 OWASP.
Inti yang harus dibawa pulang:
Di episode 15 selanjutnya kita membahas JWT attacks & HTTP request smuggling — alg confusion, weak secret brute force, token leakage, dan CL.TE/TE.CL desync attack terhadap backend. Sampai jumpa di episode 15!