Bedah tuntas sepuluh kategori kerentanan OWASP Top 10 (2021) dari Broken Access Control hingga SSRF: akar penyebab, skenario eksploitasi nyata, dampak bisnis, dan mitigasi konkretnya; episode ini adalah fondasi kosakata yang akan dipakai di seluruh episode berikutnya sekaligus checklist saat audit aplikasi

Setelah di episode 2 kita membangun SSDLC dan threat modeling STRIDE, sekarang kita isi kosakata teknisnya dengan OWASP Top 10 — daftar sepuluh kategori risiko kerentanan aplikasi web paling kritis, disusun dari data insiden nyata lintas industri. Mengapa ini wajib dikuasai sampai detail? Karena Top 10 adalah lingua franca: saat kalian bilang "ini A01", developer, auditor, dan manajer keamanan paham tingkat urgensinya. Hampir semua compliance framework, tool scanner, dan program bug bounty merujuknya.
Penting dipahami sejak awal: OWASP Top 10 adalah kategori risiko, bukan daftar bug. Satu aplikasi bisa punya dua puluh instance broken access control. Kita pakai versi 2021 yang masih berlaku sebagai referensi utama industri.
| Kode | Kategori | Inti Masalah |
|---|---|---|
| A01 | Broken Access Control | User mengakses data/fungsi di luar haknya |
| A02 | Cryptographic Failures | Data sensitif tidak dienkripsi/enkripsi salah |
| A03 | Injection | Input tak terpercaya dieksekusi sebagai kode |
| A04 | Insecure Design | Desain tanpa kontrol security sejak awal |
| A05 | Security Misconfiguration | Konfigurasi default/terbuka yang tidak dikeraskan |
| A06 | Vulnerable Components | Dependency lama dengan CVE aktif |
| A07 | Identification & Authentication Failures | Sesi/kredensial lemah atau bocor |
| A08 | Software & Data Integrity Failures | Update/artifact tidak diverifikasi (termasuk deserialization) |
| A09 | Security Logging & Monitoring Failures | Serangan tak terdeteksi karena log buruk |
| A10 | Server-Side Request Forgery | Server dipaksa fetch URL milik penyerang |
Perhatikan bahwa A04 (Insecure Design) adalah kategori baru di 2021 — pengakuan resmi bahwa proses desain (episode 2) sama pentingnya dengan implementasi.
Ini kategori nomor satu, dan menurut banyak praktisi justru makin dominan. Intinya: server mempercayai input klien untuk keputusan otorisasi.
GET /api/invoices/1042 HTTP/1.1
Authorization: Bearer <token-milik-user-A>Jika user A boleh membuka invoice 1042 milik user B hanya dengan mengubah angka di URL — itulah IDOR (Insecure Direct Object Reference), varian paling umum A01. Varian lain: privilege escalation via parameter (role=user → role=admin), akses endpoint admin tanpa check, CORS longgar yang membiarkan domain asing membaca respons.
Mitigasi inti:
Bukan cuma "lupa enkripsi", tapi semua kegagalan kriptografi: password di-hash MD5, data kartu disimpan plaintext, TLS dinonaktifkan internal, token JWT ditandatangani dengan kunci lemah secret.
Password : Argon2id (atau bcrypt cost ≥ 12)
Data PII : AES-256-GCM at-rest + TLS 1.2+ in-transit
API token : simpan hash, bukan nilai mentahKesalahan yang paling sering saya lihat di code review: hashing password dengan algoritma cepat (SHA256 polos). Algoritma cepat bagus untuk verifikasi integritas, bencana untuk password — GPU modern mencoba miliaran hash SHA256 per detik, tetapi hanya ribuan untuk Argon2id.
Important
Pertanyaan pertama saat audit: di mana data sensitif aplikasi ini, dan apa statusnya di setiap keadaan (transit, at-rest, in-memory, di log)? Jawaban yang tidak bisa kalian dapatkan dalam 15 menit berarti aplikasi itu belum punya pemetaan data — temuan tersendiri yang layak dilaporkan.
Tiga dekade dan masih di papan atas. Keluarganya luas: SQL injection, NoSQL injection, command injection, LDAP injection, template injection (SSTI). Pola akarnya selalu sama — data dikirim ke interpreter sebagai kode:
// Rentan: string concatenation
db.query("SELECT * FROM users WHERE email = '" + email + "'");
// Aman: parameterized query
db.query("SELECT * FROM users WHERE email = ?", [email]);Command injection sering terlewat karena tersembunyi di kode utilitas:
import { exec } from "child_process";
exec(`convert ${userFilename}.png out.jpg`); // userFilename: "; rm -rf /"Mitigasi: parameterized query (selalu), ORM dengan binding, validasi allowlist untuk input yang harus masuk ke shell, dan hindari exec — gunakan API array argument (execFile) yang tidak melewati shell interpreter.
Tiga kategori ini sering jadi "penyakit sistemik" organisasi:
A04 Insecure Design: fitur transfer uang tanpa limit harian, reset password yang bisa dipakai untuk akun orang lain, flow checkout yang bisa dimanipulasi harga di sisi klien. Tidak ada patch untuk desain — mitigasinya adalah threat modeling (episode 2) dan secure design pattern.
A05 Security Misconfiguration: directory listing aktif, debug mode production, default credential, error stack trace tampil ke user, header security hilang. Scanner DAST menemukan mayoritasnya otomatis — episode 8 membahasnya.
A06 Vulnerable Components: aplikasi hanya sekuat dependency-nya. Satu library logging rentan (contoh nyata: Log4Shell 2021) bisa membuka ribuan aplikasi sekaligus. Mitigasi sistematisnya adalah SCA + SBOM — topik penuh episode 9.
A07 AuthN Failures: credential stuffing dari breach database (mitigasi: MFA, deteksi anomali lokasi), session tidak di-invalidate setelah logout/ganti password, timeout sesi tak terbatas. Detail penuhnya kita bedah di episode 5.
A08 Integrity Failures: deserialization untrusted data, update tanpa signature verification, CI/CD yang menarik plugin tanpa pinning. Ini pintu masuk serangan supply chain — episode 23.
A09 Logging Failures: login gagal tidak dicatat, log tanpa konteks (IP, user), alert tidak ada. Breach rata-rata baru ketahuan setelah ratusan hari — mayoritas karena A09, bukan karena hacker super.
A10 SSRF: aplikasi menerima URL dan melakukan request dari server:
const data = await fetch(req.body.url); // url: http://169.254.169.254/latest/meta-data/Di cloud, metadata service berisi kredensial instance — SSRF ke sana = takeover akun cloud. Mitigasi: allowlist domain tujuan, blokir IP internal/link-local, network segmentation antara worker fetch dan jaringan internal.
Top 10 punya tiga fungsi praktis dalam pekerjaan harian:
Tip
Latihan terbaik: buka Juice Shop lab kalian dari episode 0, dan coba temukan minimal satu contoh untuk tiap kategori Top 10. Aplikasi itu dirancang mencakup semuanya — hint ada di nama produk dan komentar kode sumbernya.
Inti yang harus dibawa pulang:
Di episode 4 selanjutnya kita turun ke level kode: Secure Coding — input validation, output encoding, authorization, dan data handling dengan contoh sebelum/sesudah yang bisa langsung kalian terapkan saat review PR. Sampai jumpa di episode 4!