
PoC für CVE-2025-22352
WordPress-Plugin
Komponentenname ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes
Betroffene Version <= 1.4.8
Komponenten-Slug elex-bulk-edit-products-prices-attributes-for-woocommerce-basic
Komponenten-Link https://wordpress.org/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/
Schwachstellenklasse A3: Injection
Schwachstellentyp SQL Injection (Blind SQL Injection)
Shop Manager ODER Administrator
Das Plugin ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes unterstützt die Stapelbearbeitung von Produkten.
Bei der Stapelbearbeitung von Produkten in diesem Plugin werden die Ziele über Filter ausgewählt. Während dieses Prozesses entsteht eine SQL-Injection-Schwachstelle, wenn einige der bei Produktfilteranfragen übertragenen Daten direkt in SQL-Abfragen eingefügt werden.
Die Ergebnisse der SQL-Abfrage können jedoch nicht direkt überprüft werden. Die Schwachstelle besteht daher als Blind SQL Injection, bei der Daten dadurch extrahiert werden, dass festgestellt wird, ob die Abfrageergebnisse wahr oder falsch sind.
Bei der Ausführung der in der obigen PoC-Beschreibung aufgerufenen Funktion ('Preview Filtered Products') wird das folgende Paket erzeugt.

Wenn dieses Paket gesendet wird, wird die Funktion elex_bep_filter_products in der Datei /wp-content/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/includes/elex-ajax-apifunctions.php aufgerufen.
Der desired_price-Wert, der die SQL-Injection-Payload aus den Anfragedaten enthält, wird über die folgende Abfolge als SQL-Abfrage ausgeführt.
Der desired_price-Wert, der die SQL-Injection-Payload enthält, wird direkt an die Bedingungsklausel der Abfrage übergeben und der Variablen $price_query zugewiesen.
product_title_text,rangewerden ebenfalls direkt an die Abfrage übergeben. Da wir die SQL-Injection-Payload im PoC jedoch andesired_priceübergeben haben, erklären wir hier nurdesired_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']} ";

Danach wird die Variable $price_query zur Variablen $sql hinzugefügt (Zeile 1365, #1). Die Variable $sql zusammen mit der Zeichenkette und der Variablen initialisiert die Variable (Zeile 1379, #2).

Daher ist der Anforderungsparameter desired_price, der die SQL-Injection-Payload enthält, in $main_query der Anweisung $wpdb->prepare( '%1s', $main_query ) enthalten. Da der Formatspezifizierer %1s den Wert von $main_query unverändert übergibt, wird die SQL-Injection-Payload ohne Escaping in die Abfrage eingefügt, was zu einer SQL-Injection-Schwachstelle führt.
⚠️ Der PoC-Code wurde implementiert, um den Datenbanknamen zu ermitteln, indem die Blind-SQL-Injection-Schwachstelle mithilfe eines Produktmanager-Kontos ausgenutzt wird.

Geben Sie anschließend den folgenden Befehl ein, um den PoC-Code auszuführen.
Erforderliche Modulerequests
python poc.py

AND$product_type_condition$main_queryDie Variable
$sqlwird in Zeile 1257 vonelex-ajax-apifunctions.phpinitialisiert.

Schließlich wird die Variable $main_query wie unten gezeigt als Argument an die prepare-Funktion übergeben, um eine Datenbankabfrage auszuführen.