WordPress için yaygın olarak kullanılan bir bağış ve bağış toplama aracı olan GiveWP eklentisi, ciddi bir güvenlik açığını gidermek için yakın zamanda önemli bir güncelleme geçirdi. Araştırmacı villu164 tarafından keşfedilen bu GiveWP açığı, Uzaktan Kod Yürütmeye (RCE) yol açabilen bir PHP Nesne Enjeksiyonu sorunudur.
Bu sorun, istismar edilirse yetkisiz kullanıcıların keyfi kod yürütmesine ve etkilenen WordPress sitelerindeki dosyaları silmesine izin verdi. Kritik niteliği göz önüne alındığında, kullanıcıların sitelerinin güvenli olduğundan emin olmak için eklentilerini derhal güncellemeleri şiddetle tavsiye edilir.
CVE-2024-5932 olarak tanımlanan GiveWP güvenlik açığı, GiveWP eklentisinin 3.14.1 sürümüne kadar olan tüm sürümlerini etkiliyor. Sorun, give_title parametresinden gelen güvenilmeyen girdinin seri hale getirilmesinde yatıyor ve bu da kimliği doğrulanmamış saldırganların PHP nesneleri enjekte etmesine olanak sağlıyor.
Eklentide bir PHP Nesne Enjeksiyonu (POP) zincirinin bulunması, bu saldırganların uzaktan kod yürütmesine ve dosyaları sunucudan silmesine olanak tanır.
GiveWP Güvenlik Açığı: Uzaktan Kod Çalıştırmaya PHP Nesne Enjeksiyonu
Wordfence Hata Ödül Programı’na göre, güvenlik açığı 10.0 CVSS puanı ile “Kritik” olarak sınıflandırılmıştır. Bu puan, saldırganların etkilenen site üzerinde tam kontrol elde edebilmesi nedeniyle istismarın potansiyel ciddiyetini yansıtır. Bu tür bir istismarın etkisi, yetkisiz dosya silme ve keyfi PHP kodu yürütme yeteneğini içerir ve bu da site güvenliği ve veri bütünlüğü için bir risk oluşturur.
Villu Orav, villu164 olarak bilinir, GiveWP güvenlik açığını 26 Mayıs 2024’te Wordfence Hata Ödülü Programı aracılığıyla bildirdi. Keşfi ona 4.998,00 $’lık bir ödül kazandırdı ve bulgularının kritik doğasını kabul etti. Araştırmacının raporu, GiveWP eklentisinin give_title parametresi aracılığıyla PHP Nesne Enjeksiyonuna karşı savunmasız olduğunu vurguladı. Bu parametrenin 3.14.1’e kadar olan sürümlerdeki serileştirme işlemi eklentiyi ciddi güvenlik risklerine maruz bıraktı.
Wordfence, raporu aldıktan sonra 13 Haziran 2024’te GiveWP’nin arkasındaki geliştiriciler olan StellarWP ekibiyle iletişime geçti. Hemen bir yanıt alınamayınca sorun 6 Temmuz 2024’te WordPress.org Güvenlik Ekibi’ne iletildi. Sonunda 7 Ağustos 2024’te GiveWP eklentisinin 3.14.2 sürümünde kritik bir yama yayınlandı.
GiveWP Güvenlik Açığının Teknik Ayrıntıları
PHP Nesne Enjeksiyonu güvenlik açıkları, bir PHP uygulaması yeterli doğrulama olmadan kullanıcı tarafından sağlanan verileri serileştirmediğinde ortaya çıkar ve potansiyel olarak zararlı PHP nesnelerini yürütür. Karmaşık veri yapılarını depolamak için kullanılan serileştirilmiş veriler, PHP nesnelerini içerebilir. Örneğin, serileştirilmiş veriler a:2:{s:11:”productName”;s:5:”apple”;s:7:”price”;i:10;} gibi görünebilir ve güvenli olmayan bir şekilde serileştirildiğinde kötü amaçlı nesneler ortaya çıkabilir.
Özellikleri ve yöntemleri olan sınıflardan oluşturulan PHP nesneleri, belirli koşullar altında yürütülen __destruct gibi “sihirli yöntemler” içerebilir. Bir saldırgan, wp-config.php gibi kritik dosyaları silmek için __destruct gibi yöntemleri kullanarak zararlı özelliklere sahip nesneler enjekte ederek bu tür güvenlik açıklarından yararlanabilir.
GiveWP eklentisindeki güvenlik açığı, bağış gönderimlerini işleyen give_process_donation_form() işlevini içerir. Bu işlev gönderi verilerinde doğrulama gerçekleştirir ancak kontrollerine give_title parametresini dahil etmeyi başaramaz. Sonuç olarak, bu parametrenin seri hale getirilmesi kötü amaçlı PHP nesnelerinin enjeksiyonuna izin verir.
give_process_donation_form() fonksiyonu bağış verilerini işler ve give_title parametresine göre kullanıcı verilerine değerler atayan give_get_donation_form_user() fonksiyonuyla etkileşime girer. Serileştirilmiş değerler de dahil olmak üzere kullanıcı verileri daha sonra kaydedilir ve daha fazla işlenir.
Sorun, eklentinin ödeme işleme sırasında serileştirilmiş verileri işleme biçimiyle daha da kötüleşiyor. _give_donor_title_prefix meta anahtarı, daha sonra Give_Payment sınıfında serileştirilmemiş hale getirilen serileştirilmiş verileri depolamak için kullanılır. Bu serileştirmemiş hale getirme işlemi, saldırganların bir PHP Nesne Enjeksiyonu (POP) zincirini istismar etmesine olanak tanıyan PHP Nesne Enjeksiyonu güvenlik açığının ortaya çıktığı yerdir.