Pengantar

Dalam komunikasi web, setiap permintaan dari browser akan dijawab oleh server melalui HTTP response. Respons ini terdiri dari header dan body yang berisi informasi penting seperti status kode, tipe konten, cookie, hingga lokasi redirect.

Namun, jika aplikasi tidak memvalidasi input dengan benar, penyerang dapat menyisipkan karakter khusus untuk memanipulasi struktur respons tersebut. Teknik ini dikenal sebagai HTTP Response Splitting.

Meski terdengar teknis, dampaknya bisa sangat serius. Serangan ini dapat digunakan untuk melakukan cache poisoning, cross-site scripting (XSS), hingga penyisipan konten berbahaya yang terlihat berasal dari server resmi.


Apa Itu HTTP Response Splitting?

HTTP Response Splitting adalah kerentanan yang terjadi ketika aplikasi web memasukkan input pengguna ke dalam header HTTP tanpa proses sanitasi yang tepat. Penyerang memanfaatkan karakter khusus seperti carriage return (CR) dan line feed (LF) untuk “memecah” satu respons HTTP menjadi dua respons terpisah.

Menurut OWASP, serangan ini terjadi ketika data yang tidak divalidasi memungkinkan injeksi karakter CRLF sehingga menghasilkan respons HTTP tambahan yang tidak sah (dikutip dari OWASP).

baca juga : Web Cache Deception: Celah Tersembunyi yang Membocorkan Data Lewat Sistem Cache


Bagaimana Cara Kerja HTTP Response Splitting?

1. Aplikasi Menyisipkan Input ke Header

Contoh kasus umum adalah parameter yang dimasukkan ke dalam header Location saat proses redirect.

2. Penyerang Menyisipkan Karakter CRLF

Karakter:

%0d%0a

merepresentasikan CR (carriage return) dan LF (line feed) dalam encoding URL.

Dengan menyisipkan karakter tersebut, penyerang dapat mengakhiri header pertama dan memulai header baru.

3. Terbentuk Respons Tambahan

Manipulasi Header

Penyerang dapat menambahkan header palsu seperti:

Set-Cookie: session=attacker
Penyisipan Body Berbahaya

Dalam beberapa kasus, penyerang dapat menyisipkan konten HTML atau JavaScript.


Dampak HTTP Response Splitting

Cross-Site Scripting (XSS)

Jika respons kedua berisi skrip berbahaya, pengguna dapat menjalankan kode tanpa sadar.

Web Cache Poisoning

Respons yang telah dimanipulasi bisa disimpan dalam cache dan diberikan kepada pengguna lain.

Manipulasi Cookie

Penyerang dapat mengubah atau menambahkan cookie untuk mengganggu sesi pengguna.

Pengalihan ke Situs Berbahaya

Header Location dapat dimodifikasi untuk mengarahkan korban ke halaman phishing.

baca juga : Homograph Attack: Ancaman Unicode yang Menyamarkan Domain Berbahaya


Mengapa Kerentanan Ini Terjadi?

Validasi Input yang Lemah

Aplikasi tidak memfilter karakter kontrol seperti CR dan LF.

Kurangnya Sanitasi Output

Data pengguna langsung dimasukkan ke dalam header tanpa encoding yang benar.

Ketidak konsistenan Framework

Beberapa framework lama tidak secara otomatis memblokir karakter berbahaya dalam header.


Cara Mencegah HTTP Response Splitting

Validasi dan Sanitasi Input

Blokir atau hapus karakter CR (\r) dan LF (\n) dari input pengguna.

Gunakan Framework Modern

Framework modern biasanya telah memiliki perlindungan terhadap injeksi CRLF.

Hindari Memasukkan Input ke Header Secara Langsung

Jika diperlukan, lakukan encoding yang sesuai sebelum menambahkan data ke header.

Lakukan Pengujian Keamanan

Uji aplikasi terhadap potensi CRLF injection melalui penetration testing atau security scanning.


Mengapa Serangan Ini Masih Relevan?

Meskipun termasuk kerentanan lama, HTTP Response Splitting masih ditemukan pada aplikasi yang menggunakan kode legacy atau validasi yang tidak konsisten. Dalam beberapa kasus, serangan ini menjadi pintu masuk untuk eksploitasi yang lebih kompleks seperti request smuggling atau cache poisoning.

Karena menyerang struktur dasar komunikasi HTTP, dampaknya bisa meluas jika tidak ditangani dengan benar.

baca juga : DHCP Starvation: Serangan Sunyi yang Melumpuhkan Jaringan dari Dalam


Kesimpulan

HTTP Response Splitting adalah kerentanan yang memungkinkan penyerang memanipulasi struktur respons HTTP melalui injeksi karakter CRLF. Dengan memecah respons menjadi dua bagian, pelaku dapat menyisipkan header atau konten berbahaya.

Pencegahan utama terletak pada validasi input yang ketat, sanitasi karakter kontrol, serta penggunaan framework yang aman. Dalam keamanan aplikasi web, kontrol terhadap header HTTP sama pentingnya dengan perlindungan terhadap body respons.