
PoC de CVE-2025-22352
Plugin WordPress
Component name ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes
Vulnerable version <= 1.4.8
Component slug elex-bulk-edit-products-prices-attributes-for-woocommerce-basic
Component link https://wordpress.org/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/
Vulnerability class A3: Injection
Vulnerability type SQL Injection (Blind SQL Injection)
Gestionnaire de boutique ou administrateur
Le plugin ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes est un plugin qui prend en charge la modification en masse des produits.
Lors de la modification en masse des produits dans ce plugin, les cibles sont sélectionnées par filtrage, et au cours de ce processus, une vulnérabilité d'injection SQL survient lorsque certaines données transmises lors des requêtes de filtrage des produits sont directement insérées dans les requêtes SQL.
Cependant, les résultats des requêtes SQL ne peuvent pas être vérifiés directement, et la vulnérabilité se manifeste sous la forme d'une injection SQL aveugle (Blind SQL Injection) où les données sont extraites en déterminant si les résultats des requêtes sont vrais ou faux.
Lors de l'exécution de la fonction ('Preview Filtered Products') demandée dans la description du PoC ci-dessus, le paquet suivant est généré.

Lorsque ce paquet est demandé, la fonction elex_bep_filter_products du fichier /wp-content/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/includes/elex-ajax-apifunctions.php est appelée.
La valeur desired_price contenant la charge utile d'injection SQL provenant des données de la requête est exécutée comme requête SQL selon la séquence suivante.
La valeur desired_price contenant la charge utile d'injection SQL est directement transmise à la clause de condition de la requête et assignée à la variable $price_query.
product_title_text,rangesont également transmis directement à la requête, mais comme nous avons passé la charge utile d'injection SQL àdesired_pricedans le PoC, nous n'expliquerons ici quedesired_price.
// elex-ajax-apifunctions.php at line 1280
$price_query = " AND meta_key='_regular_price' AND meta_value {$filter_range} {$data_to_filter['desired_price']} ";

Ensuite, la variable $price_query est ajoutée à la variable $sql (ligne 1365, #1), et la variable $sql avec la chaîne et la variable initialisent la variable (ligne 1379, #2).

Par conséquent, le paramètre de requête desired_price contenant la charge utile d'injection SQL est inclus dans $main_query de l'instruction $wpdb->prepare( '%1s', $main_query ). À ce stade, comme le spécificateur de format %1s transmet la valeur $main_query telle quelle, la charge utile d'injection SQL est insérée dans la requête sans échappement, ce qui entraîne une vulnérabilité d'injection SQL.
⚠️ Le code PoC est implémenté pour obtenir le nom de la base de données en exploitant la vulnérabilité d'injection SQL aveugle à l'aide d'un compte de gestionnaire de produits.

Ensuite, exécutez la commande suivante pour lancer le code PoC.
Required modulesrequests
python poc.py

AND$product_type_condition$main_queryLa variable
$sqlest initialisée à la ligne 1257 deelex-ajax-apifunctions.php.

Enfin, la variable $main_query est passée comme argument à la fonction prepare comme indiqué ci-dessous pour exécuter une requête de base de données.