Http istek sahteciliği olarak bilinen bu kavram aslında bir web zafiyeti türüdür. Günümüzde özellikle bug bounty sektöründe sık karşılaşılan zafiyetlerden bir tanesidir.
Http istek sahteciliği, bir veya daha fazla kullanıcıdan alınan http requestlerinin dizi işleme biçimine müdahale edilmesine denir.
Bu zafiyet kritik türde bir zafiyettir. Http istek sahteciliği ile güvenlik kontrollerini atlatabilir verilere erişim sağlayabilir ve zafiyetin bulunduğu uygulama kullanıcılarını doğrudan tehlikeye atabilirsiniz.
Günümüzün web uygulamalarında özellikle kullanıcılar ve uygulama arasında geçen haberleşmede http sunucu zincirleri kullanılır. Kullanıcılar hedef siteye gönderecekleri istekleri ilk önce front-end server’e gönderir ve bu sunucu istekleri bir veya birden fazla olan back-end server kısmına iletir.
Bu tür mimariler özellikle bulut tabanlı sistemlerde oldukça yaygın bir şekilde kullanılmaktadır.
Peki bu HTTP Request Smuggling Nasıl Çalışır ?
Kullanıcının gönderdiği isteklerin ilk önce front-end sunucusuna daha sonra bir veya daha fazla back-end sunucusuna iletildiğini söylemiştik. Bu işlem esnasında genellikle istekler aynı back-end sunucu bağlantısı üzerinden gönderilir. Alıcı olan hedef web sunucusu ise bir isteğin nerede bittiğini ve diğer isteğin nerede başladığını belirlemek için http request headerlerini ayrıştırır.
Bu durumda front-end ve back-end sistemlerinin istekler arasındaki sınırlar konusunda anlaşmaları çok önemlidir.
Eğer anlaşma sağlanamazsa, saldırganlar tarafından front-end tarafından farklı yorumlanan istekler üretilip gönderilebilir. Bu da hem sistem hem de kullanıcı güvenliği açısından çok riskli bir saldırıya yol açacaktır.
Bu aşamada saldırgan front-end sorgusunun bir bölümünün back-end server tarafından bir sonraki isteğin başlangıcı olarak yorumlanmasına yol açar.
Bu sayede bir önceki istek bir sonraki talebe etkin bir biçimde eklenir. Bunun sonucunda talep edilen süreçlere yani gönderilen isteklerin hem başvuru hem de geri dönüş süreçlerinin işleyişine müdahale etmek mümkündür. Bu saldırıya HTTP Request Smuggling (HTTP İstek Kaçakçılığı/Sahteciliği) denir.
HTTP İstek Sahteciliği Nasıl Oluşur ?
Http istek sahteciliği ismindeki güvenlik açıklarının büyük bir kısmı http belirtiminin, isteklerin içerisinde bir isteğin nerede bittiğini belirtmek için 2 farklı yol kullanmasından kaynaklı ortaya çıkar.
Bunlar:
- Content-Length
- Transfer-Encoding
isimli parametrelerdir.
Gönderilen istekler içerisinde bulunan Content-Lenght parametresi request body (istek gövdesi) kısmının uzunluğunu bayt cinsinde belirtir.
Örneğin:
POST /search HTTP/1.1
Host: normal-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11q=smuggling
Transfer-Encoding ise mesaj gövdesinin yığınlanmış kodlamayı kullandığını belirtmek için kullanılabilir.
Bu request body’nin bir veya daha fazla veri parçası içeriyor olabileceği anlamına gelir.
Her yığın bayt cinsinden, yığın boyutundan, yeni satırdan ve yığın içeriğinden oluşur.
Oluşturulan ileti sıfır boyutundaki bir yığın ile sonlandırılır.
Örneğin:
POST /search HTTP/1.1
Host: normal-website.com
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunkedb
q=smuggling
0
HTTP İstek Sahteciliği Zafityetinin Tespiti
Http istek kaçakçılığı zafiyetinin tespiti ve sömürülme aşamaları için “smuggler” adındaki araçtan faydalanacağız.
Bu aracın github linkine buradan ulaşabilirsiniz.
Aracımızın oldukça basit bir kullanımı vardır .
Aracı python3 komutu ile birlikte çalıştırabilirsiniz.
Kullanımı : python3 smuggler.py -u <url>
Bu aşamada ben portswinger lablarından bir tanesini kullandım siz dilerseniz farklı lab ortamlarında ya da makinelerde çalışmalar gerçekleştirebilirsiniz.
Gördüğünüz üzere araç, bir çok farklı modüle yönelik http istek kaçakçılığı zafiyeti tespit etti.
Tespit etmiş olduğu kısımlara yönelik bizlere “payloads” klasörü içerisinde sahte bir istek oluşturdu.
Gördüğünüz gibi bizlere belirtmiş olduğu klasörde zafiyete yönelik bir sahte istek oluşturdu.
Artık biz bu isteği burp suite ile hedef sisteme gönderip zafiyeti sömürebiliriz.