
PoC of CVE-2025-22352
Plugin WordPress
Nome do componente ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes
Versão vulnerável <= 1.4.8
Slug do componente elex-bulk-edit-products-prices-attributes-for-woocommerce-basic
Link do componente https://wordpress.org/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/
Classe de vulnerabilidade A3: Injection
Tipo de vulnerabilidade SQL Injection (Blind SQL Injection)
Gerente de Loja OU Administrador
O plugin ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes é um plugin que suporta edição em massa de produtos.
Ao editar produtos em massa neste plugin, os alvos são selecionados através de filtragem, e durante este processo, ocorre uma vulnerabilidade de SQL Injection quando alguns dados transmitidos durante as requisições de filtragem de produtos são inseridos diretamente em consultas SQL.
No entanto, os resultados da consulta SQL não podem ser verificados diretamente, e a vulnerabilidade existe como um método de Blind SQL Injection onde os dados são extraídos através da determinação se os resultados da consulta são verdadeiros ou falsos.
Ao executar a função ('Preview Filtered Products') solicitada na descrição do PoC acima, o seguinte pacote é gerado.

Quando este pacote é solicitado, a função elex_bep_filter_products no arquivo /wp-content/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/includes/elex-ajax-apifunctions.php é chamada.
O valor desired_price contendo o payload de SQL Injection dos dados da requisição é executado como uma consulta SQL através da seguinte sequência.
O valor desired_price contendo o payload de SQL Injection é passado diretamente para a cláusula de condição da consulta e atribuído à variável $price_query.
product_title_text,rangetambém são passados diretamente para a consulta, mas como passamos o payload de SQL Injection paradesired_priceno PoC, explicaremos apenasdesired_priceaqui.
// elex-ajax-apifunctions.php at line 1280
$price_query = " AND meta_key='_regular_price' AND meta_value {$filter_range} {$data_to_filter['desired_price']} ";

Depois disso, a variável $price_query é adicionada à variável $sql (linha 1365, #1), e a variável $sql juntamente com a string AND e a variável inicializam a variável (linha 1379, #2)

Portanto, o parâmetro de requisição desired_price contendo o payload de SQL Injection está incluído em $main_query da instrução $wpdb->prepare( '%1s', $main_query ). Neste ponto, como o especificador de formato %1s passa o valor $main_query como está, o payload de SQL Injection é inserido na consulta sem escape, resultando em uma vulnerabilidade de SQL Injection.
⚠️ O código PoC é implementado para obter o nome do banco de dados explorando a vulnerabilidade de Blind SQL Injection usando uma conta de gerente de produto.

Em seguida, execute o seguinte comando para rodar o código PoC.
Módulos necessáriosrequests
python poc.py

$product_type_condition$main_queryA variável
$sqlé inicializada na linha 1257 deelex-ajax-apifunctions.php.

Finalmente, a variável $main_query é passada como argumento para a função prepare conforme mostrado abaixo para executar uma consulta ao banco de dados.