HTTP Request Smuggling, Kerentanan Unik Dari HTTP/1.1

Balik lagi pada topik offensive security, kali ini kita akan membahas sebuah kerentanan yang identik dengan http versi 1.1. HTTP/1.1 merupakan sebuah protocol http yang dahulu seringkali digunakan sebagai transmission protocol request dan response pada web service. Dimana HTTP/1.1 sendiri merupakan protocol yang cukup sederhana jika hanya digunakan untuk mengakses static website. HTTP/1.1 juga pertama kali memperkenalkan konsep dan ide dari persistent connection, apalagi teman-teman saya rasa sudah seringkali melihat header “Keep-Alive”.

Namun hal ini juga menyisakan sedikit kegelisahan terkait penggunaan HTTP/1.1 atau yang kita kenal dengan http versi 1.1, yaitu adanya kerentanan “HTTP Request Smugling” yang melekat pada dirinya. Hal ini juga didasari karena cara kerja koneksi pada http versi 1.1 hanya memperbolehkan satu koneksi saja. Sehingga jika ada request lain maka kita harus menunggu request sebelumnya selesai terlebih dahulu. Dan terciptalah HTTP/2 yang menjadi solusi dari versi sebelumnya. Dimana HTTP/2 sendiri support multiplexing, parrarel, dan multiprocessing.

Apa Itu HTTP Request Smugling

HTTP Request Smugling adalah suatu kerentanan yang dilakukan untuk mengelabui server agar memproses dua buah request atau lebih dalam satu kali pengiriman request. Kerentanan ini dieksploitasi dengan cara memanfaatkan perbedaan proses antara front-end dengan back-end nya, atau yang kita kenal dengan header “Content-Length” dan “Transfer-Encoding”. Nah jika attacker melakukan request “Content-Length” dan “Transfer-Encoding: Chunked” berbeda, maka hasilnya server akan terkelabui untuk mengirimkan 2 request menjadi satu request. Nah jenis serangan ini dapat dibypass dan dieskalasi ke kerentanan lainnya, seperti XSS, SQL, dll. Sampai di sini paham?

Baca Juga:
1. Orang-orang kok bisa OSCP, ya? Aku juga maw!
2. Jenis-Jenis Serangan Siber yang Umum Dijumpai

Skenario Penyerangan

HTTP Request Smuggling Example

Pada gambar di atas, seorang penyerang mengirimkan satu buah request yang di dalamnya terdapat 2 buah request yang berbeda. Nah karena terjadinya perbedaan content-length dan transfer-encoding sehingga kerentanan ini dapat dieksekusi pada HTTP/1.1. Dimana nantinya kita juga akan mendapatkan satu buah respon balikan dari server target yang berisikan 2 respon yang berbeda yang tercipta dari kerentanan HTTP Request Smugling.

Teman-teman bisa coba explore juga beberapa metode yang ada di hacktricks, seperti:

Cara Mitigasi Kerentanan

Berikut adalah beberapa tips untuk mencegah HTTP request smuggling:

  • Gunakan HTTP/2 end to end, jika memungkinkan. HTTP/2 tidak rentan terhadap HTTP request smuggling.
  • Jika HTTP downgrading tidak dapat dihindari, pastikan bahwa front-end server dan back-end server menggunakan mekanisme yang sama untuk menentukan panjang permintaan HTTP.
  • Lakukan validasi yang ketat terhadap permintaan HTTP yang diterima.
  • Gunakan library HTTP/2 yang secure. Library HTTP/2 yang secure biasanya sudah dilengkapi dengan mekanisme untuk mencegah HTTP request smuggling.

Leave a Reply