
PoC für CVE-2025-22710
WordPress-Plugin
Komponentenname WooCommerce Advanced Bulk Edit Products, Orders, Coupons, Any WordPress Post Type – Smart Manager
Betroffene Version <= 8.50.0
Komponenten-Slug smart-manager-for-wp-e-commerce
Komponenten-Link https://wordpress.org/plugins/smart-manager-for-wp-e-commerce/
Schwachstellenklasse A3: Injection
Schwachstellentyp SQL Injection
Administrator
Das Plugin WooCommerce Advanced Bulk Edit Products, Orders, Coupons, Any WordPress Post Type – Smart Manager (im Folgenden Smart Manager) ist ein Plugin, das die Massenbearbeitung und -anzeige aller Beitragstypen in WordPress ermöglicht.
Im Smart-Manager-Plugin Version 8.50.0 und niedriger tritt bei Verwendung der erweiterten Suchfunktion zum Anzeigen von Beiträgen eine SQL-Injection-Schwachstelle auf, da Filterwerte ohne Escape-Verarbeitung an Datenbankabfragen übergeben werden.
Die direkten Ergebnisse von SQL-Injection-Angriffen sind zwar nicht auf dem Bildschirm sichtbar, jedoch ist eine Blind-SQL-Injection durch Unterschiede in den Antwortwerten basierend auf True/False-Bedingungen möglich.
⚠️ Es muss mindestens ein Beitrag vorhanden sein, um den Unterschied in den Antwortwerten basierend auf True/False-Bedingungen beobachten zu können.
/wp-admin/admin.php?page=smart-manager).

' OR 1=1 )) # in das Texteingabeformular ein. Klicken Sie anschließend oben auf die Suchschaltfläche.

' OR 1=2 )) # in das Texteingabeformular eingeben, werden keine Beiträge abgerufen, da die Bedingung immer falsch ist (OR 1=2).

Bei der Ausführung der oben in der PoC-Beschreibung angeforderten Funktion 'Erweiterte Suche' wird das folgende Paket erzeugt, und die in der erweiterten Suche eingegebenen Filterwerte (Post Title, is, ' OR 1=1 )) #) werden in die Anforderungsdaten advanced_search_query eingegeben.
advanced_search_query=[{"condition":"OR","rules":[{"condition":"AND","rules":[{"type":"wp_posts.post_title","operator":"is","value":"' OR 1=1 )) #"}]}]}]

Wenn dieses Paket angefordert wird, wird die Funktion get_data_model in der Datei /wp-content/plugins/smart-manager-for-wp-e-commerce/classes/class-smart-manager-base.php aufgerufen und führt Datenbankabfragen in der folgenden Reihenfolge aus.
Wenn die Anforderungsdaten advanced_search_query vorhanden sind, wird die Funktion process_search_cond aufgerufen. Dabei werden die Anforderungsdaten advanced_search_query an den Wert mit dem Schlüssel search_query im Schlüssel-Wert-Paar-Argument übergeben.
search_query=[{"condition":"OR","rules":[{"condition":"AND","rules":[{"type":"wp_posts.post_title","operator":"is","value":"' OR 1=1 )) #"}]}]}]

Die aufgerufene Funktion process_search_cond iteriert über den Wert mit dem Schlüssel search_query, initialisiert den Filterwert Beitragstitel (post_tile) in der Variablen $search_col und initialisiert den Filterwert ' OR 1=1 )) #, der den SQL-Injection-Payload enthält, in der Variablen .
In der erweiterten Suchfunktion wird die Benutzereingabe (' OR 1=1 )) #) ohne Escape-Verarbeitung direkt in die Datenbankabfrage aufgenommen, was zu einer SQL-Injection-Schwachstelle führt. Diese Schwachstelle ermöglicht es Angreifern, beliebige SQL-Abfragen auszuführen, was zu ernsthaften Sicherheitsrisiken wie dem Offenlegen oder Manipulieren vertraulicher Informationen aus der Datenbank führen kann.
⚠️ Die PoC-Code-Implementierung fragt den Datenbanknamen ab, indem sie die SQL-Injection-Schwachstelle ausnutzt.
Öffnen Sie den PoC-Code in einem Editor und geben Sie die WordPress-Website-Adresse und die Administrator-Anmeldedaten ein.

Geben Sie dann den folgenden Befehl ein, um den PoC-Code auszuführen.
Erforderliches Modulrequests
python poc.py

$search_value
Die Variablen $search_col und $search_value werden an die Schlüssel search_col (=post_title) bzw. search_value (=' OR 1=1 )) #) des Arrays $search_params übergeben. Anschließend wird diese Variable $search_params als Wert mit dem Schlüssel search_params an die Funktion create_flat_table_search_query übergeben.

Anschließend definiert die Funktion create_flat_table_search_query die WHERE-Klausel der SQL-Abfrage, und an dieser Stelle wird der search_value (=' OR 1=1 )) #) des als Argument übergebenen Schlüssels search_params ohne Escape-Verarbeitung in die WHERE-Klausel aufgenommen.

Dann wird der Rückgabewert der Funktion create_flat_table_search_query (der den SQL-Injection-Payload enthält) als Argument an die Funktion process_flat_table_search_query übergeben.

Die Funktion process_flat_table_search_query erstellt mithilfe des empfangenen Arguments eine Datenbankabfrage und initialisiert die Variablen $select, $from und $where. Hier ist zu sehen, dass der SQL-Injection-Payload ohne Validierung direkt an die Variable $where übergeben wird.

Die Variablen $select, $from, $where werden direkt der Variablen $query_posts_search zugewiesen, und diese Variable wird letztendlich als Argument an die Funktion übergeben, die die Datenbankabfrage ausführt.
