Kembali ke indeks

LAB PASS

Mass Assignment - Authentication - User Registration

Mass Assignment — Authentication — User Registration

CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes (tested, not vulnerable) · OWASP API3:2023 - Broken Object Property Level Authorization (negative test)

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

  1. (Screenshot 1) NORMAL: signup dengan field standar -> 200.
  2. (Screenshot 2) EKSPLOITASI: signup dengan tambahan role=admin & isAdmin=true -> 200 (terdaftar).
  3. (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
}
Normal: registrasi standar

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
}
Percobaan: tambahkan role=admin dan isAdmin=true

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)
Hasil: field hak akses lebih tinggi diabaikan (PASS)

← Kasus sebelumnya: JWT Signature Not Verified - Authentication - JWT Validation Kasus berikutnya: NoSQL Injection - Community - Coupon Validation →