Belajar Cyber Security #7: Web Security Fundamentals — OWASP Top 10 2025 & Attack Surface

Hari ini saya mulai masuk ke wilayah yang paling saya tunggu sekaligus paling saya takuti sebagai programmer: keamanan aplikasi web. Selama ini saya tahunya “aplikasi web itu ya HTTP, endpoint, database” — tapi ternyata setiap endpoint itu adalah pintu, dan setiap pintu bisa didorong dari luar. Di episode #1 kita sudah bicara CIA Triad sebagai cara berpikir; kali ini saya catat peta praktisnya: OWASP Top 10 dan konsep attack surface.

Infografis daftar OWASP Top 10 versi 2025
Daftar OWASP Top 10 versi 2025 — dua kategori baru (A03, A10) dan Injection turun ke #5.

Attack surface: semua yang bisa disentuh penyerang

Analogi sederhana yang saya pakai: attack surface adalah jumlah “lubang” pada gedung yang bisa dicoba orang asing — bukan cuma pintu depan, tapi jendela, ventilasi, saluran air, sampai kotak pos. Dalam aplikasi web, attack surface mencakup:

  • Semua endpoint HTTP (termasuk yang jarang dipakai dan sering terlupa, misalnya route debug atau backup lama)
  • Setiap kolom input: form login, search, upload file, bahkan parameter URL seperti ?id=123
  • API yang dilayani (sering tidak se-terproteksi halaman web utama)
  • Header HTTP, cookie, dan token yang dikirim browser
  • Konfigurasi server, CORS, directory listing, file .git yang ikut ter-deploy

Prinsip yang saya catat: makin banyak permukaan, makin besar peluang salah konfigurasi. Itulah kenapa di episode #6 kita bicara membatasi port yang terbuka — pola pikirnya sama, hanya skala aplikasi.

OWASP Top 10: peta risiko versi 2025

OWASP (Open Worldwide Application Security Project) menerbitkan daftar 10 risiko keamanan web paling kritis, diperbarui terakhir final November 2025. Versi 2025 ini menarik buat saya karena dua kategori baru muncul dan satu peringkat naik drastis. Ini daftar lengkapnya:

KodeRisikoInti masalah
A01:2025Broken Access ControlPengguna bisa mengakses data/fitur yang bukan miliknya
A02:2025Security MisconfigurationDefault config dibiarkan, fitur debug aktif, CORS longgar
A03:2025Software Supply Chain FailuresKetergantungan pihak ketiga/dependency yang dikompromikan (BARU)
A04:2025Cryptographic FailuresData sensitif dienkripsi lemah atau tidak sama sekali
A05:2025InjectionInput pengguna dieksekusi sebagai kode/query (SQLi, XSS, dll)
A06:2025Insecure DesignRisiko lahir dari desain, bukan sekadar implementasi salah
A07:2025Authentication FailuresLogin lemah, sesi mudah dicuri, brute force dibiarkan
A08:2025Software or Data Integrity FailuresUpdate/CI-CD/kurasi data tanpa verifikasi integritas
A09:2025Security Logging and Alerting FailuresKejadian tak tercatat, tidak ada peringatan
A10:2025Mishandling of Exceptional ConditionsError/exception diabaikan sampai jadi celah (BARU)

Apa yang berubah dari versi 2021

Yang membuat saya berkaca-kaca: dua kategori baru keduanya “modern developer problems”. A03 Software Supply Chain Failures lahir karena kasus seperti xz utils dan rentetan kompromis dependency npm/PyPI — bukan salah kita menulis kode, tapi salah kita percaya paket pihak ketiga tanpa verifikasi. Dan A10 Mishandling of Exceptional Conditions — hmm, ini pribadi banget: selama ini saya menganggap try/catch hanya urusan “biar tidak crash”, ternyata menelan error diam-diam juga bisa membuka jalan penyerang.

Dua perubahan lain yang saya catat: Security Misconfiguration naik dari #5 ke #2 — data menunjukkan miskonfigurasi lebih sering jadi pintu masuk daripada kode yang bocor — dan SSRF (Server-Side Request Forgery) kini digabung ke dalam Broken Access Control. Peringkat Injection turun ke #5, tapi tetap kategori dengan jumlah CVE terbanyak, jadi bukan berarti aman.

Cara saya memakai daftar ini (bukan sebagai checklist doang)

Kesalahan pemahaman saya awalnya: menganggap OWASP Top 10 sebagai kotak centang — centang semua, selesai. Padahal OWASP sendiri menegaskan daftar ini adalah peringkat risiko, bukan checklist kepatuhan. Yang saya terapkan sekarang:

  • Desain dulu, kode kemudian (A06): sebelum menulis fitur, tanyakan “bagaimana fitur ini bisa disalahgunakan?” — mirip TDD, tapi untuk ancaman.
  • Default tolak (A01): setiap endpoint baru, akses ditolak kecuali dideklarasikan izinnya.
  • Audit dependency berkala (A03/A08): npm audit / composer audit bukan tugas “nanti kalau sempat”.
  • Log yang bisa dibaca orang (A09): mencatat kejadian tidak cukup kalau tidak ada yang membaca dan mengingatkan.

Untuk tiga kategori yang paling “coder-facing” — Injection (A05), Authentication Failures (A07), dan Broken Access Control (A01) — saya akan bahas tuntas satu per satu di episode berikutnya, dimulai dari SQL Injection. Persiapan yang saya sudah lakukan: menyiapkan lab lokal sengaja vulnerabel supaya bisa latihan secara legal di mesin sendiri. Mengingatkan diri sendiri: menguji keamanan tanpa izin tertulis adalah pelanggaran UU ITE — semua latihan harus di lingkungan milik sendiri atau program resmi.

Sumber

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses