XSS(Cross-Site Scripting)’i Anlamak
XSS (Cross-Site Scripting) Nedir?
Cross-Site Scripting, kısaca XSS, bir saldırganın kötü niyetli kodları başka bir kullanıcının tarayıcısında çalıştırmasını sağlayan bir güvenlik açığıdır. Bu tür saldırılar, çoğunlukla web uygulamalarında kullanıcının girdiği verinin güvenlik kontrollerinden geçmeden geri kullanıcıya gösterilmesi durumunda ortaya çıkar. XSS açığı ile bir saldırgan, kullanıcı bilgilerini çalabilir, kurbanın hesabına yetkisiz erişim sağlayabilir veya kullanıcı üzerinde başka zararlı eylemler gerçekleştirebilir.
XSS HTTP Response’un Body kısımında gerçekleşir bu nedenle buradaki dataya odaklanmamız gerekir. Herhangi bir Database veya Server tarafına müdahale edilmemektedir. XSS zaafiyeti bulabilmemiz için bir inputa ihtiyacımız vardır. İnputlar yorum bölümünde, sitenin arama bölümünde, üyelik formlarında bulunurlar.
XSS saldırıları genellikle JavaScript kullanılarak gerçekleştirilir, ancak HTML, Flash ve diğer kodlar da kullanılabilir. Bu saldırılar, hem küçük web sitelerinde hem de büyük uygulamalarda çok ciddi güvenlik ve gizlilik riskleri yaratır.
Neden XSS Tehlikelidir?
XSS saldırıları, kullanıcıları etkileyen en büyük güvenlik risklerinden biridir çünkü saldırgan, kurbanın tarayıcısında kötü niyetli kod çalıştırabilir. Bu durum, kurbanın kimlik bilgilerini çalmak, kurbanın oturumunu ele geçirmek veya kurbanın uygulamayla ilgili bilgilerini elde etmek gibi çeşitli zararlı amaçlarla kullanılabilir. Özellikle sosyal medya veya e-ticaret siteleri gibi yüksek trafikli platformlarda XSS zafiyetleri ciddi sonuçlara yol açabilir.
XSS Türleri
XSS, uygulanış biçimine göre üç ana kategoriye ayrılır: Stored XSS, Reflected XSS, ve DOM-Based XSS.
1. Stored XSS (Depolanmış XSS)
Stored XSS, saldırganın kötü niyetli kodunu sunucuya depolaması ve bu kodun diğer kullanıcılara gösterilmesi durumudur. Bu tür saldırılar, genellikle yorum alanları, kullanıcı profilleri veya mesajlaşma gibi kullanıcıların veri gönderebildiği alanlarda ortaya çıkar.
Örneğin, bir sosyal medya platformunda bir saldırgan, profiline kötü amaçlı bir JavaScript kodu ekleyebilir. Bu durumda, profiline bakan diğer kullanıcıların tarayıcısında bu kötü amaçlı kod çalıştırılır. Böylece saldırgan, kurbanın oturum bilgilerini çalabilir veya kurbanın hesabına erişim sağlayabilir.
2. Reflected XSS (Yansıtılmış XSS)
Reflected XSS, saldırganın kurbana özel olarak hazırlanmış bir URL veya form göndererek, kullanıcının girdiği verilerin yansıtılması sonucu oluşur. Bu saldırıda, kötü niyetli kod sunucuda depolanmaz, ancak kullanıcıya hemen geri döndürülür.
Örneğin, bir saldırgan, kurbanın bir linke tıklamasını sağlayarak bu tür bir saldırıyı gerçekleştirebilir. Kurban linke tıkladığında, URL içerisinde yer alan kötü niyetli kod kurbanın tarayıcısında çalışır ve saldırganın belirlediği işlemler gerçekleştirilir.
3. DOM-Based XSS (DOM Tabanlı XSS)
DOM-Based XSS, tarayıcı üzerinde çalışan JavaScript’in manipüle edilmesiyle gerçekleşen bir saldırıdır. Bu tür saldırılarda, kötü niyetli kod direkt olarak tarayıcıda çalışan JavaScript tarafından işlenir, yani sunucuya herhangi bir veri gönderilmez. Bu saldırı, genellikle istemci tarafında JavaScript ile çalışan uygulamalarda görülür.
DOM-Based XSS’de saldırgan, kurbanın tarayıcısındaki DOM (Document Object Model) yapısını değiştirerek kendi kötü niyetli kodunu çalıştırır. Bu durumda sunucu saldırıdan haberdar olmadığı için bu tür açıkları tespit etmek ve önlemek daha zor olabilir.
XSS Saldırı Örnekleri ve Senaryoları
Örnek 1: Kullanıcı Verisi Üzerinden Stored XSS
Bir blog sitesinde kullanıcıların yorum yapabildiğini düşünelim. Bu alanda kullanıcı girdisi doğru bir şekilde doğrulanmazsa, bir saldırgan yorum bölümüne kötü amaçlı bir JavaScript kodu yerleştirebilir. Bu kod, sayfa yüklendiğinde tüm kullanıcıların tarayıcısında çalışır ve saldırganın tanımladığı zararlı eylemleri gerçekleştirir.
Örneğin, yorum alanına şu kodun yazıldığını düşünelim
<script>alert('Bu bir XSS saldırısıdır!');</script>
Yukarıdaki kod, her bir kullanıcı yorumu görüntülediğinde çalışır ve basit bir uyarı gösterir. Ancak saldırgan, bu kodu daha karmaşık hale getirip kurbanın oturum çerezlerini çalmak veya başka zararlı işlemler yapmak için kullanabilir.
Örnek 2: Yansıtılmış XSS ile Kimlik Bilgisi Çalma
Bir arama motoru sitesi düşünelim. Kullanıcılar belirli anahtar kelimeleri aratıyor ve site, arama terimini doğrudan kullanıcıya gösteriyor. Bu site, arama terimini doğrulamadan veya filtrelemeden geri döndürürse, saldırgan aşağıdaki gibi bir URL hazırlayabilir:
http://example.com/search?q=<script>alert('Bu bir XSS saldırısıdır!');</script>
Kurban bu URL’yi açtığında, tarayıcıda alert() komutu çalışacak ve XSS saldırısı gerçekleşecektir. Saldırgan bu yöntemi kullanarak kullanıcıdan veri çalmayı hedefleyebilir.
Örnek 3: DOM-Based XSS ile Form Manipülasyonu
Bir web uygulaması, URL parametrelerine dayanarak sayfa içeriğini güncelliyorsa, saldırgan DOM tabanlı bir XSS saldırısı gerçekleştirebilir. Örneğin, URL’nin # bölümünü okuyan bir JavaScript kodunun aşağıdaki gibi olduğunu düşünelim
document.getElementById('content').innerHTML = location.hash;
Saldırgan, kurbana şu URL’yi gönderebilir:
http://example.com/page#<script>alert('Bu bir DOM tabanlı XSS saldırısıdır!');</script>
Kurban bu URL’yi ziyaret ettiğinde, JavaScript kodu DOM’u manipüle ederek saldırganın zararlı kodunu çalıştırır.
XSS Açıklarını Önlemek İçin Yöntemler
XSS saldırılarından korunmak için uygulayabileceğiniz birkaç yöntem şunlardır:
1. Girdi Doğrulama (Input Validation)
Kullanıcıdan gelen tüm girdiler doğrulanmalıdır. Bu, özellikle HTML veya JavaScript kodlarını içeren girişler için geçerlidir. Girdi doğrulama ile XSS saldırıları azaltılabilir.
2. Çıktı Kodlama (Output Encoding)
Kullanıcı girdisi sayfada gösterilecekse, bu veri doğru bir şekilde kodlanmalıdır. Örneğin, <script> gibi HTML öğeleri <script> olarak kodlanmalıdır. Bu, JavaScript kodlarının doğrudan çalıştırılmasını önler.
3. Content Security Policy (CSP)
CSP, sayfa üzerinde çalışacak olan kaynakları tanımlayan bir güvenlik politikasıdır. Bu politika, XSS saldırılarını önlemek için belirli komut dosyalarının veya kaynakların çalışmasını engelleyebilir.
4. XSS Koruması Sunan Web Uygulama Güvenlik Duvarları (WAF)
Web Uygulama Güvenlik Duvarları, XSS gibi yaygın saldırı türlerini engelleyebilir. WAF’ler, gelen talepleri inceleyerek şüpheli veya kötü niyetli kod içeren girdileri filtreler.
Sonuç
Cross-Site Scripting (XSS), web güvenliği alanında ciddi tehlikeler yaratan ve çok yaygın olan bir güvenlik açığıdır. XSS’in türlerini ve tehlikelerini anlamak, etkili güvenlik önlemleri almanın ilk adımıdır. Güvenlik bilinci yüksek bir kullanıcı veya geliştirici, XSS saldırılarına karşı en temel güvenlik önlemlerini uygulayarak, bu tür açıklardan korunabilir.
XSS zafiyetleri, kullanıcı verilerinin çalınması veya yetkisiz erişim sağlanması gibi ciddi sonuçlara yol açabileceği için web uygulamalarında özenle kontrol edilmelidir. Girdi doğrulama, çıktı kodlama ve CSP gibi önlemler, XSS’i önlemenin başlıca yolları arasında yer alır. Bu tedbirlerin uygulanması, hem kullanıcıları hem de uygulamaları daha güvenli hale getirecektir.
Artık XSS’i anladığımıza ve ne olduğunu öğrendiğimize göre “XSS’e Gerçekçi Bir Yaklaşım” Yazısıyla Pratiklerle ve gerçek hayattan örneklerle XSS’i öğrenelim.
Teşekkürler:
Web Security 0x08 | XSS Güvenlik Zafiyeti Hakkında Her Şey Part — 1


Bir yanıt yazın