X-Forwarded-For ile XSS Zafiyeti

Internet erişimlerinde internet servis sağlayıcıları tarafından bant genişliğinin veya gizliliğin sağlanması amacıyla proxy cihazları ve yük dengeleyicilerin kullanılması durumunda, hedef web sunucusu gerçekte isteği yapan istemci bilgisayarın IP adresini göremez. Bunun yerine arada kullanılan Proxy cihazının veya yük dengeleyicilerinin IP adresini görüntüleyebilir.

Bu durumda Proxy sunucuları X-Forwarded-For HTTP başlığını kullanarak, web isteğini yapan istemciye ait gerçek IP adresinin hedef sunucuya iletilmesini sağlar.

Yük dengeleyiciler (Load Balancer):

Yük dengeleyiciler iş yükünü hafifletmek amacıyla gelen işlerin birden fazla sunucuya dağıtılması işlemidir.Günümüzde web sitelerde,uygulamalarda,veri tabanı sistemlerinde ve daha birçok sistemlerde performans ve güvenilirliği artırmak için kullanılmaktadır.

Resimde görüldüğü gibi X-Forwarded-For başlığı, arada bulunan vekil sunucusuna rağmen istemcinin IP adresi bilgisini alarak web sunucusuna gönderilmesini sağlar.

Genellikle loglamalarda kullanılır. Siteye gelen kişilerin IP adreslerinin tutulması herhangi bir olası saldırı anında saldırıyı önlemek amaçlı kullanılabilecek bir önlem olarak ele alınabilir.

Fakat bu durumda sisteme giriş yapılan istemcinin X-Forwarded başlığındaki IP bilgisinin site içinde bir yerde tutulması anında XSS zafiyeti tetiklenebilir duruma gelir.

X-Forwarded-For: 1.1.1.1″><script>alert(1)</script>

Ayrıca hafıza taşması, web sunucusu haklarıyla komut çalıştırma, log dosyalarına bozuk veri girilerek dosyanın veya formatının bozulması vb. güvenlik problemlerinden etkilenebilir.

Bu durumu bir örnekle inceleyelim:

Görüldüğü gibi bir giriş sayfası mevcut. Giriş sayfasına kullanıcı adı ve parola değerlerimizi girip sunucuya giden isteği inceleyelim.

Görselde yapıldığı gibi istek üzerinde bulunan http başlıklarına X-Forwarded-For başlığını eklediğimiz zaman sunucu bize belirtmiş olduğumuz IP adresi bilgisini vermektedir.

 

 

Böyle bir durumda yansıtılan IP adresi değerini X-Forwarded-For başlığı ile manipüle edebildiğimizi tespit ettik. Manipüle ettiğimiz IP değeri sayfa üzerinde bize yansıtıldığı için, bu başlığımıza IP adresi girmek yerine javascript kodları deneyebiliriz.

 

İstek üzerinde belirtilen X-Forwarded-For başlığına XSS zafiyetini tetikleyecek scripti girdikten sonra isteğimizi gönderiyoruz.

Görüldüğü gibi, sunucu tarafında herhangi bir filtreleme yapılmadığı için, javascript kodu çalıştırılarak XSS zafiyeti tetiklenebilmiştir.