Pendahuluan
Beberapa bulan lalu saya menemukan kerentanan Broken Access Control (IDOR) pada sebuah sistem Human Resource Information System (HRIS). Bug ini memungkinkan pengguna dengan peran Finance — yang seharusnya hanya memiliki hak akses read-only (melihat dan mengunduh) — untuk menghapus lampiran slip gaji yang bersifat permanen dan sensitif.
Gambaran Kerentanan
Dalam alur bisnis sistem ini, peran Finance diberikan akses untuk memverifikasi dokumen penggajian. Secara desain antarmuka (UI), pengembang sudah cukup baik dengan tidak menyediakan tombol "Hapus" bagi peran ini.

Namun, celah muncul karena sistem hanya mengandalkan penyembunyian fitur di UI (Security by Obscurity) tanpa validasi izin yang kuat di sisi API (backend). Meskipun sistem tidak merespons perubahan method DELETE pada URL standar, saya berhasil menemukan endpoint penghapusan fungsional dengan menambahkan path tersembunyi.
Langkah Reproduksi (PoC)
- Login menggunakan akun dengan peran Finance.
- Intercept permintaan saat mencoba mengunduh atau melihat file lampiran slip gaji.
Request Asli:
GET /api/v1/hr/payrollpayment/{id}/attachment/{file_id} - Kirim request tersebut ke Repeater (Burp Suite) dan lakukan manipulasi berikut:
Ubah HTTP Method menjadi
DELETE. Tambahkan path/delete/ke dalam URL sebelum ID file. Request Modifikasi:DELETE /api/v1/hr/payrollpayment/{id}/attachment/delete/{file_id} - Kirim request tersebut dan perhatikan respon server.
Response :
HTTP/2 200 OK
Content-Type: application/json
{
"success": true,
"data": null,
"message": "Lampiran slip berhasil dihapus",
"time": 0.15
}
Dampak (Impact)
- Pelanggaran Hak Akses (Privilege Escalation): Pengguna Finance melampaui batas kewenangannya dari sekadar melihat data menjadi mampu menghapus data secara destruktif.
- Pelanggaran Prinsip Least Privilege: Sistem gagal membatasi aksi pengguna berdasarkan peran fungsionalnya di tingkat API.
Kesimpulan
Temuan ini menjadi pengingat bahwa keamanan di sisi klien (UI) tidaklah cukup. Setiap aksi destruktif seperti DELETE harus divalidasi dengan ketat di sisi server. Pengembang wajib menerapkan Role-Based Access Control (RBAC) untuk memastikan bahwa setiap permintaan API diperiksa otoritasnya terhadap resource yang dituju, terlepas dari apakah endpoint tersebut diketahui oleh publik atau tidak.