Bypass Content Security Policy: Teknik, Vektor, dan Mitigasi

Bypass Content Security Policy (CSP) adalah teknik yang digunakan oleh penyerang untuk menghindari pembatasan keamanan yang diberlakukan oleh header HTTP Content-Security-Policy pada aplikasi web. CSP dirancang untuk mencegah serangan seperti Cross-Site Scripting (XSS), data injection, dan eksekusi skrip berbahaya dengan membatasi sumber daya (seperti skrip, gambar, dan gaya) yang dapat dimuat oleh browser. Kegagalan bypass biasanya terjadi karena konfigurasi kebijakan yang terlalu longgar, penggunaan direktif yang tidak aman, atau eksploitasi fitur yang diizinkan (seperti JSONP endpoints atau AngularJS templates).

Meskipun CSP adalah lapisan pertahanan yang sangat kuat, kebijakan yang salah konfigurasi sering kali meninggalkan celah yang dapat dieksploitasi oleh tester keamanan atau peretas untuk mengeksekusi JavaScript arbitrer.

Vektor Umum Bypass Content Security Policy

Dalam pengujian penetrasi web, terdapat beberapa metode standar yang sering dianalisis untuk menemukan kelemahan dalam implementasi CSP.

Metode Bypass Direktif Terkait Mekanisme Kerja
JSONP Endpoints script-src Memanfaatkan domain tepercaya yang memiliki endpoint JSONP untuk memantulkan parameter input sebagai fungsi JavaScript.
Unsafe-Eval script-src Jika 'unsafe-eval' diizinkan, fungsi seperti eval(), setTimeout(), dan setInterval() dapat mengeksekusi string sebagai kode.
Gadget Berbasis Framework script-src Memanfaatkan pustaka pihak ketiga yang sudah dimuat (seperti AngularJS atau jQuery) untuk memicu eksekusi kode tanpa tag <script> baru.
Base Tag Hijacking base-uri Menyisipkan tag <base> untuk mengarahkan ulang relatif URL skrip ke server eksternal milik penyerang.
DOM-based XSS Sink script-src Memasukkan data berbahaya ke dalam sink DOM yang tidak aman (seperti innerHTML atau document.write) yang diproses oleh skrip lokal tepercaya.

Contoh Analisis Kode Konfigurasi Lemah

Berikut adalah contoh konfigurasi header CSP yang rentan terhadap eksploitasi karena mengizinkan domain eksternal generik dan direktif yang tidak aman.

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdnjs.cloudflare.com 'unsafe-inline' 'unsafe-eval';

Analisis kerentanan pada contoh di atas:

  • 'unsafe-inline': Memungkinkan eksekusi skrip inline seperti event handler (onload, onclick) atau tag <script> langsung di dalam HTML.
  • 'unsafe-eval': Memungkinkan penggunaan fungsi evaluasi string string-to-code.
  • https://cdnjs.cloudflare.com: Jika penyerang dapat mengunggah atau menemukan pustaka rentan versi lama di CDN tersebut, pustaka itu dapat digunakan sebagai gadget untuk bypass.

Langkah Mitigasi dan Penguatan CSP

Untuk mencegah terjadinya bypass pada implementasi Content Security Policy di aplikasi produksi, terapkan langkah-langkah pengerasan berikut:

  1. Hindari 'unsafe-inline' dan 'unsafe-eval': Gunakan pendekatan berbasis nonce (angka acak sekali pakai) atau hash untuk skrip inline yang sah.
  2. Batasi script-src secara ketat: Jangan mengizinkan domain wildcard (*) atau CDN generik yang mengizinkan pengunggahan file oleh pengguna publik (seperti Google Drive, GitHub Pages, atau Cloudflare CDN umum tanpa kontrol ketat).
  3. Tentukan base-uri: Setel direktif base-uri 'self' untuk mencegah manipulasi tag <base> oleh penyerang.
  4. Gunakan object-src 'none': Blokir penggunaan elemen plugin seperti Flash atau Java yang sering menjadi vektor eksploitasi lama.
  5. Manfaatkan CSP Reporting: Gunakan direktif report-uri atau report-to untuk memantau pelanggaran kebijakan secara real-time di lingkungan produksi.

Troubleshooting Implementasi CSP

Saat menerapkan kebijakan ketat, sering kali fungsionalitas aplikasi terganggu (breakage). Gunakan mode Content-Security-Policy-Report-Only terlebih dahulu untuk mencatat error di konsol browser tanpa memblokir aset secara langsung. Analisis laporan yang masuk sebelum menerapkan kebijakan penegakan penuh (enforce mode).