WordPress de bulunan Stored XSS Açığı

Bildiğiniz üzere XSS(Cross Site Scripting) OWASP (Open Web Application Security Project) ın yapmış olduğu (2013) en fazla güvenlik problemine sebep olan 10 açıklıklar sıralamasında 3.sırada bulunmaktadır.

Cross site scripting (XSS), HTML kodlarının arasına istemci tabanlı kod gömülmesi yoluyla kullanıcının tarayıcısında istenen istemci tabanlı kodun çalıştırılabilmesi olarak tanımlanır.

21 Nisan 2015 tarihinden önce yayınlanan yani 4.1.2 versiyonundan küçük olan tüm wordpress sitelerinde bu açık bulunmaktadır. Forbes’in yapmış olduğu araştırmaya göre 2012 yılında 60 million websitesi wordpress kullanmaktadır. Bildiğiniz gibi wordpress kullanış kolaylığıyla herkesin rahatlıkla bir websitesi oluşturabileceği platform haline geldi. Kurulumu neredeyse birkaç saniye ile halledilebildiği de kullanım oranını artırmasına büyük katkıda bulunmuştur.

Açıktan bahsedecek olursak:

Açık WordPress 4.1.2 versiyonundan aşağıdaki tüm yorum yapılabilme özelliğine sahip wordpress sitelerinde bulunmaktadır. MySQL utf8 karakter setinde yalnızca 3 bit desteklemektedir. (https://mathiasbynens.be/notes/mysql-utf8mb4) Yani utf8 ile kodlanmış bir karakter 1 ile 4 bit arasında bir değere sahip olabilir. Eğer 4 bitlik bir karakter depolamak istersek utf8mb4 kullanmamız gerekmektedir.

Utf8 kolonuna 4 bitlik bir karakter koyulduğunda, MySQL karakter ile birlikte karakterden sonraki kısmı kesiyor. Fakat MySQL bunu sadece 4 bitlik karakter için değil aslında geçersiz tüm karakterler için yapmaktadır. Bu durumdan kurtulmak için ise MySQL’in defaultta kapalı olarak gelen MySQL strict mode açılmalıdır.

Mesela ben Lstar yazmak istediğimde eğer strict mode disable ise MySQL otomatik olarak özel karakter ve sonrasını silecek ve sadece L kalacaktır.

Bahsetmiş olduğumuz Strict Mode WordPress’de kapalı olduğu geldiği için bu zafiyet rahatlıkla yorum kısmına uygulanabilmektedir.

WordPress yorumlarda bazı HTML tag’lerinin kullanımına izin vermektedir. Bunlardan bazıları:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

<abbr title=’Web log’>blog!</abbr>

Böyle bir yorum yapmak istediğinizde herhangi bir sıkıntı olmamakta çünkü WordPressin izin vermiş olduğu HTML tagları kullanıyorsunuz.

<abbr title='Weblog'>blog!</abbr>

Ama bunu eklediğinizde <abbr title=’Web sadece burasını göreceksiniz. Aynı zamanda bu HTML sayfasının görüntüsünü de bozmaktadır.

<q cite=’x onmouseover=alert(“Lostar”) style=display:block;position:fixed;width:100%;height:100%;top:0;‘>

wpxss

En basit kullanımı yukarıdaki gibidir. Bundan sonrası saldırganın XSS kullanım becerisine bağlıdır. XSS için çeşitli kullanım yöntemlerine buradaki yazımdan ulaşabilirsiniz.

Zafiyeti keşfeden araştırmacının çekmiş olduğu ufak bir demo.

Öneriler: 

  • En kısa zamanda wordpress’inizi güncelleyin.
  • Eğer kullanmış olduğunuz temanın uyumluluk problemi çıkartacağını düşünüyorsanız güncel haliyle yorumları kapatınız.
  • Bugüne kadar geçen zaman için ise bir arka kapı oluşturulma ihtimalinden dolayı 1-2 haftalık loglarınıza bakın.

Kaynaklar:

  • http://arstechnica.com/security/2015/04/27/just-released-wordpress-0day-makes-it-easy-to-hijack-millions-of-websites/
  • https://cedricvb.be/post/wordpress-stored-xss-vulnerability-4-1-2/
  • http://thehackernews.com/2015/04/WordPress-vulnerability.html
  • https://blog.sucuri.net/2015/04/critical-persistent-xss-0day-in-wordpress.html