Teknik Bypass CSP unsafe-eval: Analisis Keamanan dan Mitigasi

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 SeranganMekanismeTingkat Risiko
Injeksi LangsungInput pengguna masuk ke eval()Kritis
Gadget PustakaEksploitasi fitur template (AngularJS)Tinggi
DOM-based XSSManipulasi sinkronisasi data ke fungsi evalTinggi
Mitigasi UtamaImplementasi CSP Nonce/HashPencegahan

Langkah Mitigasi dan Pengerasan Keamanan

Untuk meminimalisir risiko, pengembang harus beralih dari penggunaan unsafe-eval ke pendekatan yang lebih aman:

  1. Gunakan Nonce atau Hash: Alih-alih mengizinkan semua skrip, gunakan script-src 'nonce-random123' untuk memvalidasi skrip yang diizinkan.
  2. Hindari Fungsi Dinamis: Ganti penggunaan eval() dengan metode parsing JSON yang aman seperti JSON.parse().
  3. Content Security Policy yang Ketat: Terapkan kebijakan script-src 'self' dan hapus unsafe-eval serta unsafe-inline dari header HTTP.
  4. 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.