
CVE-2026-9848 is an Unauthenticated SQL Injection (SQLi) vulnerability affecting the WP Ticket (Customer Support Ticket System & Helpdesk) plugin for WordPress up to and including version 6.0.4.
CVE-2026-9848 هي ثغرة حقن SQL (SQLi) بدون مصادقة تؤثر على إضافة WP Ticket (نظام تذاكر دعم العملاء والمساعدة) لوردبريس حتى الإصدار 6.0.4 ضمناً. يحدث الخلل لأن المكوّن الإضافي يأخذ معامل البحث s الخاص بووردبريس ويدمجه مباشرة في جملة SQL LIKE داخل استعلام فرعي UNION دون استخدام $wpdb->prepare() أو تهريب مناسب. ونتيجة لذلك، يمكن لمهاجم عن بُعد التلاعب باستعلامات قاعدة البيانات واستخراج معلومات حساسة دون مصادقة.
| الخاصية | القيمة |
|---|---|
| المنتج | WP Ticket (نظام تذاكر دعم العملاء والمساعدة) |
| الإصدارات المتأثرة | ≤ 6.0.4 |
| الإصدار المُصلَح | 6.0.5 |
| المكوّن المتأثر | البحث في الواجهة الأمامية (معامل s) |
يربط المكوّن الإضافي فلتر posts_request الخاص بووردبريس عبر wp_ticket_com_posts_request(). أثناء بحث غير مصادق عليه في الواجهة الأمامية، يستدعي في النهاية الدالة emd_author_search_results()، التي تقرأ معامل البحث:
$query->query_vars['s']
في هذه المرحلة، يكون ووردبريس قد أزال الاقتباسات السحرية باستخدام wp_unslash(). بدلاً من معالجة عبارة SQL بشكل آمن باستخدام المُعاملات، يدمج المكوّن الإضافي مدخلات المستخدم الخام مباشرة في جملة SQL LIKE داخل استعلام فرعي UNION.
مفهومياً:
User searches website
│
▼
Search parameter "s" received
│
▼
Plugin concatenates value into SQL query
│
▼
No $wpdb->prepare()
│
▼
Database executes modified query
توجد الثغرة لأن المدخلات غير الموثوقة تُدمج في SQL باستخدام دمج السلاسل النصية (String Concatenation) بدلاً من الاستعلامات المُعاملات (Parameterized Queries).
يتمثل جوهر الثغرة في كيفية بناء المكوّن الإضافي لاستعلام SQL الرئيسي:
sql
SELECT * FROM wp_posts
WHERE post_title LIKE '%[attacker's input]%'
UNION [attacker's injected SQL]
Attacker
│
▼
Submits a crafted search request
│
▼
WordPress passes the "s" parameter
│
▼
WP Ticket builds SQL query using concatenation
│
▼
Database executes injected SQL
│
▼
Sensitive database information may be disclosed
يقوم زائر عادي بإجراء بحث على الموقع:
GET /?s=printer
يدمج المكوّن الإضافي قيمة معامل s في استعلام SQL يبحث عن المعلومات المتعلقة بالتذاكر.
نظرًا لأن المكوّن الإضافي يدمج قيمة البحث مباشرة في عبارة SQL بدلاً من استخدام الاستعلامات المُعاملات، يمكن لطلب بحث مصمم خصيصًا أن يغيّر منطق SQL المقصود. قد يستغل مهاجم غير مصادق عليه هذا السلوك لاسترجاع معلومات حساسة من قاعدة بيانات ووردبريس، مثل أسماء المستخدمين أو بيانات أخرى مخزنة. تعتمد النتيجة الدقيقة على تكوين التطبيق وصلاحيات قاعدة البيانات.
الآن، يمكن للمهاجم التلاعب بمعامل s لحقن استعلام SQL خاص به. على سبيل المثال، يمكنه إدخال:
' UNION SELECT user_login, user_pass FROM wp_users -- -
وهذا يجعل الاستعلام النهائي يبدو بهذا الشكل:
SELECT * FROM wp_posts WHERE post_title LIKE '%' UNION SELECT user_login, user_pass FROM wp_users -- -%'
قد يسمح الاستغلال الناجح للمهاجم بـ:
| المقياس | الدرجة |
|---|---|
| CVSS v3.1 (Wordfence CNA) | 7.5 (عالية) |
لم ينشر NVD بعد تقييمه الخاص وفق معيار CVSS.
ملاحظة: لم ينشر مطوّر الإضافة التنفيذ الكامل للكود الضعيف. يوضح ما يلي نمط البرمجة الضعيف.
$search = $query->query_vars['s'];
$sql = "
SELECT *
FROM tickets
WHERE title LIKE '%" . $search . "%'
";
$wpdb->get_results($sql);
يتم إنشاء عبارة SQL عن طريق دمج المدخلات التي يتحكم فيها المستخدم مباشرة في سلسلة الاستعلام. ونظرًا لأن هذه المدخلات ليست مُعاملات وليست مهربة، فإنها قد تغيّر بنية عبارة SQL.
$search = $query->query_vars['s'];
$sql = $wpdb->prepare(
"SELECT *
FROM tickets
WHERE title LIKE %s",
'%' . $search . '%'
);
$wpdb->get_results($sql);
يفصل استخدام $wpdb->prepare() بين صيغة SQL ومدخلات المستخدم. تتعامل قاعدة البيانات مع قيمة البحث كبيانات وليس كـ SQL قابل للتنفيذ، مما يمنع المهاجمين من تعديل بنية الاستعلام. يستبدل الإصلاح الرسمي في WP Ticket 6.0.5 بناء الاستعلام الضعيف بتنفيذ مُعاملات بشكل صحيح.