PortSwigger Web Cache Poisoning
Web cache poisoning, saldırganın web sunucusunun ve cache’in davranışından yararlanarak diğer kullanıcılara zararlı bir HTTP yanıtı sunduğu gelişmiş bir tekniktir.
Temel olarak, web cache poisoning iki aşamadan oluşur. İlk olarak, saldırganın back-end sunucusundan bir zararlı payload yanıtı elde etmesi gerekmektedir. Başarılı olunduktan sonra yanıtların önbelleğe alındığından ve ardından hedeflenen kurbanlara dağıtıldığından emin olunması gerekmektedir.
Lab 1 Lab 2 Lab 3 Lab 4 Lab 5 Lab 6 Lab 7 Lab 8 Lab 9
Lab-1 Web cache poisoning with an unkeyed header
Bu laboratuvar, enkeyed bir header’dan gelen girdiyi güvenli olmayan bir şekilde işlediğinden web cache posisoning güvenlik zafiyetine neden olmaktadır. Lab’ın tamamlanması için kurbanın tarayıcısında alert(document.cookie) fonksiyonu çalıştırılmalıdır.
Uygulamanın home page’ine gönderilen requestin response’unda X-Cache: hit/miss gibi bir header görüntülenmektedir. Bu header uygulamanın cache kullandığını göstermektedir.
Dönen response’da ilgili lab URL’inin de yansıdığı görüntülenmektedir. Bu değeri kontrol edebildiğimiz için bir saldırı gerçekleşebilmektedir.
Eğer requestte X-Forwarded-Host header’ı bulunuyorsa uygulama öncelikle bu header’ı host olarak kabul etmektedir. Bu headerı kontrol edebildiğimiz için saldırı düzenlenebilmektedir.
Exploit sunucusuna görseldeki gibi zararlı payload ayarlanmaktadır.
Uygulamanın home page’ine X-Forwarded-Host başlığı exploit sunucusunu işaret edecek şekilde ayarlanarak request yapılır ve cache’de tutulduğundan emin olunur.
Kurban home page’i ziyaret ettiğinde XSS gerçekleşir.
Lab-2 Web cache poisoning with an unkeyed cookie
Bu laboratuvar, cookie cache key’ine dahil edilmediğinden web cache poisoning güvenlik zafiyetine sahiptir. Lab’ın tamamlanması için hedef kullanıcının tarayıcısında alert(1) fonksiyonu yürütülmelidir.
Uygulama Cookie bilgilerini göndermektedir ve response’da tekrar bize yansımaktadır.
Cookie bilgisi üzerinde oynamalar yaparak web cache poisoning saldırısı gerçekleştirilmektedir. Kurban home page’e gittiğinde alert tetiklenecektir.
Lab-3 Web cache poisoning with multiple headers
Bu laboratuvardaki birden fazla header bilgisi kullanılarak zararlı istekler gerçekleştirip web cache poisoning saldırısı gerçekleştirilebilmektedir. Lab’ın tamamlanması için alert(document.cookie) fonksiyonu kurban tarayıcısında çalıştırılmalıdır.
X-Forwarded-For başlığı kullanıldığında response’da herhangi bir yansıma görüntülenmemektedir. Ancak X-Forwarded-Sheme başlığı girildiğinde response 302 dönmektedir ve dönen response’da bulunan Location başlığı yönlendirilen URL’i göstermektedir. Tek bir fark vardır HTTPS haline gitirmektedir.
X-Forwarded-Host başlığına exploit sunucusu girilerek request yapıldığında Location header bilgisi exploit sunucusu olarak görüntülenmektedir. Yani isteği exploit sunucumuza redirect yaptıracak şekilde ayarlayabildik.
Exploit sunucusundaki endpoint /resources/js/tracking.js olarak ayarlanıp istek o endpoint’e yapılacak şekilde ayarlanmaktadır.
Kurban home page e geldiğinde otomatik olarak tracking.js dosyasını isteyecektir. Web cache de bulunan exploit sunucusuna yönlenecektir ve payload çalışacaktır.
Lab-4 Targeted web cache poisoning using an unknown header
Bu laboratuvarda web cache poisoning güvenlik zafiyeti bulunmaktadır. Kurban kullanıcı gönderilen bütün yorumları görüntülemektedir. Lab’ın tamamlanması için kurbanın tarayıcısında alert(document.cookie) yürütülmelidir.
Param miner uygulaması kullanılarak hedef uygulamanın kabul ettiği header bilgisi X-Host olarak bulunmaktadır. X-Host headerına ne yazılırsa response’da döndüğü gözlemlenmiştir. Ayrıca cache key olarak User-Agent kullanıldığı gözlemlenmektedir.
Uygulamadaki yorum yapma fonksiyonunda XSS güvenlik zafiyeti bulunmaktadır. Başarılı bir Web cache poisoning saldirisi için XSS kullanılarak kurbanın User-Agent bilgileri ele geçirilmektedir.
Ele geçirilen User-Agent verisi hazırlanan requestte kullanılarak web cache poisoning saldırısı gerçekleştirilmektedir.
Lab-5 Web cache poisoning via an unkeyed query string
Bu laboratuvar, query string’in unkeyed olduğundan web cache poisoning güvenlik zafiyetine sahiptir. Lab’ın tamamlanması için kurbanın tarayıcısında alert(1) fonksiyonu çağırılmalıdır.
Uygulama cache yaparken query string değerini key olarak almadan yapmaktadır.
Payload query string olarak gönderildiğinde ve cache poisoning yapıldığında home page’i ziyaret eden bütün kurbanlar ilgili payload’a maruz kalmaktadır.
Lab-6 Web cache poisoning via an unkeyed query parameter
BU laboratuvar, belirli bir parametreyi cache key’i olarak almadığından web cache poisoning güvenlik zafiyetine sahiptir. Lab’ın tamamlanması için kurbanın tarayıcısında alert(1) fonksiyonu çalıştırılmalıdır.
Uygulama aldığı query stringi cache key’e eklemektedir. İlk request miss, ikinci request hit geldiğinden cache’lendiği anlaşılmaktadır.
utm_content header’ı uygulama tarafından cache unkeyed olarak işlendiğinden payload cache tutulur ve kurbanlara dağıtılır.
Lab-7 Parameter cloaking
Bu laboratuvar belirli bir parametreyi cache key’e dahil etmediğinden web cache poisoning güvenlik zafiyetine sahiptir. Lab’ın tamamlanması için kurbanın tarayıcısında alert(1) fonksiyonu çalıştırılmalıdır.
utm_content cache key işlemine dahil edilmemektedir. Ayrıca utm_content parametresini “;” karakteri ile ayırıp ikinci bir parametre yazıldığında da uygulama tek bir parametre olarak algılayıp cache key’e dahil etmeyecektir.
Home page ziyaret edildiğinde uygulama bir js dosyası çağırmaktadır ve bu request cache işlemine dahildir. Çağırılan js dosyasının parametresi de cache key işlemine dahil olduğundan cache poisoning yapılamamaktadır. Ancak utm_contet parametresi cache key’e dahil değildir ve “;” karakteri ile ikinci bir parametre dahil edilebilmektedir. Uygulama iki parametreyi algılamaktadır ancak web cache tek parametre olarak davranmaktadır. Bu yüzden ikinci callback parametresi response dahil edilmektedir ve alert çalışmaktadır.
GET /js/geolocate.js?callback=setCountryCookie&utm_content=foo;callback=alert(1)
Lab-8 Web cache poisoning via a fat GET request
Bu laboratuvar web cache poisoning güvenlik zafiyetine sahiptir. Lab’ın tamamlanması için kurbanın tarayıcısında alert(1) fonksiyonu yürütülmelidir.
Query string’de gönderilen callback parametresi body’de de gönderildiğinde uygulama ikinci callback parametresini kabul etmektedir ve sunucudan ikinci parametredeki değer dönmektedir.
Lab-9 URL normalization
Bu laboratuvar URL encoding nedeniyle doğrudan yararlanılamıyan bir XSS güvenlik zafiyetine sahiptir. Lab’ın tamamlanması için web cache poisoning güvenlik zafiyetinden yararlanılarak XSS saldırısı gerçekleştirilmelidir.
Uygulamada olmayan bir end pointe GET isteği gönderince response olarak olmayan endpointi yazmaktadır. (Aynı zamanda web cache işlemi de yapmaktadır uygulama) Eğer request ile istenilen endpoint’e bir payload yazılırsa response’da görüntülenecektir ve cache işlemi yapılacağından saldırganlara dağıtılabilecektir.
Ancak URL tarayıcıda talep edilirse URL-encoded olacağından alert çalışmayacaktır. Bu yüzden Burp Repeater gibi bir araç kullanılarak cache poisoning hale getirilir ve URL hemen kurbana iletilir. Daha sonrasında cache tarafıdan URL-decode işlemi gerçekleştirileceğinden alert fonksiyonu çalışır.