HTTP Response Splitting: Pengertian, Contoh, dan Pencegahan

HTTP Response Splitting adalah serangan keamanan yang mengeksploitasi kerentanan dalam proses pengolahan HTTP oleh server web.

Serangan ini memungkinkan hacker menyisipkan karakter tak terduga ke dalam respon HTTP. Dan jika sistem berhasil mengeksekusi karakter ini maka akan mengarah pada hasil yang berbahaya.

HTTP response splitting terjadi ketika:

  • Data yang masuk aplikasi web melalui sumber yang tidak tepercaya, paling sering berupa permintaan HTTP.
  • Data berada dalam header respons HTTP yang pengguna kirim ke web tanpa validasi karakter berbahaya.

Proses Dasar HTTP

Dalam protokol HTTP, respon server web dikirimkan dalam format yang terdiri dari header dan body. Header mengandung informasi tentang respon, seperti status, tipe konten, dan cookie. Setelah header, ada pemisah berupa dua baris ganti baris (“CRLF” atau “\r\n”) yang menandai akhir header dan awal body respon.

Kerentanan HTTP Header

HTTP Response Splitting
Source: jejakhacker.com

Kerentanan muncul ketika server web tidak memvalidasi masukan yang pengguna terima sebelum menghasilkan respon HTTP. Penyerang dapat memasukkan karakter “CRLF” tambahan dalam permintaan HTTP yang akan server abaikan. Kemudian menyisipkan header tambahan dalam respon yang server hasilkan.

Untuk memasang eksploitasi yang sukses, aplikasi harus mengizinkan input yang berisi karakter CR (carriage return, juga diberikan oleh %0d atau \r) dan LF (line feed, juga diberikan oleh %0a atau \n) ke dalam header dan platform yang mendasarinya harus rentan terhadap injection karakter tersebut.

Karakter ini tidak hanya memberi hacker kendali atas sisa header dan isi respons yang ingin dikirim oleh aplikasi. Namun juga memungkinkan hacker membuat respons tambahan yang seluruhnya berada di bawah kendali mereka.

Contoh di bawah ini menggunakan contoh Java, namun masalah ini telah diperbaiki di hampir semua server aplikasi Java EE modern.

Jika Anda mengkhawatirkan risiko ini, Anda harus menguji pada platform yang menjadi perhatian untuk melihat apakah platform yang mendasarinya mengizinkan karakter CR atau LF untuk dimasukkan ke dalam header.

Namun, sebagaian besar server aplikasi modern dengan penulisan bahasa pemrograman apapun telah memperbaiki kerentanan ini secara umum.

Contoh Serangan HTTP Response Splitting

Kode berikut akan mengambil data dari permintaan HTTP yang dikirim oleh pengguna (dalam hal ini, data penulis atau “author”). Dan menyimpannya dalam bentuk cookie untuk penggunaan di sisi klien. Pengembang aplikasi web sering menggunakan cara ini untuk mengelola sesi pengguna atau menyimpan preferensi pengguna.

String author = request.getParameter(AUTHOR_PARAM);
...
Cookie cookie = new Cookie("author", author);

Cookie.setMaxAge(cookieExpiration);
        response.addCookie(cookie);

Dengan asumsi string yang terdiri dari karakter alfanumerik standar, seperti “Jane Smith”, dikirimkan dalam permintaan respons HTTP yang menyertakan cookie ini mungkin berbentuk berikut:

  HTTP/1.1 200 OK
  ...
  Set-Cookie: author=Jane Smith
  ...

Namun, karena nilai cookie terbentuk dari masukan pengguna yang tidak divalidasi. Respons hanya akan mempertahankan bentuk ini jika nilai yang dikirimkan untuk AUTHOR_PARAM tidak mengandung karakter CR dan LF.

Namun bagaimana jika hacker mengirimkan string berbahaya, seperti:

Wiley Hacker\r\nContent-Length:999\r\n\r\n<html>malicious content…<\html>

Maka respons HTTP akan dibagi menjadi respons penipu diikuti dengan respons asli, yang mana sekarang diabaikan, dan akan memberikan respon seperti ini:

HTTP/1.1 200 OK
...
Set-Cookie: author=Wiley Hacker
Content-Length: 999

 
<html>malicious content...</html>
<!-- Dalam contoh ini hingga 999 karakter -->
<!-- Konten asli dimulai dengan karakter 1000, yang kini diabaikan oleh browser web... -->

Dampak Serangan

Serangan HTTP response splitting dapat memiliki beberapa dampak yang serius. Ini termasuk manipulasi respon kepada pengguna, pencurian cookie sesi, atau bahkan injeksi skrip yang dapat mengeksploitasi browser pengguna.

Kemampuan penyerang untuk membuat respons HTTP sewenang-wenang memungkinkan terjadinya berbagai serangan, antara lain:

Cara Mencegah Serangan HTTP Response Splitting

Untuk melindungi terhadap serangan HTTP response splitting, pengembang perlu memastikan bahwa semua input yang diterima dari pengguna diproses dan dibersihkan dengan benar. Validasi masukan, penggunaan mekanisme penghindaran karakter khusus, dan penggunaan library atau kerangka kerja yang aman adalah langkah-langkah yang dianjurkan. Selain itu, server web juga harus dikonfigurasi dengan benar untuk menghindari kerentanan ini.

Penutup

HTTP Response Splitting adalah ancaman serius yang memerlukan perhatian dalam pengembangan dan pengelolaan validasi situs web.

Tekan ESC untuk keluar