Wordpress Security

WordPress <= 3.9.2 Stored XSS Zafiyeti Analizi ve Exploit Yöntemi

Merhaba

Öncelikle bu blog yazısını daha erken bir tarihte yazmak isterdim ama malesef iş yoğunluğunda vakit bulamadım. Affınıza sığınarak teknik detaylara ve zafiyetin ne kadar kritik olduğuna bakalım.

20 Kasım 2014 tarihinde Klikki isimli güvenlik firması tarafından tespit edilen bu zafiyet, wordpress tarihinde benim gördüğüm en kritik güvenlik açığıdır. Hemen hemen herkes tarafından SQL Injection gibi zafiyetler en kritik güvenlik açıkları olarak adlandırılsa da, konu Stored XSS ise saldırı vektörleri çok farklı noktalara gidebilmekte. Hemen hemen son 1 yıl içerisinde katıldığım bir çok seminerde “Client-Side Security” ve XSS’e dikkat çekmeye çalıştım. Geliştiricilerimizin “Yıl olmuş 2014 hala mı XSS ?” algısından çıkıp, olayın önemine varmaları gerektiğini düşünmekteyim. 

Teknik Detay

Zafiyet wordpress’te ki yorum mekanizmasında bulunmakta. Kullanıcılar yorum yaparken kullanabilecekleri belli başlı HTML tagleri bulunmakta. Örneğin <p>Güzel yazı</p> gibi bir yorumda bulunabilirsiniz, ama <svg onload=alert(1)> gibi bir yorumda bulunduğunda beklenen output görememektesiniz.

Aşağıdaki açıklama zafiyetin olduğu kod yapısının amacını gayet güzel açıklamakta.

wp-includes/formatting.php dosyasında bulunan wptexturize() fonksiyonu, kullanıcılar tarafından yazılan yorumları formatlamakta. Bu işlemi yaparken ciddi bir regex ve karakter işlemleri gerçekleştirilmekte. formatting.php dosyasının 155. satırında aşağıdaki kod bulunmaktadır.

Regex’te bulunan problem ise [] köşeli parantez tagleri.  Örneğin aşağıdaki gibi bir yorumda bulunabilirsiniz.

Administrator tarafından yorumlar görüntülendiğinde aşağıdaki gibi bir HTML içerik oluşacaktır. Buraya kadar her şey normal.

wordpress-stored-xss-1

Peki saldırgan olarak aşağıdaki gibi bir yorum gelirse ?

wordpress-xss-exploit

Boom!

Sonuç

Bu saldırı karşısında administrator kullanıcısının yapabileceği bir şey malesef yok.

Çözüm olarak wordpress hesaplarınızı güncelleyin. Güncelleme imkanınız yoksa, yapmanız gereken tek şey comment formatting özelliğini kapatmak. Bunun içinde fonksiyonun başında return yapmanız yeterlidir.

Helpfull source : http://klikki.fi/adv/wordpress_update.html

  • Nuri BAŞ

    Selamun Aleyküm.

    Hocam eline sağlık. Güncellemelere dikkat etmek lazım.