Cross Site Scripting, belirli bir web sitesindeki müşterilerin kişisel gizliliklerinin hedef alındığı ve müşterilerin bilgilerinin çalındığı veya çeşitli şekilde manipüle edildiği zaman ortaya çıkan güvenlik ihlaline dayanan bir saldırı yöntemidir. “Saldırgan – web site” veya “saldırgan – kurban” ilişkisi gibi iki aşamalı olan birçok web saldırı yönteminden farklı olarak XSS açıkları; 3 bileşenle gerçekleştirilir: saldırgan, kurban ve web site. XSS saldırılarının amacı, kurban müşterinin cookielerini veya diğer önemli bilgilerini çalmaktır. Böylece aynı kurban adına her türlü işlemi gerçekleştirebilir.
Çevrimiçi mesajlaşma boardları, web logları, ziyaretçi defteri ve forumlar gibi mesajların kalıcı olarak depolandığı yerler de, Cross Site Scripting açığını kolaylaştırmaktadır. Bu durumlarda saldırgan, foruma, görünüşte tamamen zararsız olan bir siteye ait; fakat kullanıcıları hedef alacak şekilde şifrelenmiş bir script içeren herhangi link atabilir. Saldırganlar; zararlı scripti gizleyecek ve bazı durumlarda da < ="mce-text/">//
3 tip XSS tipini görelim: Depolanmış(Gizli), Yansıtılmış(Aktive olmuş) ve DOM-Tabanlı
Depolanmış XSS açığı, bu saldırı türünün en güçlü örneğidir. Depolanmış XSS saldırısı; herhangi bir kullanıcı tarafından bir web uygulamasına ilk olarak bilgi girildikten sonra bu bilginin veritabanı, dosya sistemi veya diğer bölümlerde yani genel olarak server üzerinde depolanmasının ardından, bu bilginin şifrelenmemiş bir şekilde kullanıcılara gösterilmesi sonucu açığa çıkar. Gerçek yaşamdan örnek verirsek, Ekim 2005'te MySpace’te ortaya çıkan Samy solucanı, XSS açığını kullanıyordu.
Bu açıklar, XSS açığının en önemli tipini oluşturur. Çünkü saldırgan, scripti bir kereye mahsus enjekte edebilir. Sosyal mühendisliği yardımıyla da birçok kullanıcı bu olaydan etkilenebilir veya web uygulaması XSS virüsüne bile maruz kalabilir.
Elimizde, diğer kullanıcılara mesaj atmamızı sağlayan bir site olsun ve biz mesaj atmak yerine bir script enjekte edelim:
Şimdi server, bu bilgiyi depolayacak ve karşı taraftaki kullanıcı bu linke tıklayınca fake mesaj görünecek. Kurbanımızın tarayıcısı bizim scriptimizi aşağıdaki gibi çalıştıracak:
Yansıtılmış XSS açıkları; ise çok daha fazla bilinen bir tiptir. Önceden veri girilmiş olan web istemcisinin, server-side(server aracılı) scriptlerle kullanılması sonucu ortaya çıkar. Eğer, kullanıcı tarafından girilen fakat onaylanmamış bilgiler; HTML kodlamasız olarak sayfada görülüyorsa; bu, client-side(istemci aracılı örn: tarayıcı kullanarak) kodların dinamik sayfalara eklenmesine izin verecektir. Bunun klasik örneği sitelerin arama bölümleri: Eğer bazı özel HTML karakterlerini de içeren karakter dizisini aratırsak, karşımıza neyi aradığımızı gösteren bir sonuç çıkacaktır. Eğer tüm arama kriterlerimiz veya karakterlerimiz; HTML kodlama ile görüntülenmezse, XSS açığı vardır diyebiliriz.
İlk bakışta, eğer kullanıcılar kendi sayfalarına sadece kod ekleyebiliyorlarsa, bu ciddi bir problem değildir diye düşünebiliriz. Fakat, basit bir sosyal mühendislik metoduyla saldırgan kurbana bir link gönderir. Bu link sonuç sayfasına kodlar enjekte edilmiş zararlı bir linktir ve saldırganın sayfadaki tüm içeriğe erişebilmesine olanak sağlar. Bu durumda kullanılması gereken sosyal mühendislik metodlarının genel gereksinimleri sebebiyle, bir çok programcı bu açıklara pek önem vermemiştir. Bu önemsenmeyen açıklardan biri de XSS’dir ve XSS’nin önemiyle ilgili hep anlaşmazlıklar olmuştur. XSS açığının önemini göstermek için en basit yol, DoS ataklarıdır. Bazı durumlarda aşağıdaki yöntem kullanılarak server üzerinde DoS atağı gerçekleştirilebilir.
Bu kod, hedef sayfa üzerinde her 0.3 saniyede bir sayfanın yenilenmesi isteğini gönderecektir. Bu sınırsız yenilenme isteklerinin meydana getirdiği flood sebebiyle, web sayfasının ve veri tabanı serverının işlemesi duracaktır. Daha fazla tarayıcı oturumunun olması bu saldırının şiddetini artıracaktır.
Örneğin, eğer açığı olan bir siteye ait link içeren zararlı bir siteye sahip olan saldırgan, script enjekte edebilir ve bu script kullanıcının tarayıcısında çalıştırılabilir. Bu olay, XSS exploitleriyle normalde zaten bypassa uğrayan çapraz domain sınırlaması da dahil, tüm istemci tabanlı kodları bypass edecektir.
Bu enjeksiyonların birçok metodu vardır. Basit sitelerdeki kullanımının dışında bir organizasyonu nasıl etkilediğini gösteren bir örnek verecek olursak, BlackHat Amerika 2006 da Jeremiah Grossman tarafından gösterilen olayı söyleyebiliriz. Bu ispatlama yapılırken çeşitli bloglara, gazetelere veya web sayfaların yorum kısmına depolanmış XSS scripti içeren kodlar gönderilmiştir ve bu zararlı kodların bulunduğu sayfaları ziyaret eden kullanıcıların ağları belirli açıklara karşı taranabilmiş ve loglanmıştır.
Black Box testi ve örnek:
XSS açığını test etmenin yolu; bir uygulamanın veya web serverın, herhangi bir tarayıcı tarafından çalıştırılabilen basit scriptler içeren isteklere karşı vereceği cevabı doğrulamakla olur. Örneğin Sambar Server v5.3, XSS açığının bilindiği çok popüler ücretsiz bir web serverdır. Servera aşağıdaki gibi bir istek gönderirsek, tarayıcı tarafından çalıştırılan bir server cevabı alırız.
http://server/cgi-bin/testcgi.exe?<SCRIPT>alert(“Cookie”+document.cookie) // ]]>
Bu script tarayıcı tarafından çalıştırılacaktır çünkü uygulama, orijinal scripti içeren bir hata mesajı verecektir. Böylece tarayıcı bu cevabı, serverdan kaynaklanan çalıştırılabilir bir script olarak yorumlayacaktır. Tüm web serverlar ve web uygulamaları potansiyel olarak bu açıklara karşı zayıftır ve bu ataklara karşı önlem almak oldukça zordur.
Taglar: cross site scripting