Karmaşık Hale Gelen Zafiyet: Cross-Site Scripting (XSS)

zafiyet

Giriş

Web uygulamalarında dünya genelinde birçok farklı türde zafiyet yer almaktadır. Bu zafiyetlerin arasında adı sıkça duyulan cross-site scripting (XSS) zafiyeti gelmektedir. Injection ailesine ait bir zafiyet türüdür. Zafiyet uygulama tarafından kullanıcı girdisine izin verilmesi sonucu ortaya çıkmaktadır. Bu nedenle genel olarak bir çok uygulama üzerinde görülmektedir. Kötüye kullanımı sonucunda zararlı javascript kodları entegre edilerek, son kullanıcı açısından bir saldırı mekanizmasına dönüştürülebilir. Son kullanıcı açısından fark edilmesi zor, sinsi bir zafiyet türüdür. Zafiyeti sömürme aşamasında ise zararlı javascript kodu son kullanıcı tarafından maruz kalınması sağlanır. Bu sayede en çok bilinen etkileri arasında kullanıcı yetkileri dahilinde işlem yapılmasına ve kullanıcı oturumunun ele geçirilmesi ile sonuçlanabilir. Bu tarz durumların önüne geçmek adına, geliştiriciler kullanıcıdan aldığı girdileri kontrol altına almalıdır.

 

zafiyet

Otamatize bir araç veya manuel olarak zafiyetin tespiti yapılması planlanıyorsa, web application firewall (WAF) gibi güvenlik yapılandırmaları devre dışı bırakılmalıdır. Aksi takdirde mevcutta yer alan zafiyetlerin tespiti zorlaşacaktır. Genel yapısına baktığımızda sunucuya iletilen zararlı HTTP isteklerini bloklamaktadır. Bu duruma karşı saldırgan kişiler tarafından ise web application firewall (WAF) atlamaya yönelik girdilerin şifrelenmesi gibi yöntemlere başvuracaklardır. Web application firewall (WAF) gibi sistemleri atlatmak mümkündür ancak tespiti yapacak kişilerin bu nedenle biraz daha fazla efor sarfetmeleri gerecektir. Bu yüzden mevcutta bilinen bir zafiyetin giderilmesi adına kullanımı hatalıdır. Zafiyetin kök nedeni araştırılarak çözüme kavuşması önem arz etmektedir. Diğer bir tercih sebebi ile uygulamanın kaynak kod analizinden geçirilmesi farklı bir tercih sebebi gösterilebilir.

 

zafiyet

Her geçen gün geliştiricilerin yapmış olduğu güncellemeler ile birlikte güvensiz kodlama hatalarına bağlı olarak zafiyetlerin sayısı artış göstermektedir. Bu nedenle günümüzde web sitesi kullanımının yoğun olduğu kurumlar (Facebook, Twitter vb.) ödül avcılığı gibi programlara kayıt olmaktadırlar. Bu programlar sayesinde kuruma ait web uygulamalarında görülen zafiyetler zararsız kişiler tarafından tespit edilerek bildirilmesi amaçlanır. Bu yolla kurum tarafından zafiyeti tespit eden kişilere yönelik ödüllendirme işlemi uygulanır. Bu sayede kurum tarafından gerekli önlemler alınmış olur. Yazının devamında ise siteler arası betik çalıştırma (XSS) zafiyetinin türlerine değinilecektir.

Siteler Arası Betik Çalıştırma (XSS) Türleri

zafiyet

Yansıtmalı (Reflected)

Zafiyetin bu türünde, kullanıcıdan alınan girdiye karşı tek seferlik maruz kalınması sonucunda oluşmaktadır. Bu yolla kullanıcıdan alınan girdi kendisine yansıtılmaktadır. Tetikleme sırasında kullanıcıdan alınan girdiye karşı sunucudan gelen yanıt doğrultusunda tarayıcı üzerinde derlenecektir. Bu zafiyet sunucu taraflı oluşan bir zafiyet türüdür. Sunucu taraflı olmasının sebebi sunucu tabanlı programlama diline ait girdi kontrol eksikliğine dayalı hatalardan meydana gelmesidir. Saldırgan bir kişi bu yönde zararlı html veya javascript kodu enjekte edebilir. Web sitelerinde sıkça görülen alanlar arasında arama, hata mesajları ve önizleme gibi kısımlar örnek gösterilebilir.

PHP Kodu

arama.php

<?php echo($_GET[“q”]); ?>

Tetikleme Girdisi

%3Cscript%3Ealert(%22LOSTAR%22)%3C/script%3E

İstek

Yanıt

Derlenmiş Hali

zafiyet

Saklı (Stored)

Zafiyetin bu türünde, kullanıcıdan alınan girdi tekrarlayan bir biçimde maruz kalınması sonucunda oluşmaktadır. Bu yolla kullanıcıdan alınan girdi kayıt altına alınarak saklı bir biçimde yansıtılmaktadır. Tetikleme sırasında kullanıcıdan alınan girdiye karşı sunucudan gelen yanıt doğrultusunda tarayıcı üzerinde derlenecektir. Bu zafiyet sunucu taraflı oluşan bir zafiyet türüdür. Sunucu taraflı olmasının sebebi sunucu tabanlı programlama diline ait girdi kontrol eksikliğine dayalı hatalardan meydana gelmesidir. Saldırgan bir kişi bu yönde zararlı html veya javascript kodu enjekte edebilir. Web sitelerinde sıkça görülen alanlar arasında ziyaretçi defteri, iletişim formu, mesajlar ve yorumlar gibi kısımlar örnek gösterilebilir.

PHP Kodu

kayit.php

<?php $db = new SQLite3(“mesaj.db”); $db->exec(“CREATE TABLE if not exists kayit (id integer primary key, mesaj text not null);”); if(!empty($_GET)) $db->exec(“INSERT INTO ‘kayit’ values (null, ‘”.$_GET[“q”].”‘);”); $ptr = $db->query(“SELECT mesaj from kayit order by id desc;”); while($row = $ptr->fetchArray(SQLITE3_ASSOC)) printf(“<p>%s</p>\n”, $row[“mesaj”]); ?>

Tetikleme Girdisi

%3Cscript%3Ealert(%22LOSTAR%22)%3C/script%3E

İstek

Yanıt

Derlenmiş Hali

Belge Nesne Modeli (DOM)

Zafiyetin bu türünde, kullanıcıdan alınan girdiye karşı tek seferlik maruz kalınması sonucunda oluşmaktadır. Bu yolla kullanıcıdan alınan girdi kendisine yansıtılmaktadır. Tetikleme sırasında kullanıcıdan alınan girdiye karşı tarayıcı üzerinde derlenecektir. Bu zafiyet istemci taraflı oluşan bir zafiyet türüdür. İstemci taraflı olmasının sebebi istemci tabanlı programlama diline ait girdi kontrol eksikliğine dayalı hatalardan meydana gelmesidir. Saldırgan bir kişi bu yönde zararlı html veya javascript kodu enjekte edebilir. Web sitelerinde tüm alanlar arasında sıkça görülebilir.

JavaScript Kodu

secim.html

<script>
var secim=document.URL.indexOf(“q=”)+2;
document.write(document.URL.substring(secim,document.URL.length));
</script>

Tetikleme Girdisi

%3Cscript%3Ealert(%22LOSTAR%22)%3C/script%3E

İstek

Yanıt

Derlenmiş Hali