Mekanisme Bypass CSP unsafe-eval
Content Security Policy (CSP) dengan direktif script-src 'unsafe-eval' adalah konfigurasi yang mengizinkan eksekusi kode JavaScript dari string melalui fungsi seperti eval(), setTimeout(), setInterval(), dan new Function(). Bypass terjadi ketika penyerang berhasil menyuntikkan skrip ke dalam aplikasi yang memiliki direktif ini, atau memanfaatkan pustaka pihak ketiga yang rentan terhadap eksekusi kode dinamis.
Teknik Eksploitasi Umum
Penyerang biasanya mencari titik injeksi (XSS) pada aplikasi yang mengizinkan unsafe-eval. Jika aplikasi memproses input pengguna ke dalam fungsi sinkron seperti eval(), eksekusi kode arbitrer dapat dilakukan. Selain itu, penggunaan pustaka seperti AngularJS (versi lama) sering menjadi target utama karena kemampuannya mengevaluasi ekspresi dalam atribut HTML (misalnya ng-app atau ng-click) yang secara otomatis memicu eksekusi skrip jika unsafe-eval aktif.
Tabel Matriks Risiko dan Mitigasi
| Vektor Serangan | Mekanisme | Tingkat Risiko |
|---|---|---|
| Injeksi Langsung | Input pengguna masuk ke eval() | Kritis |
| Gadget Pustaka | Eksploitasi fitur template (AngularJS) | Tinggi |
| DOM-based XSS | Manipulasi sinkronisasi data ke fungsi eval | Tinggi |
| Mitigasi Utama | Implementasi CSP Nonce/Hash | Pencegahan |
Langkah Mitigasi dan Pengerasan Keamanan
Untuk meminimalisir risiko, pengembang harus beralih dari penggunaan unsafe-eval ke pendekatan yang lebih aman:
- Gunakan Nonce atau Hash: Alih-alih mengizinkan semua skrip, gunakan
script-src 'nonce-random123'untuk memvalidasi skrip yang diizinkan. - Hindari Fungsi Dinamis: Ganti penggunaan
eval()dengan metode parsing JSON yang aman sepertiJSON.parse(). - Content Security Policy yang Ketat: Terapkan kebijakan
script-src 'self'dan hapusunsafe-evalsertaunsafe-inlinedari header HTTP. - Sanitasi Input: Gunakan pustaka sanitasi seperti DOMPurify untuk membersihkan input pengguna sebelum diproses oleh DOM.
Contoh Implementasi Header CSP Aman
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none';Dengan menghapus unsafe-eval, browser akan memblokir eksekusi kode yang berasal dari string, sehingga memutus rantai serangan injeksi yang mengandalkan fungsi evaluasi dinamis.