
إثبات المفهوم لـ CVE-2025-22352
إضافة ووردبريس
اسم المكوّن ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes
النسخة المتأثرة <= 1.4.8
Slug المكوّن elex-bulk-edit-products-prices-attributes-for-woocommerce-basic
رابط المكوّن https://wordpress.org/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/
فئة الثغرة A3: Injection
نوع الثغرة SQL Injection (حقن SQL أعمى)
مدير المتجر OR المسؤول
إضافة ELEX WooCommerce Advanced Bulk Edit Products, Prices & Attributes هي إضافة تدعم التحرير الجماعي للمنتجات.
عند التحرير الجماعي للمنتجات في هذه الإضافة، يتم تحديد الأهداف عبر التصفية (Filtering)، وخلال هذه العملية تحدث ثغرة حقن SQL (SQL Injection) عندما يتم إدراج بعض البيانات المرسلة أثناء طلبات تصفية المنتجات مباشرةً في استعلامات SQL.
ومع ذلك، لا يمكن التحقق من نتائج استعلام SQL مباشرةً، وتوجد الثغرة بأسلوب حقن SQL الأعمى (Blind SQL Injection) حيث يتم استخراج البيانات من خلال تحديد ما إذا كانت نتائج الاستعلام صحيحة أم خاطئة.
عند تنفيذ الوظيفة ('Preview Filtered Products') المطلوبة في وصف PoC أعلاه، يتم إنشاء الحزمة (packet) التالية.

عند طلب هذه الحزمة، يتم استدعاء الدالة elex_bep_filter_products في الملف /wp-content/plugins/elex-bulk-edit-products-prices-attributes-for-woocommerce-basic/includes/elex-ajax-apifunctions.php.
يتم تنفيذ قيمة desired_price التي تحتوي على حمولة حقن SQL (payload) من بيانات الطلب كاستعلام SQL عبر التسلسل التالي.
يتم تمرير قيمة desired_price التي تحتوي على حمولة حقن SQL مباشرةً إلى جملة شرط الاستعلام وتُعيَّن للمتغير $price_query.
يتم أيضًا تمرير
product_title_textوrangeمباشرةً إلى الاستعلام، ولكن بما أننا مررنا حمولة حقن SQL إلىdesired_priceفي PoC، فسنشرحdesired_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']} ";

بعد ذلك، تتم إضافة المتغير $price_query إلى المتغير $sql (السطر 1365، #1)، ويقوم المتغير $sql مع السلسلة AND والمتغير بتهيئة المتغير (السطر 1379، #2).

لذلك، يتم تضمين معامل الطلب desired_price الذي يحتوي على حمولة حقن SQL في $main_query الخاص بجملة $wpdb->prepare( '%1s', $main_query ). عند هذه النقطة، وبما أن مُحدِّد التنسيق %1s يمرر قيمة $main_query كما هي، يتم إدراج حمولة حقن SQL في الاستعلام دون تهريب (escaping)، مما يؤدي إلى ثغرة حقن SQL.
⚠️ تم تنفيذ كود PoC للحصول على اسم قاعدة البيانات عبر استغلال ثغرة حقن SQL الأعمى باستخدام حساب مدير منتجات.

بعد ذلك، أدخل الأمر التالي لتشغيل كود PoC.
الوحدات المطلوبةrequests
python poc.py

$product_type_condition$main_queryتتم تهيئة المتغير
$sqlفي السطر 1257 من ملفelex-ajax-apifunctions.php.

أخيرًا، يتم تمرير المتغير $main_query كوسيط إلى دالة prepare كما هو موضح أدناه لتنفيذ استعلام قاعدة بيانات.