Skenario 16 / 19PASS

Mass Assignment - Authentication - User Registration

Lingkungan lab — bukan sistem produksi

Tangkapan layar dan trafik mentah tidak diterjemahkan; teks di dalamnya mungkin menggunakan bahasa lain.

crAPI/Evidence/[PASS] Mass Assignment - Authentication - User Registration

01 — Catatan

Catatan pengujian

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).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [PASS] Mass Assignment - Authentication - User Registration

Description:
Diuji apakah endpoint pendaftaran rentan mass assignment dengan menyisipkan field privileged (role=admin, isAdmin=true) pada body signup.

Impact:
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)

Scenario:
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

Affected Feature:
Registrasi Pengguna (crapi-identity)

Remediation:
Pertahankan allow-list field yang boleh di-set klien saat registrasi (kondisi saat ini sudah benar).

POC:
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).

02 — Tangkapan layar

Tangkapan layar (3)

01 / Normal: registrasi standar

Alur normal: registrasi dengan field standar, tanpa role.

02 / Percobaan: tambahkan role=admin dan isAdmin=true

Percobaan eksploitasi: tambahkan role=admin dan isAdmin=true ke body signup untuk meminta hak akses lebih tinggi.

03 / 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.

03 — Request dan response

Rekaman HTTP

Sebagian nilai kredensial disamarkan pada tampilan HTML publik ini. Penyamaran ini tidak menjamin bahwa seluruh data sensitif atau berkas tertaut sudah disamarkan.

REKAMAN 01 / 1Normal: registrasi standar
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
}

Alur normal: registrasi dengan field standar, tanpa role.

REKAMAN 02 / 2Percobaan: tambahkan role=admin dan isAdmin=true
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 eksploitasi: tambahkan role=admin dan isAdmin=true ke body signup untuk meminta hak akses lebih tinggi.

REKAMAN 03 / 3Hasil: field hak akses lebih tinggi diabaikan (PASS)
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 (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.