
إثبات المفهوم لـ CVE-2025-22710
إضافة ووردبريس
اسم المكون WooCommerce Advanced Bulk Edit Products, Orders, Coupons, Any WordPress Post Type – Smart Manager
الإصدار القابل للاستغلال <= 8.50.0
معرف المكون smart-manager-for-wp-e-commerce
رابط المكون https://wordpress.org/plugins/smart-manager-for-wp-e-commerce/
فئة الثغرة A3: Injection
نوع الثغرة SQL Injection
مسؤول (Administrator)
إضافة Smart Manager (الاسم الكامل: WooCommerce Advanced Bulk Edit Products, Orders, Coupons, Any WordPress Post Type – Smart Manager) هي إضافة تسمح بتحرير وعرض جميع أنواع المنشورات في ووردبريس بشكل مجمّع.
في الإصدار 8.50.0 والإصدارات الأقدم من إضافة Smart Manager، عند استخدام وظيفة البحث المتقدم لعرض المنشورات، تحدث ثغرة حقن SQL (SQL Injection) لأن قيم التصفية تمر إلى استعلامات قاعدة البيانات دون معالجة الهروب (escape).
ومع ذلك، على الرغم من عدم إمكانية رؤية النتائج المباشرة لهجمات حقن SQL على الشاشة، إلا أن حقن SQL الأعمى (Blind SQL Injection) ممكن من خلال الاختلافات في قيم الاستجابة بناءً على الشروط الصحيحة/الخاطئة (true/false).
⚠️ يجب أن يوجد منشور واحد على الأقل لملاحظة الفرق في قيم الاستجابة بناءً على الشروط الصحيحة/الخاطئة.
/wp-admin/admin.php?page=smart-manager).

' OR 1=1 )) # في حقل الإدخال النصي. بعد ذلك، انقر على زر البحث في الأعلى.

' OR 1=2 )) # في حقل الإدخال النصي، فلن يتم استرداد أي منشور لأن الشرط خاطئ دائمًا (OR 1=2).

عند تنفيذ وظيفة "Advanced Search" المطلوبة في وصف PoC أعلاه، يتم إنشاء الحزمة التالية، ويتم إدخال قيم التصفية (Post Title، is، ' OR 1=1 )) #) التي تم إدخالها في البحث المتقدم في بيانات الطلب advanced_search_query.
advanced_search_query=[{"condition":"OR","rules":[{"condition":"AND","rules":[{"type":"wp_posts.post_title","operator":"is","value":"' OR 1=1 )) #"}]}]}]

عند طلب هذه الحزمة، يتم استدعاء الدالة get_data_model في الملف /wp-content/plugins/smart-manager-for-wp-e-commerce/classes/class-smart-manager-base.php، وتقوم بتنفيذ استعلامات قاعدة البيانات بالترتيب التالي.
إذا كانت بيانات الطلب advanced_search_query موجودة، فإنها تستدعي الدالة process_search_cond. في هذا الوقت، يتم تمرير بيانات الطلب advanced_search_query إلى القيمة ذات المفتاح search_query في وسيط زوج المفتاح-القيمة.
search_query=[{"condition":"OR","rules":[{"condition":"AND","rules":[{"type":"wp_posts.post_title","operator":"is","value":"' OR 1=1 )) #"}]}]}]

الدالة المستدعاة process_search_cond تتكرر عبر القيمة ذات المفتاح search_query، وتهيئ قيمة التصفية "Post Title" (post_title) في المتغير $search_col، وتهيئ قيمة التصفية ' OR 1=1 )) # التي تحتوي على حمولة حقن SQL في المتغير $search_value.
في وظيفة البحث المتقدم، يتم تضمين إدخال المستخدم (' OR 1=1 )) #) مباشرة في استعلام قاعدة البيانات دون معالجة هروب، مما يؤدي إلى ثغرة حقن SQL. تسمح هذه الثغرة للمهاجمين بتنفيذ استعلامات SQL عشوائية، مما قد يؤدي إلى مخاطر أمنية خطيرة مثل تسريب أو التلاعب بالمعلومات الحساسة من قاعدة البيانات.
⚠️ يقوم كود PoC باستعلام اسم قاعدة البيانات من خلال استغلال ثغرة حقن SQL.
افتح كود PoC في محرر وأدخل عنوان موقع ووردبريس وبيانات اعتماد المسؤول.

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


يتم تمرير المتغيرين $search_col و $search_value إلى مفتاحي المصفوفة $search_params وهما search_col (=post_title) و search_value (=' OR 1=1 )) #) على التوالي. بعد ذلك، يتم تمرير هذا المتغير $search_params كقيمة ذات مفتاح search_params إلى الدالة create_flat_table_search_query.

بعد ذلك، تقوم الدالة create_flat_table_search_query بتعريف جملة WHERE الخاصة باستعلام SQL، وفي هذه النقطة، يتم تضمين search_value (=' OR 1=1 )) #) من المفتاح search_params الذي تم تمريره كوسيط في جملة WHERE دون أي معالجة هروب.

ثم، يتم تمرير القيمة المرجعة للدالة create_flat_table_search_query (التي تحتوي على حمولة حقن SQL) كوسيط إلى الدالة process_flat_table_search_query.

تقوم الدالة process_flat_table_search_query ببناء استعلام قاعدة بيانات باستخدام الوسيط المستلم، وتهيئ المتغيرات $select و $from و $where. هنا، يمكننا أن نرى أن حمولة حقن SQL تمر مباشرة إلى المتغير $where دون أي تحقق.

يتم تعيين المتغيرات $select و $from و $where مباشرة إلى المتغير $query_posts_search، ويتم تمرير هذا المتغير في النهاية كوسيط إلى الدالة التي تنفذ استعلام قاعدة البيانات.
