API OWASP Mass Assignment

Kamu mungkin pernah mendengar tentang top 10 OWASP atau sepuluh kerentanan teratas yang mengancam web applikasi. OWASP juga secara berkala memilih daftar sepuluh besar kerentanan yang mengancam API, yang disebut sepuluh besar API OWASP. Sepuluh API teratas saat ini adalah Damaged Object Level Authorization, Broken User Authentication, Excessive Data Exposure, Lack of Resources & Rate Limiting, Broken Function Level Authorization, Security Misconfiguration, Injection, Improper Asset Management.

Kerentanan yang akan kita bicarakan adalah OWASP API #6, Mass Assignment. "Penugasan massal" mengacu pada praktik pemberian nilai ke beberapa variabel atau properti objek sekaligus. Tetapi bagaimana fitur ini dapat menyebabkan kerentanan keamanan? Mari kita mulai dengan melihat contoh objek.

Properti objek

Objek aplikasi seringkali memiliki banyak properti yang menggambarkan objek tersebut. Misalnya, katakanlah objek "user" digunakan untuk menyimpan informasi user di aplikasi kamu. objek ini berisi properti yang menggambarkan user seperti ID user, name, location, dan sebagainya.

{ 
  "id": 1337, 
  "name": "eno", 
  "location": "Blk 335 Smith Street, SG", 
  "admin": false, 
  "group_membership": [121, 322, 457] 
}

Dalam hal ini, user harus dapat memodifikasi beberapa properti yang disimpan di objek mereka, seperti properti location dan name. Tetapi bagian lain dari objek user ini harus dibatasi dari user, seperti properti “admin”, yang menunjukkan apakah user adalah admin, dan properti “group_membership”, yang mencatat grup user mana yang menjadi anggotanya.

Mass Assignment

Mass Assignment adalah kerentanan di mana catatan aktif dalam sebuah website disalahgunakan untuk mengubah item data yang biasanya tidak boleh diakses oleh user seperti kata sandi, permission, atau status admin.

Kerentanan Mass Assignment terjadi ketika aplikasi secara otomatis memberikan input user ke beberapa variabel atau objek program. Ini adalah fitur dalam banyak framework aplikasi yang dirancang untuk menyederhanakan pengembangan aplikasi.

Namun fitur ini terkadang memungkinkan penyerang untuk menimpa, memodifikasi, atau membuat variabel program atau properti objek baru sesuka hati. Misalnya, katakanlah situs mengizinkan user untuk mengubah nama mereka melalui request PUT seperti ini. request ini akan memperbarui name user 1337 dari “eno” menjadi “enogans”.

PUT /api/v1.1/user/1337
{ 
  "name": "eno" 
}

Sekarang, bagaimana jika user mengirimkan request ini?

PUT /api/v1.1/user/1337
{ 
  "name": "enogans", 
  "admin": true 
}

Jika aplikasi menggunakan Mass Assignment untuk memperbarui properti objek user secara otomatis, request ini juga akan mengupdate bidang "admin", dan memberikan hak admin kepada user 1337. Seperti inilah kerentanan Mass Assignment. Demikian pula, user mungkin dapat menambahkan  sendiri ke grup user pribadi dengan menetapkan diri mereka sendiri ke grup baru.

PUT /api/v1.1/user/1337
{ 
  "name": "eno", 
  "admin": true, 
  "group_membership": [1, 35, 121, 322, 457] 
}

Untuk mencegah Mass Assignment, kamu dapat menonaktifkan fitur Mass Assignment dengan framework yang kamu gunakan, atau menggunakan daftar putih untuk mengizinkan pada properti atau variabel tertentu.

Artikel lainnya silahkan kesini >> ITSEC

You may like these posts