Mass assignment vulnerability adalah kelemahan klasik yang masih sering ditemukan di aplikasi web modern. Masalahnya muncul ketika framework otomatis memetakan data dari request pengguna langsung ke atribut model tanpa menyaring atribut apa yang boleh diubah pengguna.
Misalnya, form pendaftaran pengguna hanya meminta nama dan email. Namun, karena framework tidak membatasi kolom yang boleh diisi, seorang pengguna bisa menyisipkan is_admin=true atau role=administrator dalam request, dan sistem tanpa filtering menyetujui perubahan tersebut. Hasilnya: eskalasi privilege tanpa autentikasi yang valid.
Cara mempertahankan aplikasi dari serangan ini:
- Gunakan white-list atribut. Tentukan secara eksplisit kolom apa saja yang boleh diisi pengguna melalui form. Framework modern seperti Laravel sudah menyediakan
$fillableatau$guardeduntuk keperluan ini. - Jangan percaya input secara utuh. Selalu validasi dan sanitasi sebelum menyimpan ke database. Data dari frontend bukan teman dekat Anda.
- Gunakan DTO atau form request class. Pisahkan logika validasi dari logika model. Ini membuatnya lebih mudah melacak kolom mana yang rentan terekspos.
Contoh kasus nyata: Beberapa kerentanan mass assignment telah ditemukan dan direport dalam CVE selama beberapa tahun terakhir. Salah satunya melibatkan framework JavaScript di mana objek literal langsung diassign ke model tanpa filter, memungkinkan penyerang mengubah boolean is_verified atau role dari akun lain. Vulnerable code biasanya terlihat seperti:
User.create(req.body) // terlalu terbuka
Versi yang aman membatasi atribut yang diterima:
User.create({
name: req.body.name,
email: req.body.email
// isAdmin tidak diikutsertakan
})
Apa yang bisa dilakukan developer? Review kode yang menangani input pengguna, pastikan hanya kolom yang diharapkan yang diproses, dan lakukan testing kerentanan secara berkala. tools seperti static analysis atau automated scanner bisa membantu mendeteksi pola assignment yang berbahaya.
Memahami mass assignment bukan cuma soal menghindari serangan, tapi juga membangun kebiasaan menulis kode yang ekspositori: yang mana data boleh diubah oleh siapa, harus jelas dari awal.
Sumber asli: smashingmagazine.com
