
PoC of CVE-2025-22510
Plugin WordPress
Nom du composant WC Price History for Omnibus
Version vulnérable <= 2.1.4
Slug du composant wc-price-history
Lien du composant https://wordpress.org/plugins/wc-price-history/
Classe de vulnérabilité A3: Injection
Type de vulnérabilité Injection d'objets PHP
Shop manager (Administrateur +)
Dans le plugin WC Price History for Omnibus version 2.1.4 et inférieure, les fichiers JSON peuvent être téléchargés via la section 'Import debug data' dans le menu 'Price History' du tableau de bord WooCommerce (/wp-admin/admin.php?page=wc-price-history). Le fichier JSON téléchargé est envoyé en tant que payload wc_price_history_import_file, et une vulnérabilité d'injection d'objets PHP se produit dans la valeur de la clé 'serialized' des données JSON. Grâce à cette vulnérabilité, un attaquant disposant des privilèges de Shop Manager peut injecter des objets PHP.
Bien que le plugin lui-même ne possède aucune chaîne POP connue, si des chaînes POP sont découvertes dans d'autres plugins ou thèmes sur le site WordPress cible, les attaquants peuvent effectuer une suppression arbitraire de fichiers, un vol d'informations sensibles et une exécution de code.
Préparez un site WordPress avec le plugin WC Price History for Omnibus version 2.1.4 ou inférieure installé et activé.
Pour activer ce plugin, le plugin WooCommerce doit d'abord être installé et activé.
Pour tester la vulnérabilité d'injection d'objets PHP, ajoutez la classe suivante PoC_POP_Chain_Object à la fin du fichier wp-config.php.
class PoC_POP_Chain_Object {
public $message = "";
public function __destruct() {
echo "<mark>Success PoP Chain</mark>";
echo "<br>";
echo "<mark>msg: ". $this->message ."</mark>";
}
}

Ensuite, créez un fichier avec les données JSON suivantes.
Dans ces données JSON, les données saisies dans la clé
serializedsont au format d'objet sérialisé PHP, ce qui crée une instance de la classePoC_POP_Chain_Objectprécédemment ajoutée au fichierwp-config.phpet assigne la chaîne 'Exploit !!' à la propriété message.
{
"serialized": "O:20:\"PoC_POP_Chain_Object\":1:{s:7:\"message\";s:10:\"Exploit !!\";}"
}
Lorsque vous téléchargez des données JSON via la section 'Import debug data' du menu 'Price History' dans le tableau de bord WooCommerce (/wp-admin/admin.php?page=wc-price-history) et que vous cliquez sur le bouton 'Import',
La fonction import_file() définie dans la classe Import du fichier /wp-content/plugins/wc-price-history/app/PriorPrice/Import.php est exécutée. Cette fonction récupère le payload de la requête wc_price_history_import_file contenant le fichier JSON, puis récupère les données avec la clé serialized de ces données JSON et effectue une désérialisation via la fonction maybe_unserialize.

Par conséquent, le payload de la requête wc_price_history_import_file est au format JSON, et une vulnérabilité d'injection d'objets PHP se produit lors du processus de désérialisation des données sérialisées avec la clé serialized sans validation.
Ensuite, naviguez vers le menu 'Price History' (/wp-admin/admin.php?page=wc-price-history) dans le tableau de bord WooCommerce. Dans la section 'Import debug data', sélectionnez le fichier JSON précédemment créé via le formulaire de téléchargement de fichier et cliquez sur le bouton 'Import' pour le télécharger.

À la suite de la requête de téléchargement, dans les données de réponse, vous pouvez voir que la méthode magique __destruct() de la classe PoC_POP_Chain_Object ajoutée à wp-config.php est exécutée, affichant le message suivant.
<mark>Success PoP Chain</mark>
<br>
<mark>msg: Exploit !!</mark>
