Pengantar

Content Security Policy (CSP) adalah mekanisme keamanan browser yang membantu mengurangi risiko serangan seperti Cross-Site Scripting (XSS). CSP bekerja dengan menentukan sumber konten yang boleh dijalankan oleh browser.

Namun, konfigurasi CSP yang lemah dapat membuka peluang terjadinya CSP bypass. Kondisi ini terjadi ketika attacker menemukan cara agar payload tetap dapat dijalankan meskipun aplikasi telah menggunakan CSP.


Apa Itu Content Security Policy?

CSP merupakan security policy yang dikirimkan website melalui HTTP response header atau elemen <meta>. Policy tersebut memberi tahu browser sumber konten yang diperbolehkan.

Contohnya, administrator dapat membatasi JavaScript agar hanya berasal dari domain tertentu.

CSP membantu mengurangi dampak XSS dengan membatasi sumber script, object, frame, dan resource lainnya. MDN menjelaskan bahwa CSP digunakan untuk mengontrol resource yang dapat dimuat atau dieksekusi browser dan menjadi salah satu lapisan perlindungan terhadap XSS (dikutip dari: MDN Web Docs – Content Security Policy).

baca juga : Software-Defined Perimeter (SDP): Cara Kerja dan Perannya dalam Keamanan Zero Trust


Apa Itu CSP Bypass?

CSP Bypass adalah kondisi ketika aturan CSP yang diterapkan tidak cukup kuat untuk mencegah eksekusi konten berbahaya.

Bypass tidak selalu berarti CSP memiliki bug. Sering kali, masalah berasal dari konfigurasi yang terlalu longgar atau penggunaan sumber yang sebenarnya dapat dipercaya tetapi memiliki fitur yang dapat disalahgunakan.

Beberapa penyebab umum meliputi:

  • Penggunaan 'unsafe-inline'.
  • Penggunaan 'unsafe-eval'.
  • Penggunaan wildcard seperti *.
  • Terlalu banyak domain pada script-src.
  • Trusted domain yang memiliki konten yang dapat dikontrol pengguna.
  • Policy yang tidak membatasi sumber script dengan baik.

Mengapa CSP Bisa Di-bypass?

CSP hanya efektif jika policy dirancang dengan tepat.

Penggunaan unsafe-inline

Directive 'unsafe-inline' mengizinkan inline JavaScript tertentu. Kondisi tersebut dapat mengurangi perlindungan CSP terhadap serangan XSS.

Karena itu, penggunaan inline script sebaiknya diganti dengan mekanisme yang lebih aman seperti nonce atau hash.

Penggunaan unsafe-eval

Directive 'unsafe-eval' mengizinkan penggunaan mekanisme evaluasi kode tertentu yang biasanya dibatasi CSP.

Jika tidak benar-benar dibutuhkan, directive ini sebaiknya dihindari.

Wildcard yang Terlalu Luas

Policy seperti:

script-src *

memberikan ruang yang sangat luas untuk sumber JavaScript.

Konfigurasi tersebut tentu lebih lemah dibandingkan policy yang hanya mengizinkan sumber yang benar-benar diperlukan.


Trusted Domain Tidak Selalu Aman

Salah satu kesalahan dalam membuat CSP adalah menganggap semua resource dari domain terpercaya pasti aman.

Misalnya, sebuah aplikasi mengizinkan JavaScript dari domain tertentu. Jika domain tersebut memiliki fitur yang memungkinkan konten pengguna disajikan sebagai JavaScript, policy dapat menjadi lebih lemah.

Dengan demikian, trusted source harus benar-benar dipercaya. OWASP merekomendasikan penggunaan CSP yang ketat dan menjelaskan bahwa konfigurasi berbasis nonce atau hash dapat memberikan perlindungan yang lebih baik dibandingkan allowlist yang terlalu luas (dikutip dari: OWASP – Content Security Policy Cheat Sheet).


Nonce dan Hash untuk CSP

Salah satu cara memperkuat CSP adalah menggunakan nonce.

Nonce merupakan nilai acak yang dibuat untuk setiap response. Script inline hanya dapat dijalankan jika memiliki nonce yang sesuai dengan policy.

Contoh sederhana:

Content-Security-Policy:
script-src 'nonce-randomValue'

HTML kemudian menggunakan nonce yang sama:

<script nonce="randomValue">
    // trusted script
</script>

Browser hanya menjalankan script yang memiliki nonce valid.

Selain nonce, CSP juga dapat menggunakan hash untuk menentukan script inline tertentu yang diizinkan.

Pendekatan ini lebih ketat karena browser tidak hanya mempercayai seluruh domain.

baca juga : Pass-the-Ticket (PtT) Attack: Cara Kerja dan Ancaman terhadap Keamanan Kerberos


CSP Bypass vs XSS

CSP bypass dan XSS merupakan dua hal yang berbeda.

XSS adalah kerentanan yang memungkinkan script berbahaya dijalankan dalam konteks aplikasi.

Sementara itu, CSP bypass adalah teknik atau kondisi yang memungkinkan pembatasan CSP dilewati sehingga script dapat dieksekusi meskipun terdapat policy.

Dengan kata lain, CSP seharusnya menjadi lapisan pertahanan tambahan, bukan pengganti sanitasi dan validasi input.


Cara Memperkuat CSP

Beberapa praktik berikut dapat diterapkan untuk mengurangi risiko CSP bypass.

Gunakan Policy yang Ketat

Batasi sumber script hanya pada resource yang benar-benar diperlukan.

Hindari unsafe-inline

Gunakan nonce atau hash jika aplikasi membutuhkan inline script.

Hindari unsafe-eval

Jangan mengaktifkannya jika tidak diperlukan oleh aplikasi.

Batasi Trusted Sources

Jangan memasukkan terlalu banyak domain ke dalam script-src.

Gunakan Reporting

CSP menyediakan mekanisme pelaporan yang dapat membantu administrator mengetahui pelanggaran policy.

Tetap Lakukan Input Sanitization

CSP bukan pengganti validasi dan sanitasi input. Aplikasi tetap harus memperbaiki sumber XSS secara langsung.


Cara Menguji CSP

Pengujian CSP dapat dilakukan dengan melihat response header website.

Contohnya:

Content-Security-Policy:
default-src 'self';
script-src 'self';
object-src 'none';

Periksa apakah policy terlalu longgar atau memiliki directive yang tidak diperlukan.

Developer juga dapat menggunakan CSP violation reports untuk melihat resource yang diblokir browser.

Pengujian sebaiknya dilakukan pada staging environment terlebih dahulu agar perubahan policy tidak mengganggu aplikasi production.

baca juga : Master File Table (MFT) Forensics: Mengungkap Jejak File yang Tersembunyi di NTFS


Kesimpulan

Content Security Policy (CSP) Bypass terjadi ketika aturan CSP yang diterapkan tidak cukup kuat untuk mencegah eksekusi konten yang tidak diinginkan.

Penyebabnya dapat berasal dari penggunaan 'unsafe-inline', 'unsafe-eval', wildcard, atau trusted source yang terlalu luas.

CSP sebaiknya digunakan sebagai defense-in-depth bersama validasi input, output encoding, dan proteksi XSS lainnya. Penggunaan nonce atau hash juga dapat membantu membuat policy lebih ketat.

Dengan konfigurasi yang tepat, CSP dapat menjadi lapisan keamanan penting untuk melindungi aplikasi web dari berbagai risiko XSS.