
PoC of CVE-2025-22352
Плагин 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)
Менеджер магазина ИЛИ Администратор
Плагин ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes — это плагин, поддерживающий массовое редактирование товаров.
При массовом редактировании товаров в этом плагине цели выбираются через фильтрацию, и в ходе этого процесса возникает уязвимость SQL-инъекции, когда некоторые данные, передаваемые в запросах фильтрации товаров, напрямую вставляются в SQL-запросы.
Однако результаты SQL-запросов невозможно напрямую проверить, и уязвимость существует в виде метода Blind SQL Injection, где данные извлекаются путем определения истинности или ложности результатов запроса.
При выполнении функции ('Preview Filtered Products'), описанной в PoC выше, генерируется следующий пакет.

При запросе этого пакета вызывается функция elex_bep_filter_products в файле /wp-content/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/includes/elex-ajax-apifunctions.php.
Значение desired_price, содержащее полезную нагрузку SQL-инъекции из данных запроса, выполняется как SQL-запрос через следующую последовательность.
Значение desired_price, содержащее полезную нагрузку SQL-инъекции, напрямую передается в условие запроса и присваивается переменной $price_query.
product_title_text,rangeтакже напрямую передаются в запрос, но поскольку в PoC мы передали полезную нагрузку SQL-инъекции вdesired_price, здесь мы объясним толькоdesired_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']} ";

После этого переменная $price_query добавляется к переменной $sql (строка 1365, #1), а переменная $sql вместе со строкой AND и переменной инициализируют переменную (строка 1379, #2).

Таким образом, параметр запроса desired_price, содержащий полезную нагрузку SQL-инъекции, включается в $main_query инструкции $wpdb->prepare( '%1s', $main_query ). В этот момент, поскольку спецификатор формата %1s передает значение $main_query как есть, полезная нагрузка SQL-инъекции вставляется в запрос без экранирования, что приводит к уязвимости SQL-инъекции.
⚠️ PoC-код реализован для получения имени базы данных путем эксплуатации уязвимости Blind SQL Injection с использованием учетной записи менеджера товаров.

Затем введите следующую команду для запуска PoC-кода.
Required modulesrequests
python poc.py

$product_type_condition$main_queryПеременная
$sqlинициализируется в строке 1257 файлаelex-ajax-apifunctions.php.

Наконец, переменная $main_query передается в качестве аргумента функции prepare, как показано ниже, для выполнения запроса к базе данных.