WordPress içerik yönetim sisteminin 4.2.1 sürümünde kritik bir güvenlik açığı tespit edildi. Bu kritik güvenlik açıkları, WordPress tarafından belirlendiği vakit, derhal güncelleme gerçekleştirilir ve açığın kapatılması yönünde işlemler yapılır. Yine öyle oldu ve WordPress derhal 4.2.2 sürümünü kullanıma sundu. Yayınlanan yeni güncelleme web sitesine zarar verebilecek kritik bir güvenlik açığının önüne geçti. Kritik zafiyetin adı Cross Site Scripting olarak da bilinen XSS zafiyeti. Yorumlar tarafına eklenen zararlı kodlar aracılığı ile kullanıcı ya da bilgisayar korsanı sitenin oturum bilgilerini ve kullanıcı bilgilerini çalarak sistemi istismar edebiliyor. Bu sayede gerek yönetici yahut site tarafında, gerek site kullanıcıları tarafına erişebilen sistem korsanının yapabilecekleri ise hayalgücüne bağlı bir durum. Özellikle WordPress tarafında varsayılan temalar olarak bilinen Jetpack ve TwentyFifteen temalarının bu zafiyetten etkilendiği belirtilmekte. WordPress kadrosunun güvenlik uzmanları olan Jon Cave ve Robert Chapin, bu zafiyeti bulan, raporlayan ve düzelten iki isim. Siz de bu zafiyetin önüne geçmek istiyorsanız, WordPress sürümünüzü yükseltebilirsiniz. Ayrıca, sürüm yükseltme işleminin sadece güvenlik zafiyeti ile ilgili değil aynı zamanda birkaç düzeltmeye de yol açtığı gözlemlenebilir. Changelog dosyasına bakarak nelerin değiştiği hakkında detaylı bilgiye sahip olabilirsiniz. Şimdi dilerseniz sizlerle Cross Site Scripting açığını detaylı olarak inceleyelim.
Cross Site Scripting (XSS) Nedir, Zafiyet Nasıl Kapatılabilir?
Birçok güvenlik zafiyeti mevcut ancak en sık karşılaşılan güvenlik zafiyetlerinden biri; Cross Site Scripting (XSS) olarak bilinir. Zafiyet JavaScript kodları aracılığı ile, web sitesinin html kodları içerisinde istemci tabanlı bir kod bulunması (searchbox, vs.) ve bu istemci koduna gömülen JavaScript kodunun çalıştırılabilmesi metoduna uygun olarak hareket eder. Bulunduğu tarihten bu yana erişim kontrolü tedbirleri geliştiriliyor ancak bu zafiyetin önüne geçmek maalesef dikkatsizlikten ötürü pek kolay değil. Açığın bulunmasından sonra saldırgan, başka bir alan adı aracılığı ile açığın bulunduğu alan adı ve sayfanın bilgilerini, açılan oturumların kişi bilgilerini çalabilmektedir. Bu açığın Cookie Sniffer denilen, cookie bilgilerinizi çalan yöntem ile birleşmesi, siteniz için çok kötü sonuçlar doğurabilir. Popüler bir online satış sitenize Sniffer yerleştirildiğini ve oturum açan her kullanıcının oturum bilgilerinin bu Sniffer’e düştüğünü tasavvur edin. Bu, site sahibi için kâbus, site korsanı için bayram olarak nitelendirilebilir.
Peki, Cross Site Scripting zafiyetinin kod tarafında önlemi nedir, nasıl alınmalıdır. Bunu kod üzerinden açıklayalım:
<?php
$mesajyazdir = $_GET['mesaj'];
print $mesajyazdir ;
?>
Yukarıda verdiğim kod, basit bir PHP betiği. Dolar işareti ile belirlenen bir değişken ve GET ile atanan bir değerimiz mevcut. Ardından, print komutu ile $mesajyazdir değişkeninin ekrana vurulmasını sağladık. Ekrana vurulmasından kastımız elbette site kullanıcılarına iletilmesi. Siteye iletilecek olan değeri ise ‘mesaj’ olarak belirledik. Kodda herhangi bir önlem görüyor musunuz? Ben görmüyorum. Bu dili yeni öğrenen arkadaşlar da göremezler, çünkü hatasız yazılmış ve çalışan bir koddur kendisi. Ancak, “hacker”lara kapı açması için verilen olanakların hepsini sonuna dek kullanır bu kod. Çünkü, herhangi bir önlem alınmamıştır. Bu kod, GET değerinde herhangi bir filtreleme işlemi yapılmaksızın oluşturulmuştur. Bizim sitemizin mesajyazdir değişkeni sitemizde, bu kodu “index.php” adlı dosyaya yazdığımızı varsayar isek, “index.php?mesajyazdir=” olarak belirecektir. Eşittir işaretinin ertesine herhangi bir filtreleme yapmadığımız için istediğimiz her şeyi yazabiliriz. Peki, “hacker” neden JavaScript kodları ile bilgilerimizi çalma yoluna gitmesin?
Gidecektir. ve “hacker”ın kodu aşağıdaki şekillerde oluşacaktır muhtemelen:
index.php?mesajyazdir=<script>alert(document.cookie)</script>
ve Senaryo, “hacker”a bütün cookie’ler, yani oturum çerezleri pop-up aracılığı ile düşmesi şeklinde ilerler. Yapılacak diğer her şey “hacker”ın zekâsına kalmıştır aslında. Oturum bilgilerini çözerek her şeyi yapabilir. Ya da bu zafiyeti Cookie Sniffer yöntemi ile birleştirip, ortaya koca bir tehdit çıkarabilir.
Peki, bu açığı nasıl önleyebiliriz.
Aslında çok basit. Karakterleri filtreleyerek bu açığın önlenmesi mümkündür. Sonuçta, yukarıda gördüğünüz kod, parantez ve taksim işaretleri ile dolu bir kod ve bunları filtreleyebilirsek; kötü sonucu önleyebiliriz. Bunun muadili PHP dilinde htmlspecialchars adlı komuttur. Temel olarak, bu zafiyetin bu şekilde önlenmesi mümkündür.
Örnekleyecek olursak:
<?php
$mesajyazdir = $_GET['mesaj'];
print htmlspecialchars($mesajyazdir);
?>
Yukarıdaki biçimde, bu zafiyetin engellenmesi mümkündür. Bu en kolay yoldan açığı defetme yöntemidir ancak daha gelişmiş yollar da mevcuttur, araştırdığınız takdirde bulabilirsiniz. Daha gelişmiş yolların sebebi, daha gelişmiş saldırı ataklarının icat edilmesi olabilir.
Yazı tamamı ile bilgilendirme amaçlı hazırlanmıştır. Herhangi bir biçimde illegal bir yönü yoktur. Tamamı ile kod betiğinin ve açıklı betiğin nasıl olduğunu görmeniz açısından hazırlanmış bir yazıdır. WordPress’i güncellediğiniz takdirde, yukarıdaki bilgiler ile uğraşmanıza gerek yoktur ancak bir PHP uzmanı adayı iseniz yahut bir webmaster adayı, bunları bilmek zorundasınız. Aksi takdirde, uzman deyiminden çok uzak bir kariyer planı yapmışsınız demektir. WordPress’te güncel olarak yayımlanan güvenlik açıkları hakkında bilgilendirmeler sunmaya devam edeceğiz. Bizi takip etmeye sosyal medya üzerinden devam edebilir ve yeni yazılarımızdan haberdar olabilirsiniz.