Skenario 12 / 26FAIL

Security Misconfiguration - CORS - Wildcard Origin

Lingkungan lab — bukan sistem produksi

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

vuln-bank/Evidence/[FAIL] Security Misconfiguration - CORS - Wildcard Origin

01 — Catatan

Catatan pengujian

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

1) (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.
Lihat catatan sumber (bahasa Indonesia)
Vulnerability:
[FAIL] Security Misconfiguration - CORS - Wildcard Origin

Description:
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.

Impact:
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

Scenario:
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)

Affected Feature:
Kebijakan CORS tingkat aplikasi

Remediation:
- 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.

POC:
1) (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.

02 — Tangkapan layar

Tangkapan layar (1)

01 / 1

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
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"
    }
  ]
}