Belajar Application Security Engineer - OWASP Top 10 (Detail)
Episode 3 of 28

Belajar Application Security Engineer - OWASP Top 10 (Detail)

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

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

Pendahuluan

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.

Peta Besar OWASP Top 10 (2021)

KodeKategoriInti Masalah
A01Broken Access ControlUser mengakses data/fungsi di luar haknya
A02Cryptographic FailuresData sensitif tidak dienkripsi/enkripsi salah
A03InjectionInput tak terpercaya dieksekusi sebagai kode
A04Insecure DesignDesain tanpa kontrol security sejak awal
A05Security MisconfigurationKonfigurasi default/terbuka yang tidak dikeraskan
A06Vulnerable ComponentsDependency lama dengan CVE aktif
A07Identification & Authentication FailuresSesi/kredensial lemah atau bocor
A08Software & Data Integrity FailuresUpdate/artifact tidak diverifikasi (termasuk deserialization)
A09Security Logging & Monitoring FailuresSerangan tak terdeteksi karena log buruk
A10Server-Side Request ForgeryServer 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.

A01: Broken Access Control

Ini kategori nomor satu, dan menurut banyak praktisi justru makin dominan. Intinya: server mempercayai input klien untuk keputusan otorisasi.

Eksploitasi IDOR klasik
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=userrole=admin), akses endpoint admin tanpa check, CORS longgar yang membiarkan domain asing membaca respons.

Mitigasi inti:

  1. Deny by default — akses ditolak kecuali secara eksplisit diizinkan.
  2. Authorization check server-side per request, bukan sekadar menyembunyikan tombol di UI.
  3. Gunakan identifier acak (UUID) sebagai lapisan tambahan — tapi ingat, UUID bukan pengganti authorization check.
  4. Uji dengan dua akun berbeda hak — otomatisasi ini di integration test.

A02: Cryptographic Failures

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.

Aturan minimal penyimpanan kredensial
Password   : Argon2id (atau bcrypt cost ≥ 12)
Data PII   : AES-256-GCM at-rest + TLS 1.2+ in-transit
API token  : simpan hash, bukan nilai mentah

Kesalahan 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.

A03: Injection

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 vs aman
// 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:

Command injection via child_process
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.

A04–A06: Design, Configuration, Components

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–A10: Auth, Integrity, Logging, SSRF

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:

SSRF klasik pada fitur import-by-url
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.

Cara Memakai Top 10 Sebagai AppSec Engineer

Top 10 punya tiga fungsi praktis dalam pekerjaan harian:

  1. Checklist review: saat membaca fitur baru, telusuri sepuluh kategori sambil bertanya "di mana implementasinya?". Jika A01 tidak punya jawaban eksplisit di kode, kalian baru menemukan temuan.
  2. Bahasa komunikasi: "temuan ini A05 severity HIGH" langsung dipahami lintas tim tanpa penjelasan panjang.
  3. Prioritas program: jika data triage kalian menunjukkan dominasi A05, investasi terbaik adalah hardening baseline, bukan training injection.

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.

Common Pitfalls

  • Menghafal daftar tanpa memahami akar: kategori bergeser tiap edisi (2017→2021 banyak berubah); pola akarnya yang abadi.
  • Menganggap scanner menutup Top 10: A01 dan A04 hampir mustahil ditemukan tool otomatis — butuh manusia yang paham business logic.
  • Berhenti di mitigasi teoretis: "gunakan parameterized query" tanpa menunjukkan baris mana yang harus diubah tidak membantu developer apa pun.

Penutup

Inti yang harus dibawa pulang:

  • OWASP Top 10 = kategori risiko, bukan daftar bug; A01 access control masih juara.
  • Akar pola: trust boundary dilanggar (injection/access control), kontrol kripto lemah, desain tanpa security, konfigurasi & dependency terbengkalai.
  • Top 10 dipakai sebagai checklist review, bahasa komunikasi, dan kompas prioritas program.
  • Latih insting kalian di Juice Shop sebelum lanjut.

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!