
PoC zu CVE-2025-22652
WordPress-Plugin
Component name Payment Forms for Paystack
Vulnerable version <= 4.0.1
Component slug payment-forms-for-paystack
Component link https://wordpress.org/plugins/payment-forms-for-paystack/
Vulnerability class A3: Injection
Vulnerability type SQL Injection
Administrator
Im Plugin Payment Forms for Paystack, Version 4.0.1 und niedriger, besteht eine SQL-Injection-Schwachstelle aufgrund unzureichender Eingabevalidierung und Escape-Verarbeitung des URL-Parameters order beim Betrachten der Zahlungsliste in Zahlungsformularen. Dadurch kann ein Angreifer mit Administratorrechten alle Informationen aus der Datenbank der Zielseite extrahieren.
Obwohl diese Schwachstelle keine direkten Datenabfragen erlaubt, können Daten mittels zeitbasierter SQL-Injection-Techniken extrahiert werden.
Bereiten Sie eine WordPress-Seite mit installiertem Plugin Payment Forms for Paystack, Version 4.0.1 oder niedriger, vor.
Da Sie ein Paystack-Formular hinzufügen müssen, um die Abfrage durchzuführen, fügen Sie ein Formular über das Menü zum Hinzufügen von Paystack-Formularen hinzu (wp-admin/post-new.php?post_type=paystack_form).

Nach dem Hinzufügen des Formulars können Sie den ShortCode überprüfen und die Attribut-ID dieses ShortCodes in den URL-Parameter form in der folgenden URL einfügen, bevor Sie darauf zugreifen.
http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=<Insertion Point>&orderby=&order=,+(select+sleep(5)+from+dual+where+1=1)
Lautet der ShortCode beispielsweise [pff-paystack id="13"], greifen Sie auf http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=13&orderby=&order=,+(select+sleep(5)+from+dual+where+1=1) zu.

Da die Bedingungsklausel where 1=1 im SQL-Injection-Payload, das in den URL-Parameter order eingefügt wurde, stets wahr ist, können Sie bestätigen, dass die Funktion ausgeführt wird und die Antwort nach 5 Sekunden eintrifft.
Bei der Anfrage an die URL, in der die Schwachstelle auftritt, wird die Funktion get_payments_by_id in der Datei /wp-content/plugins/payment-forms-for-paystack/includes/classes/class-helpers.php aufgerufen.
An dieser Stelle wird der URL-Parameter order direkt in die SQL-Abfrage eingefügt und ohne jegliche Eingabevalidierung oder Escape-Verarbeitung in der Datenbank ausgeführt.

Daher wird bei Einfügung des SQL-Injection-Payloads , (select sleep(5) from dual where 1=1) in den URL-Parameter order die unten gezeigte SQL-Abfrage ausgeführt. Dabei gibt es je nach Wahrheitswert der Bedingungsklausel im Payload einen Unterschied in der Antwortzeit, und dieser Zeitunterschied kann zur Extraktion von Daten aus der Datenbank genutzt werden.
SELECT * FROM %i WHERE post_id = %d AND paid = %s ORDER BY %i , (select sleep(5) from dual where 1=1)
Öffnen Sie den PoC-Code in einem Editor und geben Sie die WordPress-Seitenadresse sowie die Administrator-Anmeldedaten ein.

Required modulerequests
python poc.py

sleep(5)
Ändert man dagegen die Bedingungsklausel im SQL-Injection-Payload, das in order eingefügt wurde, auf where 1=2, kann man bestätigen, dass die Antwort sofort eintrifft.
http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=<Insertion Point>&orderby=&order=,+(select+sleep(5)+from+dual+where+1=2)
Lautet der ShortCode beispielsweise [pff-paystack id="13"], greifen Sie auf http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=13&orderby=&order=,+(select+sleep(5)+from+dual+where+1=2) zu.
