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
- (Screenshot 1) PERCOBAAN: token pengguna biasa memanggil /admin/create_admin -> HTTP 403, kontrol bertahan.
- (Screenshot 2) PERCOBAAN: token pengguna biasa memanggil /admin/delete_account/3 -> HTTP 403, kontrol bertahan.
- (Screenshot 3) PERCOBAAN: token pengguna biasa memanggil /admin/toggle_suspension/3 -> HTTP 403, kontrol bertahan.
Rekaman lengkap
LAB Semua target adalah sistem lab. Tidak ada satu pun yang merupakan pekerjaan klien. Bukti ditampilkan apa adanya; secret dihitamkan.
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"
}
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"
}
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"
}
← Kasus sebelumnya: Active Debug Code - Application Server - Werkzeug Debugger Kasus berikutnya: Broken Object Level Authorization - Accounts - Balance Lookup →