Bir saldırganın bir web sitesinin önbelleğini değiştirerek kullanıcılara zararlı bir HTTP cevabı döndürmesiyle olur.
Temel olarak, web önbellek zehirlenmesi iki aşamadan oluşur. İlk olarak, saldırganın, yanlışlıkla bir tür tehlikeli yük içeren arka uç sunucudan nasıl yanıt alacağını bulması gerekir. Başarılı olduklarında, yanıtlarının önbelleğe alındığından ve ardından amaçlanan mağdurlara sunulduğundan emin olmaları gerekir.
Bu açık bulunduğunda XSS gibi open redirect gibi açıklara da sebep olabilir.Konuyla ilgili araştırma yazıları :
https://portswigger.net/research/practical-web-cache-poisoning
https://portswigger.net/research/web-cache-entanglement
Cacheler Nasıl Çalışır?
Sunucular her isteğe tekrardan sayfayı yükleseydi bu yavaşlığa sebep olurdu. Bu yüzden cache mekanizması vardır.
Cache kullanıcılarla sunucu arasında durur. Yapılan isteğin bir kopyası oluşturulur ve belli bir süre değişiklik olmadığı sürece bu cache, o sabit isteği yapanlara otomatik gönderilir.
Bir kullanıcı bir sayfaya istek yaptığında öncelikle bu sayfanın önbelleklenmiş bir versiyonu var mı ona bakılır. Bunun için de cache key kullanılır. Kullanıcının headerda ilettiği veriler kontrol edilir. Eğer cache edilmiş isteklerde bu keylerle eşleşen bir kopya varsa doğrudan kullanıcıya o gönderilir. Eşleşen bir cevap yoksa bu unkeyed istektir. Buradaki önemli nokta eğer böyle bir eşleşen cache varsa diğer bütün bileşenler önemsiz olur ve o cache’nin süresi dolana kadar hep o cevabın kopyaları gönderilir.
Web Cache Poisoning Saldırısının Etkileri Nelerdir?
Saldırgan neyi önbellekleyebilir?
Bu payloadın zararlılığına bağlıdır. Ancak genellikle diğer saldırıların dağıtımını sağlamak için kullanılır.
Saldırı yalnızca önbelleğe alınan sayfaya erişen insanlara ulaşacağı için sayfanın aldığı trafiğe bağlı olarak da zarar değişebilir. Saldırgan büyük bir sitenin anasayfasını zehirlerse kısa sürede yayılmaya sebep olabilir.
Ayrıca cache süresi kesinlikle hasarı etkileyecek diye bir şey yoktur. Saldırı tekrar kendini zehirleyecek şekilde yapılabilir.
Web Poisoning Attack
3 aşamadan oluşur :
- Unkeyed inputların bulunması : Herhangi bir web önbellek zehirlenmesi saldırısı, başlıklar gibi anahtarlanmamış girdilerin manipüle edilmesine dayanır. Web önbellekleri, kullanıcıya önbelleğe alınmış bir yanıt sunup sunmamaya karar verirken anahtarlanmamış girdileri yok sayar. Bu davranış, bunları yükünüzü enjekte etmek için kullanabileceğiniz ve önbelleğe alınırsa, istekleri eşleşen önbellek anahtarına sahip tüm kullanıcılara sunulacak “zehirli” bir yanıt ortaya çıkarabileceğiniz anlamına gelir. Bu nedenle, bir web önbelleğini zehirleme saldırısı oluştururken ilk adım, sunucu tarafından desteklenen anahtarlanmamış girdileri belirlemektir. İsteklere rastgele inputlar ekleyerek headerları değiştirerek unkeyed inputları saptayabiliriz. Yeni inputları girdiğimizde bu o inputların yansıtılmasından, başka bir cevap döndürülmesine kadar etkilere sebep olabilir. Bazen de kolayca farkedilmeyecek etkiler oluşabilir. Burada biraz manuel çaba gereklidir.Bu amaç için burp suite param miner kullanılabilir. Param miner çalıştırıldığında kendisi requestlere içindeki header listesini dener ve farklılıkları gözlemleyerek unkeyed header’ları bulur. Ama live sitede denerken cache key kullanmak başkalarının bizim denemelerimizi içeren cachelere erişmesini engeller. Param minerda ise cache buster seçeneği vardır.
- Sunucudan zararlı bir yanıt almak :Sunucunun bu unkeyed inputu nasıl değerlendirdiğini öğrenmek gerekir. Eğer yeterince dikkat edilmeden bu input yansıtılıyorsa veya başka verilerin oluşturulmasına sebep oluyorsa burada açık var demektir.
- Yanıtın Önbelleğe Alınması : Zararlı payload yüklendikten sonra en önemli konu bu yanıtın önbelleklenmesidir. Önbelleklenme file extension, content type, route, status code, and response headers gibi birçok konuya bağlıdır. Önbelleklemenin tam olarak nasıl çalıştığını öğrenmek ve nelere bağlı olduğunu öğrenmek için biraz sayfalarda gezinmek gerekecektir.
Cache Poisoning Nasıl Engellenir ?
Eğer mümkünse veriler hiç önbelleğe alınmayabilir. Cache kullanılacaksa da saldırganın statik kaynakları, sahtesiyle yer değiştirmesi engellenmelidir. Buradaki önemli konu kullanılan üçüncü taraf yazılımlara güvenilmesidir. Eğer bir header sitenin çalışması için önemli değilse disable edilmelidir.