Skip to content

Latest commit

 

History

History
45 lines (30 loc) · 3.7 KB

Mass Assigment.md

File metadata and controls

45 lines (30 loc) · 3.7 KB

Mass Assignment

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

alt text

alt text

  • Sekarang kita coba register akun baru dengan username test2 lalu menambahkan parameter admin=true supaya user test2 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

alt text

alt text

  • Setelah kita coba tambahkan parameter admin=true, proses registerasi user dinyatakan berhasil oleh sistem artinya user test2 bisa bertindak sebagai admin
  • Pada dokumentasi API sistem di URL http://IP_Server:5000/ui terdapat informasi bahwa endpoint /users/v1/{username} dengan jenis request DELETE hanya bisa diakses oleh admin saja

alt text

  • Sekarang kita coba apakah user test2 bisa menghapus user test1 melalui endpoint tersebut. Pertama-tama kita login sebagai user test2 dan copy nilai auth_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

alt text

alt text

  • 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

alt text

alt text

  • User test2 ternyata bisa menggunakan endpoint /users/v1/{username} untuk menghapus akun user test1, dimana endpoint /users/v1/{username} sebenarnya hanya bisa digunakan oleh admin saja. Tapi dengan menambahkan parameter admin=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