IDOR atau Insecure Direct Object Reference merupakan salah satu kerentanan pada sisi authorization yang terjadi ketika aplikasi menggunakan ID atau identifier dari pengguna tanpa memastikan bahwa pengguna tersebut memiliki hak untuk mengakses data yang diminta. Kondisi ini dapat menyebabkan pengguna mengakses data milik pengguna atau perusahaan lain hanya dengan mengubah ID pada request.
Pada pengujian keamanan aplikasi LabKeu, pengujian difokuskan pada endpoint data keuangan perusahaan. Tujuannya adalah mengetahui apakah setiap perusahaan hanya dapat mengakses data miliknya sendiri atau apakah data perusahaan lain dapat diakses dengan mengubah ID pada URL.
🔎 Fokus Pengujian
Temuan: IDOR / Broken Object Level Authorization
Target: LabKeu — 192.168.56.105:3000
Endpoint: /api/perusahaan/<id>/data-keuangan
Lingkungan pengujian: Kali Linux / VirtualBox
Hasil utama: data keuangan perusahaan lain dapat diakses dengan mengubah ID perusahaan
❓ Apa Itu IDOR pada Aplikasi Web?
IDOR atau Insecure Direct Object Reference merupakan masalah keamanan ketika aplikasi menggunakan identifier seperti ID untuk menentukan data yang akan ditampilkan, tetapi tidak melakukan pemeriksaan authorization yang cukup.
Sederhananya, aplikasi dapat memiliki URL seperti /api/perusahaan/1/data-keuangan. Angka 1 digunakan untuk menentukan data perusahaan yang diminta. Masalah terjadi apabila pengguna dapat mengganti angka tersebut menjadi 2 dan server tetap memberikan data perusahaan lain tanpa mengecek apakah pengguna memang memiliki hak untuk mengaksesnya.
💡 Intinya: IDOR bukan berarti pengguna berhasil login secara ilegal. Pengguna memang sudah login, tetapi server gagal memastikan bahwa data yang diminta merupakan data yang boleh diakses oleh pengguna tersebut.
❓ Endpoint Apa yang Diuji?
Pengujian dilakukan pada endpoint API yang digunakan untuk mengambil data keuangan perusahaan.
Parameter <id> digunakan untuk menentukan perusahaan yang datanya akan dikembalikan oleh server. Pada kondisi yang seharusnya, pengguna hanya boleh mendapatkan data perusahaan yang sesuai dengan akun yang sedang digunakan.
❓ Bagaimana Kondisi Normalnya?
Pengujian pertama dilakukan menggunakan akun user_a yang berasal dari CV Sinar Abadi dengan perusahaan_id = 1.
👤 Session User
Username: user_a
Perusahaan: CV Sinar Abadi
perusahaan_id: 1
Setelah login, endpoint data keuangan diakses menggunakan ID perusahaan yang sesuai dengan akun tersebut.
Request tersebut merupakan kondisi normal karena ID perusahaan yang diminta sesuai dengan perusahaan_id pada akun yang sedang digunakan.
📸 Screenshot 1 — Kondisi normal saat user_a mengakses data perusahaan dengan ID 1.

❓ Apa yang Terjadi Ketika ID Perusahaan Diubah?
Setelah kondisi normal diketahui, pengujian dilanjutkan dengan mengubah ID perusahaan pada URL. Tujuannya adalah mengetahui apakah server melakukan pemeriksaan kepemilikan data atau hanya menggunakan ID yang dikirimkan oleh client.
ID pada URL diubah dari 1 menjadi 2, sementara akun yang digunakan masih merupakan user_a dari perusahaan dengan ID 1.
Setelah ID diubah, server tetap memberikan response 200 OK.
HTTP/1.1 200 OK
Response tersebut berisi data dengan perusahaan_id = 2, meskipun akun yang digunakan memiliki perusahaan_id = 1.
📸 Screenshot 2 — user_a mengubah ID dari 1 menjadi 2 dan server tetap memberikan response 200 OK beserta data perusahaan dengan ID 2.

