Skenario 22 / 26PASS

Broken Function Level Authorization - Admin - Administrative Endpoints

Lingkungan lab — bukan sistem produksi

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

vuln-bank/Evidence/[PASS] Broken Function Level Authorization - Admin - Administrative Endpoints

01 — Catatan

Catatan pengujian

Kerentanan

[PASS] Broken Function Level Authorization - Admin - Administrative Endpoints

Deskripsi

Pengujian berupaya memanggil fungsi administratif secara langsung memakai token pengguna biasa, melewati antarmuka panel admin. Endpoint yang diuji mencakup pembuatan administrator baru, penghapusan akun, dan penangguhan akun.

Dampak

Tidak ada dampak. Kontrol bertahan: ketiga endpoint administratif memeriksa peran pemanggil dan menolak token pengguna biasa dengan HTTP 403. Pemanggilan langsung tanpa melalui antarmuka tidak memberi hak tambahan. Catatan penting: kontrol ini hanya seaman klaim peran pada token. Karena klaim is_admin dibaca dari token dan tanda tangan token tidak diverifikasi dengan benar, pemeriksaan peran ini dapat dilewati dengan token yang ditempa, sebagaimana dibuktikan pada temuan JWT Signature Not Verified.

CWE

CWE-285: Improper Authorization

OWASP

A01:2021 - Broken Access Control

Skenario

Token pengguna biasa dipakai memanggil /admin/create_admin, /admin/delete_account/3, dan /admin/toggle_suspension/3 secara langsung. Hasil: seluruhnya ditolak dengan HTTP 403.

Endpoint

POST http://127.0.0.1:5001/admin/create_admin POST http://127.0.0.1:5001/admin/delete_account/<user_id> POST http://127.0.0.1:5001/admin/toggle_suspension/<user_id>

Fitur terdampak

Fungsi administratif (buat admin, hapus akun, tangguhkan akun)

Rekomendasi perbaikan

- Pertahankan pemeriksaan peran pada seluruh endpoint administratif. - Ambil peran dari database berdasarkan subject token, bukan dari klaim di dalam token, agar kontrol ini tidak dapat dilewati dengan token palsu.

Bukti konsep

1) (Screenshot 1) PERCOBAAN: token pengguna biasa memanggil /admin/create_admin -> HTTP 403, kontrol bertahan. 2) (Screenshot 2) PERCOBAAN: token pengguna biasa memanggil /admin/delete_account/3 -> HTTP 403, kontrol bertahan. 3) (Screenshot 3) PERCOBAAN: token pengguna biasa memanggil /admin/toggle_suspension/3 -> HTTP 403, kontrol bertahan.
Lihat catatan sumber (bahasa Indonesia)
Vulnerability:
[PASS] Broken Function Level Authorization - Admin - Administrative Endpoints

Description:
Pengujian berupaya memanggil fungsi administratif secara langsung memakai token pengguna biasa, melewati antarmuka panel admin. Endpoint yang diuji mencakup pembuatan administrator baru, penghapusan akun, dan penangguhan akun.

Impact:
Tidak ada dampak. Kontrol bertahan: ketiga endpoint administratif memeriksa peran pemanggil dan menolak token pengguna biasa dengan HTTP 403. Pemanggilan langsung tanpa melalui antarmuka tidak memberi hak tambahan.

Catatan penting: kontrol ini hanya seaman klaim peran pada token. Karena klaim is_admin dibaca dari token dan tanda tangan token tidak diverifikasi dengan benar, pemeriksaan peran ini dapat dilewati dengan token yang ditempa, sebagaimana dibuktikan pada temuan JWT Signature Not Verified.

CWE:
CWE-285: Improper Authorization

OWASP:
A01:2021 - Broken Access Control

Scenario:
Token pengguna biasa dipakai memanggil /admin/create_admin, /admin/delete_account/3, dan /admin/toggle_suspension/3 secara langsung. Hasil: seluruhnya ditolak dengan HTTP 403.

Endpoint:
POST http://127.0.0.1:5001/admin/create_admin
POST http://127.0.0.1:5001/admin/delete_account/<user_id>
POST http://127.0.0.1:5001/admin/toggle_suspension/<user_id>

Affected Feature:
Fungsi administratif (buat admin, hapus akun, tangguhkan akun)

Remediation:
- Pertahankan pemeriksaan peran pada seluruh endpoint administratif.
- Ambil peran dari database berdasarkan subject token, bukan dari klaim di dalam token, agar kontrol ini tidak dapat dilewati dengan token palsu.

POC:
1) (Screenshot 1) PERCOBAAN: token pengguna biasa memanggil /admin/create_admin -> HTTP 403, kontrol bertahan.
2) (Screenshot 2) PERCOBAAN: token pengguna biasa memanggil /admin/delete_account/3 -> HTTP 403, kontrol bertahan.
3) (Screenshot 3) PERCOBAAN: token pengguna biasa memanggil /admin/toggle_suspension/3 -> HTTP 403, kontrol bertahan.

02 — Tangkapan layar

Tangkapan layar (3)

01 / 1
02 / 2
03 / 3

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 / 1
HTTP request
POST /admin/create_admin HTTP/1.1
User-Agent: python-requests/2.33.1
Accept-Encoding: gzip, deflate, br, zstd
Accept: */*
Connection: keep-alive
Authorization: Bearer [REDACTED-LAB-TOKEN]
Content-Type: application/json
Content-Length: 49

{"username": "bfla_admin", "password": "[REDACTED-LAB-VALUE]"}
HTTP response
HTTP/1.1 403 FORBIDDEN
Content-Type: application/json
Content-Length: 31
Access-Control-Allow-Origin: *
Server: Werkzeug/2.0.1 Python/3.9.25
Date: Wed, 30 Sep 2026 03:13:10 GMT

{
  "error": "Access Denied"
}
REKAMAN 02 / 2
HTTP request
POST /admin/delete_account/3 HTTP/1.1
User-Agent: python-requests/2.33.1
Accept-Encoding: gzip, deflate, br, zstd
Accept: */*
Connection: keep-alive
Authorization: Bearer [REDACTED-LAB-TOKEN]
Content-Type: application/json
Content-Length: 2

{}
HTTP response
HTTP/1.1 403 FORBIDDEN
Content-Type: application/json
Content-Length: 31
Access-Control-Allow-Origin: *
Server: Werkzeug/2.0.1 Python/3.9.25
Date: Wed, 30 Sep 2026 03:13:11 GMT

{
  "error": "Access Denied"
}
REKAMAN 03 / 3
HTTP request
POST /admin/toggle_suspension/3 HTTP/1.1
User-Agent: python-requests/2.33.1
Accept-Encoding: gzip, deflate, br, zstd
Accept: */*
Connection: keep-alive
Authorization: Bearer [REDACTED-LAB-TOKEN]
Content-Type: application/json
Content-Length: 2

{}
HTTP response
HTTP/1.1 403 FORBIDDEN
Content-Type: application/json
Content-Length: 31
Access-Control-Allow-Origin: *
Server: Werkzeug/2.0.1 Python/3.9.25
Date: Wed, 30 Sep 2026 03:13:12 GMT

{
  "error": "Access Denied"
}