Kerentanan
[FAIL] Security Misconfiguration - CORS - Wildcard Origin
Deskripsi
Aplikasi mengirim header Access-Control-Allow-Origin dengan nilai wildcard (*) pada seluruh respons, termasuk respons endpoint yang mengembalikan data sensitif. Kebijakan ini menghapus perlindungan same-origin untuk pembacaan respons oleh skrip lintas origin.
Dampak
Low: situs mana pun dapat membaca respons endpoint yang tidak memerlukan autentikasi langsung dari browser pengunjung, termasuk /debug/users yang memuat kredensial. Dampaknya dibatasi oleh fakta bahwa nilai wildcard tidak dapat dikombinasikan dengan kredensial, sehingga cookie sesi tidak ikut terkirim pada permintaan lintas origin.
Catatan pengujian yang jujur: pembacaan lintas origin terhadap data milik pengguna yang sedang login TIDAK berhasil dibuktikan, karena aplikasi mengirim token melalui header Authorization yang tidak dapat diakses situs penyerang. Temuan ini dilaporkan sebagai kelemahan konfigurasi yang memperlemah pertahanan berlapis, bukan sebagai pencurian data terautentikasi.
CWE
CWE-942: Permissive Cross-domain Policy with Untrusted Domains
OWASP
A05:2021 - Security Misconfiguration
Skenario
Eksploitasi: permintaan dikirim dengan header Origin milik domain penyerang (https://evil.example.com) -> respons mengembalikan Access-Control-Allow-Origin: * sehingga skrip pada origin mana pun diizinkan membaca isi respons.
Endpoint
Seluruh endpoint http://127.0.0.1:5001/ (header dikirim secara global)
Fitur terdampak
Kebijakan CORS tingkat aplikasi
Rekomendasi perbaikan
- Ganti wildcard dengan allow-list origin yang memang dipercaya.
- Jangan kirim header CORS pada endpoint yang tidak dimaksudkan untuk diakses lintas origin.
- Tetapkan Vary: Origin dan jangan pernah memantulkan header Origin secara buta.
- Tinjau ulang endpoint yang mengembalikan data sensitif tanpa autentikasi.
Bukti konsep
- (Screenshot 1) EKSPLOITASI: permintaan dengan Origin https://evil.example.com ke /debug/users -> respons mengembalikan Access-Control-Allow-Origin: * , mengizinkan origin mana pun membaca isi respons.
Rekaman lengkap
LAB Semua target adalah sistem lab. Tidak ada satu pun yang merupakan pekerjaan klien. Bukti ditampilkan apa adanya; secret dihitamkan.
HTTP request
GET /debug/users HTTP/1.1
User-Agent: python-requests/2.33.1
Accept-Encoding: gzip, deflate, br, zstd
Accept: */*
Connection: keep-alive
Origin: https://evil.example.com
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 816
Access-Control-Allow-Origin: https://evil.example.com
Vary: Origin
Server: Werkzeug/2.0.1 Python/3.9.25
Date: Wed, 30 Sep 2026 03:12:59 GMT
{
"users": [
{
"account_number": "ADMIN001",
"id": 1,
"is_admin": true,
"password": "[REDACTED-LAB-VALUE]",
"username": "admin"
},
{
"account_number": "7503483798",
"id": 4,
"is_admin": false,
"password": "[REDACTED-LAB-VALUE]",
"username": "ma_normal_user"
},
{
"account_number": "7658808238",
"id": 5,
"is_admin": true,
"password": "[REDACTED-LAB-VALUE]",
"username": "ma_evil_admin"
},
{
"account_number": "0932191785",
"id": 2,
"is_admin": false,
"password": "[REDACTED-LAB-VALUE]",
"username": "pentest_attacker"
},
{
"account_number": "9159912486",
"id": 3,
"is_admin": false,
"password": "[REDACTED-LAB-VALUE]",
"username": "pentest_victim"
}
]
}
← Kasus sebelumnya: Race Condition - Transfer - Balance Check Kasus berikutnya: Sensitive Data Exposure - Debug Endpoint - User Credentials →