
PoC di CVE-2025-22352
WordPress plugin
Nome del componente ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes
Versione vulnerabile <= 1.4.8
Slug del componente elex-bulk-edit-products-prices-attributes-for-woocommerce-basic
Link del componente https://wordpress.org/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/
Classe di vulnerabilità A3: Injection
Tipo di vulnerabilità SQL Injection (Blind SQL Injection)
Shop Manager o Amministratore
Il plugin ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes è un plugin che supporta la modifica in massa dei prodotti.
Quando si modificano i prodotti in massa tramite questo plugin, i target vengono selezionati mediante filtri e, durante questo processo, si verifica una vulnerabilità di SQL Injection quando alcuni dati trasmessi nelle richieste di filtraggio dei prodotti vengono inseriti direttamente nelle query SQL.
Tuttavia, i risultati delle query SQL non possono essere verificati direttamente e la vulnerabilità si manifesta come Blind SQL Injection, un metodo in cui i dati vengono estratti determinando se i risultati delle query sono veri o falsi.
Quando si esegue la funzione ('Anteprima prodotti filtrati') richiesta nella descrizione del PoC sopra, viene generato il seguente pacchetto.

Quando questo pacchetto viene richiesto, viene chiamata la funzione elex_bep_filter_products nel file /wp-content/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/includes/elex-ajax-apifunctions.php.
Il valore desired_price contenente il payload di SQL Injection dai dati della richiesta viene eseguito come query SQL attraverso la seguente sequenza.
Il valore desired_price contenente il payload di SQL Injection viene passato direttamente alla clausola di condizione della query e assegnato alla variabile $price_query.
Anche
product_title_texterangevengono passati direttamente alla query, ma poiché nel PoC abbiamo passato il payload di SQL Injection adesired_price, qui spiegheremo solodesired_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']} ";

Dopodiché, la variabile $price_query viene aggiunta alla variabile $sql (riga 1365, #1), e la variabile $sql insieme alla stringa e alla variabile inizializzano la variabile (riga 1379, #2)

Pertanto, il parametro della richiesta desired_price contenente il payload di SQL Injection è incluso in $main_query dell'istruzione $wpdb->prepare( '%1s', $main_query ). A questo punto, poiché lo specificatore di formato %1s passa il valore di $main_query così com'è, il payload di SQL Injection viene inserito nella query senza escaping, causando una vulnerabilità di SQL Injection.
⚠️ Il codice PoC è implementato per ottenere il nome del database sfruttando la vulnerabilità di Blind SQL Injection utilizzando un account di product manager.

Successivamente, inserisci il seguente comando per eseguire il codice PoC.
Moduli richiestirequests
python poc.py

AND$product_type_condition$main_queryLa variabile
$sqlviene inizializzata alla riga 1257 dielex-ajax-apifunctions.php.

Infine, la variabile $main_query viene passata come argomento alla funzione prepare come mostrato di seguito per eseguire una query sul database.