Kembali ke indeks

LAB PASS

Broken Function Level Authorization - Admin - Administrative Endpoints

Broken Function Level Authorization — Admin — Administrative Endpoints

CWE-285: Improper Authorization · OWASP A01:2021 - Broken Access Control

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.

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"
}
Tangkapan layar
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"
}
Tangkapan layar
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"
}
Tangkapan layar

← Kasus sebelumnya: Active Debug Code - Application Server - Werkzeug Debugger Kasus berikutnya: Broken Object Level Authorization - Accounts - Balance Lookup →