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:
- Hindari
'unsafe-inline'dan'unsafe-eval': Gunakan pendekatan berbasis nonce (angka acak sekali pakai) atau hash untuk skrip inline yang sah. - Batasi
script-srcsecara 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). - Tentukan
base-uri: Setel direktifbase-uri 'self'untuk mencegah manipulasi tag<base>oleh penyerang. - Gunakan
object-src 'none': Blokir penggunaan elemen plugin seperti Flash atau Java yang sering menjadi vektor eksploitasi lama. - Manfaatkan CSP Reporting: Gunakan direktif
report-uriataureport-tountuk 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).