Padahal akun yang digunakan berasal dari perusahaan dengan perusahaan_id = 1. Artinya, akun tersebut dapat memperoleh data perusahaan lain hanya dengan mengubah ID pada endpoint.
❓ Apakah Masalah Ini Juga Terjadi pada Akun Lain?
Untuk memastikan hasil pengujian, pengujian juga dilakukan menggunakan akun perusahaan lain.
👤 Session User Kedua
Username: user_b
Perusahaan: PT Maju Bersama
perusahaan_id: 2
Dengan akun tersebut, endpoint kemudian diarahkan ke data perusahaan dengan ID 1.
Server kembali memberikan response 200 OK dan data dengan perusahaan_id = 1 dapat dikembalikan.
📸 Screenshot 3 — user_b dari perusahaan ID 2 mengakses endpoint dengan ID perusahaan 1.
Mau Kuasai IDOR pada Aplikasi Web LabKeu Sampai Bisa Praktik Langsung?
Materi ini juga kami ajarkan langsung di kelas Edusoft Center, dibimbing mentor, sampai kamu bisa praktik nyata — bukan cuma baca teori.
Tanya Kursus via WhatsApp Lihat contoh project nyata dari siswa kami →

Pengujian dari dua arah menunjukkan bahwa masalah terjadi pada kontrol authorization endpoint, bukan hanya pada satu akun tertentu.
| Pengguna | Perusahaan User | ID Diminta | Hasil |
|---|---|---|---|
| user_a | 1 | 2 | 200 OK — data perusahaan 2 |
| user_b | 2 | 1 | 200 OK — data perusahaan 1 |
🚨 IDOR Berhasil Dibuktikan
Berdasarkan pengujian, server tidak membatasi data berdasarkan perusahaan yang dimiliki oleh pengguna. Pengguna yang sudah login dapat mengubah nilai :id pada endpoint dan memperoleh data perusahaan lain.
Temuan ini termasuk IDOR atau Insecure Direct Object Reference dan berkaitan dengan Broken Object Level Authorization.
CWE-639 — Authorization Through User-Controlled Key
❓ Mengapa IDOR Bisa Terjadi?
Masalah terjadi karena server mempercayai nilai ID yang dikirimkan melalui URL tanpa memastikan hubungan antara pengguna yang sedang login dengan resource yang diminta.
Dalam kasus LabKeu, pengguna dari perusahaan dengan ID 1 seharusnya tidak dapat meminta data perusahaan dengan ID 2. Server seharusnya membandingkan identitas perusahaan pada session dengan ID perusahaan yang diminta sebelum memberikan response.
💡 Intinya: menyembunyikan ID dari tampilan bukan solusi. Selama server menerima ID dari client, server tetap harus melakukan pengecekan authorization terhadap resource tersebut.
🔍 Akar Masalah pada Aplikasi
Berdasarkan analisis terhadap aplikasi, masalah ditemukan pada bagian route data keuangan di routes/dashboard.js, khususnya pada bagian yang menangani endpoint data keuangan perusahaan.
Endpoint tersebut belum memastikan bahwa perusahaan yang diminta sesuai dengan perusahaan pada session pengguna.
Tanpa pemeriksaan tersebut, nilai :id dari URL dapat digunakan untuk meminta data perusahaan lain.
💥 Apa Dampak dari IDOR Ini?
Dampak yang berhasil dibuktikan dalam pengujian adalah kebocoran data keuangan lintas perusahaan. Akun yang seharusnya hanya berhubungan dengan satu perusahaan dapat membaca data perusahaan lain.
Dalam aplikasi yang menggunakan konsep multi-tenant, kondisi seperti ini dapat mengganggu pemisahan data antar perusahaan karena setiap pengguna seharusnya hanya memiliki akses terhadap resource yang menjadi haknya.
⚠️ Dampak utama: kehilangan kerahasiaan data antar perusahaan atau cross-tenant data exposure.
Temuan ini dikategorikan sebagai risiko HIGH dengan estimasi CVSS:
❓ Bagaimana Cara Memperbaiki IDOR?
Perbaikan utama harus dilakukan pada sisi server. Aplikasi tidak boleh hanya mempercayai ID yang dikirimkan oleh client. Setiap request harus diperiksa berdasarkan identitas pengguna dan hak aksesnya terhadap resource.
Dengan pengecekan tersebut, pengguna hanya dapat mengakses data perusahaan yang sesuai dengan hak aksesnya. Jika pengguna mencoba meminta data perusahaan lain, server harus menolak request tersebut.
🛡️ Rekomendasi Perbaikan
- Lakukan authorization check di sisi server.
- Pastikan perusahaan_id pada session sesuai dengan resource yang diminta.
- Jangan mempercayai parameter ID dari client.
- Gunakan response 403 Forbidden ketika pengguna tidak memiliki hak akses.
- Terapkan pemeriksaan ownership pada seluruh endpoint yang mengakses resource berdasarkan ID.
- Uji kembali seluruh endpoint setelah perbaikan untuk memastikan tidak ada akses lintas perusahaan.
❓ Apa yang Bisa Dipelajari dari Pengujian Ini?
Pengujian IDOR pada LabKeu menunjukkan bahwa login yang berhasil belum tentu berarti seluruh kontrol authorization sudah aman. Setelah pengguna berhasil login, server tetap harus memastikan bahwa setiap resource yang diminta memang boleh diakses oleh pengguna tersebut.
Dalam pengujian ini, proses dimulai dengan login menggunakan akun perusahaan, kemudian mengakses endpoint data keuangan dan mengubah ID perusahaan pada request. Ketika server tetap memberikan data perusahaan lain dengan status 200 OK, vulnerability IDOR dapat dikonfirmasi.
Pengujian dari dua arah juga menunjukkan bahwa masalah tidak hanya terjadi pada satu akun. Akun perusahaan dengan ID 1 dapat mencoba mengakses data perusahaan 2, dan akun perusahaan dengan ID 2 dapat mencoba mengakses data perusahaan 1.
✅ Kesimpulan
Pengujian terhadap aplikasi LabKeu berhasil mengonfirmasi adanya IDOR / Broken Object Level Authorization pada endpoint /api/perusahaan/<id>/data-keuangan.
Akun user_a dari CV Sinar Abadi dengan perusahaan_id = 1 dapat mengakses data perusahaan dengan ID 2. Pengujian sebaliknya menggunakan akun user_b juga menunjukkan bahwa data perusahaan dengan ID 1 dapat diakses oleh akun perusahaan dengan ID 2.
Hal tersebut terjadi karena server belum melakukan validasi kepemilikan resource berdasarkan session pengguna. Kondisi ini dapat menyebabkan kebocoran data keuangan lintas perusahaan dan menjadi masalah pada aplikasi yang menggunakan pemisahan data antar perusahaan.
🔐 Ringkasan Temuan
✓ Temuan: IDOR / Broken Object Level Authorization
✓ Endpoint: /api/perusahaan/<id>/data-keuangan
✓ User terdampak: akun perusahaan yang sudah login
✓ Bukti: ID perusahaan dapat diubah dan server tetap memberikan 200 OK
✓ Dampak: kebocoran data keuangan lintas perusahaan
✓ Severity: HIGH
Pengujian dilakukan hanya terhadap aplikasi LabKeu dalam lingkungan lab yang telah diotorisasi. Pengujian tidak ditujukan untuk sistem yang tidak memiliki izin pengujian.
✍️ Penulis: Noviana Putri Yuliani
Mau Kuasai IDOR pada Aplikasi Web LabKeu Sampai Bisa Praktik Langsung?
Materi ini juga kami ajarkan langsung di kelas Edusoft Center, dibimbing mentor, sampai kamu bisa praktik nyata — bukan cuma baca teori.
Tanya Kursus via WhatsApp Lihat contoh project nyata dari siswa kami →
