Kerentanan
[PASS] Mass Assignment - Authentication - User Registration
Deskripsi
Diuji apakah endpoint pendaftaran rentan mass assignment dengan menyisipkan field privileged (role=admin, isAdmin=true) pada body signup.
Dampak
Tidak ada dampak: server mengabaikan field privileged sehingga eskalasi hak tidak terjadi.
CWE
CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes (diuji, tidak rentan)
OWASP
API3:2023 - Broken Object Property Level Authorization (diuji negatif)
Skenario
Normal: registrasi standar. Eksploitasi: signup + role=admin/isAdmin. Hasil: login menunjukkan role tetap user -> PASS (kontrol berjalan, CIA tidak terlanggar).
Endpoint
POST http://127.0.0.1:8888/identity/api/auth/signup
Fitur terdampak
Registrasi Pengguna (crapi-identity)
Rekomendasi perbaikan
Pertahankan allow-list field yang boleh di-set klien saat registrasi (kondisi saat ini sudah benar).
Bukti konsep
- (Screenshot 1) NORMAL: signup dengan field standar -> 200.
- (Screenshot 2) EKSPLOITASI: signup dengan tambahan role=admin & isAdmin=true -> 200 (terdaftar).
- (Screenshot 3) HASIL: login akun tsb -> JWT role tetap "user" -> field privileged diabaikan (kontrol berjalan).
Rekaman lengkap
LAB Semua target adalah sistem lab. Tidak ada satu pun yang merupakan pekerjaan klien. Bukti ditampilkan apa adanya; secret dihitamkan.
Normal: registrasi standar
Alur normal: registrasi dengan field standar, tanpa role.
HTTP request
POST /identity/api/auth/signup HTTP/1.1
Host: 127.0.0.1:8888
Content-Type: application/json
{"name":"MassAssign Tester","email":"[REDACTED-EMAIL]","number":"+19990111","password":"[REDACTED-LAB-VALUE]"}
HTTP response
HTTP/1.1 403
Server: openresty/1.27.1.2
Content-Type: application/json
Content-Length: 71
{
"message": "Number already registered! Number: +19990111",
"status": 403
}
Percobaan: tambahkan role=admin dan isAdmin=true
Percobaan eksploitasi: tambahkan role=admin dan isAdmin=true ke body signup untuk meminta hak akses lebih tinggi.
HTTP request
POST /identity/api/auth/signup HTTP/1.1
Host: 127.0.0.1:8888
Content-Type: application/json
{"name":"MassAssign Tester","email":"[REDACTED-EMAIL]","number":"+19990222","password":"[REDACTED-LAB-VALUE]","role":"admin","isAdmin":true}
HTTP response
HTTP/1.1 403
Server: openresty/1.27.1.2
Content-Type: application/json
Content-Length: 71
{
"message": "Number already registered! Number: +19990222",
"status": 403
}
Hasil: field hak akses lebih tinggi diabaikan (PASS)
Hasil (PASS): login ke akun baru menunjukkan role="user". Server mengabaikan field untuk hak akses lebih tinggi sehingga percobaan eksploitasi gagal. Tidak ada dampak yang teramati pada kerahasiaan, integritas, atau ketersediaan dalam pengujian ini.
HTTP request
POST /identity/api/auth/login HTTP/1.1
Host: 127.0.0.1:8888
Content-Type: application/json
{"email":"[REDACTED-EMAIL]","password":"[REDACTED-LAB-VALUE]"}
HTTP response
HTTP/1.1 401
Server: openresty/1.27.1.2
Content-Type: application/json
Content-Length: 88
{
"token": null,
"type": "",
"message": "Given Email is not registered! ",
"mfaRequired": false
}
# JWT payload -> role: "user" (BUKAN admin)
← Kasus sebelumnya: JWT Signature Not Verified - Authentication - JWT Validation Kasus berikutnya: NoSQL Injection - Community - Coupon Validation →