CVE-2023-2249: Wordpress Wpforo Eklentisi

Bu güvenlik açığı, 8,8'lik bir CVSS puanı kaydetti ve eklentiyi birden çok saldırı vektörüne maruz bıraktı. Yerel Dosya Dahil Etme (LFI), Sunucu Tarafı İstek Sahteciliği (SSRF) ve PHP Arşivi (PHAR) serisini kaldırmayı içerir. Uzaktan Kod Yürütmeye yol açma potansiyeli vardır. Özellikle, bu sorun 2.1.7'ye kadar olan sürümleri etkiler, ancak sonraki güncellemelerde giderilmiştir.
Kamuya açık bir Kavram Kanıtı (POC) bulunmadığından, güvenlik açığının temel neden analizini yapmayı ve bir kavram kanıtı sunmayı amaçlıyoruz.

Yama Farkına Girin

WordPress eklentileri açık kaynak olduğundan, farklılık nispeten kolay olmalıdır. Neyse ki, hayatımızı kolaylaştırmak için, CVE kimliğinin NIST referansları , eklentinin 'classes/Actions.php' dosyasına işaret ediyor. 2.17 ve 2.18 sürümlerini aşağıda gösterildiği gibi farklılaştırdık:

1.png


Şekil 1: Karşılaştırılan sürümler

2932a77358e446d42.png

Şekil 2: Değiştirilen işlevler


Dosyanın güvenlik açığı bulunan ve yamalı sürümleri arasında yalnızca 2 işlevin değiştirildiğini görebiliriz; bunlar, profil resmi yüklemeyle ilgili işlevler gibi görünen 'profiles_default_cover_upload' ve 'profile_cover_upload'.


3.png

Şekil 3: Güvenlik açığının NIST açıklaması

Ayrıca, NIST açıklamasından, 'file_get_contents'ın güvenlik açığına neden olan herhangi bir temizleme yapılmadan kullanıldığını biliyoruz. Farkta da aynı şeyin yamalandığını görebiliriz, bu yüzden doğru yoldayız.

4e1d6a194c5549007.png

Şekil 4: image_blob verileri işleniyor

statik kod analizinden, 'image_blob' parametresi olarak geçirilen profil resmi verileri için kullanıcı girişi, belirli bir formata uymuyorsa, else bloğunun bir parçası olarak 'file_get_contents'a iletilir gibi görünüyor. Daha fazla analize geçmeden önce, dinamik davranışı anlamak için savunmasız bir ortam oluşturalım.

Exploit'i Çalıştıralım

WordPress'i kurmak nispeten kolay olmalı, sayısız çevrimiçi öğretici var. İşleri hızlandırmak için bir liman işçisi örneği kullanacağız.
    • Buradan bir bitnami WordPress docker örneği kuruyoruz .
    • Blogu yazarken, eklentinin WordPress mağazasındaki savunmasız sürümü zaten değiştirilmişti, ancak eklentinin savunmasız sürümünü buradan indirebiliriz .
    • Eklenti dosyasını aşağıdaki gibi yükleyip aktif hale getirebiliriz.



5c261b2f7e8b0216b.png

Şekil 5: Eklentileri Wordpress'e Yükleme

Eklenti etkinleştirildikten sonra, ana web sayfasında aşağıdaki gibi yeni bir 'Forumlar' düğmesi bulunmalıdır.

6.png

Şekil 6: Forumlar seçeneği

Exploit için ne tür bir izin gerektiğini daha sonra anlayabiliriz, şimdilik forum alanında admin olarak giriş yapalım ve inceleyelim.


7.png

Şekil 7: Oturum Açma

8.png


Güvenlik açığının profil resmi yükleme işlevinde olduğunu önceden bildiğimiz için, profil bölümünü inceliyoruz ve bir resim yüklemeyi deniyoruz (aşağıdaki benim kedim)
Gerçekte neler olup bittiğini incelemek için BurpSuite proxy'sini çalıştırır ve trafiği inceleriz.

9.png


Şekil 9: BurpSuite'ten Yanıt İsteyin

Eylem adına 'wpforo_profile_cover_upload' (adlandırma kuralı gibi görünen wpforo başına önceden eklenen işlev adı) ve ayrıca kod analizimiz sırasında gördüğümüz gibi 'image_blob' parametresine sahip olduğumuz için aslında bitiş noktasına ulaştığımızı doğrulayabiliriz. Blobun değerinin kodunu çözersek, bunun dosya biçimi (image/jpeg), kodlama (base64) ve virgülle ayrılmış gerçek verilerden oluştuğunu görebiliriz.


10.png

Şekil 10: image_blob verilerinin kodu çözüldü

Koda tekrar bakarsak, verileri virgülle ayırmaya çalışır ve ikinci bir dizin yoksa, her şeyi 'get_file_contents'a geçirir, böylece 'image_blob' parametresinin bir parçası olarak virgül dışında istediğimizi iletebiliriz ve kodun savunmasız bölümüne ulaşıp dosyayı aşağıda gösterildiği gibi getirmelidir -

12.png

Şekil 11: Sömürü

Aynı isteği diğer savunmasız olan eylem adını 'wpforo_profiles_default_cover_upload' olarak değiştirerek deneyebiliriz ve orada da başarı elde ederiz. Görüntü olarak saklandığından dosya içeriğini geri alamıyoruz. "profiles_default_cover_upload" eylemi için veriler alınıyor, çünkü bu eylem onu settings_custom_default_cover.jpg statik adıyla kaydediyor

13.png

Şekil 12: Sabit kodlanmış görüntü yolu

Böylece, aşağıdaki gibi bir kıvrılma isteği göndererek içeriği kolayca alabiliriz

14.png


Şekil 13: /etc/passwd içeriği alındı

Açıktan yararlanmayı https://github.com/ixiacom/CVE-2023-2249 adresindeki bir kavram kanıtı koduyla uygulayabiliriz . 'file_get_contents' uzak yolları da alabildiğinden, açıktan yararlanma, kavram kanıtımızla getirilen bir dosyayı dağıttığımız aşağıdaki gibi dahili uç noktalara ulaşmak için kullanılabilir.

15.png

Şekil 14: Barındırılan dahili dosyaların taklit edilmesi


17.png

Şekil 15: Dahili dosyaları getirebilen SSRF

Yukarıdaki kavram kanıtı ekran görüntüsünde, yalnızca bir abone olan ve aynı zamanda çalışan bir kullanıcının kimlik bilgilerini sağladık, bu nedenle çok az ayrıcalık gerekir.

18.png

Şekil 16: kurban testi, düşük ayrıcalıklı kullanıcı




c2g50ce.gif









 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.