
PoC de CVE-2025-22352
Plugin de WordPress
Nombre del componente ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes
Versión vulnerable <= 1.4.8
Slug del componente elex-bulk-edit-products-prices-attributes-for-woocommerce-basic
Enlace del componente https://wordpress.org/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/
Clase de vulnerabilidad A3: Injection
Tipo de vulnerabilidad SQL Injection (Blind SQL Injection)
Gerente de tienda o Administrador
El plugin ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes es un plugin que permite la edición masiva de productos.
Al editar productos de forma masiva con este plugin, los objetivos se seleccionan mediante filtros y, durante este proceso, se produce una vulnerabilidad de inyección SQL cuando algunos datos transmitidos en las peticiones de filtrado de productos se insertan directamente en las consultas SQL.
Sin embargo, los resultados de las consultas SQL no pueden verificarse directamente, por lo que la vulnerabilidad se manifiesta como un método de inyección SQL ciega (Blind SQL Injection) en el que los datos se extraen determinando si los resultados de la consulta son verdaderos o falsos.
Al ejecutar la función ('Preview Filtered Products') solicitada en la descripción del PoC anterior, se genera el siguiente paquete.

Cuando se solicita este paquete, se llama a la función elex_bep_filter_products del archivo /wp-content/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/includes/elex-ajax-apifunctions.php.
El valor desired_price que contiene el payload de inyección SQL de los datos de la petición se ejecuta como una consulta SQL mediante la siguiente secuencia.
El valor desired_price que contiene el payload de inyección SQL se pasa directamente a la cláusula de condición de la consulta y se asigna a la variable $price_query.
product_title_text,rangetambién se pasan directamente a la consulta, pero como en el PoC pasamos el payload de inyección SQL adesired_price, aquí solo explicaremosdesired_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']} ";

Después, la variable $price_query se añade a la variable $sql (línea 1365, #1), y la variable $sql junto con la cadena AND y la variable inicializan la variable (línea 1379, #2)

Por lo tanto, el parámetro de petición desired_price que contiene el payload de inyección SQL se incluye en $main_query de la sentencia $wpdb->prepare( '%1s', $main_query ). En este punto, dado que el especificador de formato %1s pasa el valor de $main_query tal cual, el payload de inyección SQL se inserta en la consulta sin escaparse, lo que da lugar a una vulnerabilidad de inyección SQL.
⚠️ El código PoC está implementado para obtener el nombre de la base de datos explotando la vulnerabilidad de inyección SQL ciega mediante una cuenta de gerente de producto.

A continuación, ejecuta el siguiente comando para lanzar el código PoC.
Módulos necesariosrequests
python poc.py

$product_type_condition$main_queryLa variable
$sqlse inicializa en la línea 1257 deelex-ajax-apifunctions.php.

Finalmente, la variable $main_query se pasa como argumento a la función prepare como se muestra a continuación para ejecutar una consulta a la base de datos.