
CVE-2025-67875 - ChurchCRM يحتوي على ثغرة XSS مخزنة عبر تعيين خصائص الشخص مما يؤدي إلى اختطاف جلسة المسؤول
| الحقل | التفاصيل |
|---|
| معرف CVE | CVE-2025-67875 |
| الخطورة | عالية |
| الاستشارة الأمنية | عرض الاستشارة |
| اكتشفها | Lukasz Rybak |
توجد ثغرة حرجة في تصعيد الامتيازات في ChurchCRM الإصدار 6.3.0 والإصدارات الأقدم. يمكن لمستخدم موثّق يتمتع بصلاحيات محددة من المستوى المتوسط ("تحرير السجلات" و"إدارة الخصائص والتصنيفات") حقن حمولة برمجة نصية عبر المواقع (XSS) مخزنة في ملف تعريف المسؤول. يتم تنفيذ الحمولة عندما يعرض المسؤول صفحة ملفه الشخصي، مما يسمح للمهاجم باختطاف جلسة المسؤول، وتنفيذ إجراءات إدارية، وتحقيق استيلاء كامل على الحساب.
هذه الثغرة هي مزيج من ثغرتين منفصلتين: مرجع كائن مباشر غير آمن (IDOR) يسمح لأي مستخدم بعرض ملف تعريف أي مستخدم آخر، وثغرة في التحكم بالوصول المكسور تسمح لمستخدم بصلاحيات تحرير عامة بتعديل خصائص سجل أي مستخدم آخر.
سلسلة الهجوم هي كما يلي:
IDOR في PersonView.php: لا يوجد فحص ترخيص في بداية PersonView.php. يمكن لأي مستخدم موثّق عرض صفحة ملف تعريف أي مستخدم آخر (مثل PersonView.php?PersonID=1 للمسؤول) بمجرد معرفة معرّفه.
التحكم بالوصول المكسور في PropertyAssign.php: وظيفة "تعيين خاصية جديدة"، التي يمكن الوصول إليها من صفحة PersonView.php الخاصة بمستخدم آخر، توجّه المستخدم إلى PropertyAssign.php. يتحقق هذا السكربت بشكل صحيح من امتلاك المستخدم للصلاحية العامة isEditRecordsEnabled()، لكنه يفشل في إجراء فحص ترخيص على مستوى الكائن للتحقق مما إذا كان المستخدم مخوّلًا لتعديل PersonID المحدد في عنوان URL. يسمح هذا لمستخدم لديه صلاحية "تحرير السجلات" بتعديل خصائص أي شخص في النظام، بما في ذلك المسؤول.
ناقل XSS المخزنة: يمكن للمهاجم استغلال هاتين الثغرتين للانتقال إلى صفحة ملف تعريف المسؤول واستخدام نموذج "تعيين خاصية جديدة" لحفظ حمولة XSS خبيثة في سجل المسؤول. لا يتم تطهير حقل Value للخصائص النصية بشكل صحيح عند الإدخال (يتم تطبيق strip_tags فقط، وهو لا يزيل معالجات الأحداث) ولا يتم ترميزه عند الإخراج، مما يؤدي إلى XSS مخزنة.
src/PropertyAssign.php): يحفظ قيمة الخاصية بعد تطبيق strip_tags() فقط، مما يسمح بسمات معالجات الأحداث مثل onerror.src/PersonView.php): تعرض قيمة الخاصية المخزنة مباشرةً في HTML بدون htmlspecialchars()، مما يتسبب في تنفيذ الحمولة.
// src/PersonView.php, line ~722
<td><?= $r2p_Value ?></td> // Vulnerable: Raw output
يوضح إثبات المفهوم هذا كيف يمكن لمستخدم بصلاحيات محددة من المستوى المتوسط حقن حمولة XSS مخزنة في ملف تعريف المسؤول الرئيسي.
المتطلبات الأساسية:
Edit RecordsManage Properties and Classificationsالسيناريو:

PersonID=1.
http://localhost:8101/PersonView.php?PersonID=1
PersonView.php).
PropertyAssign.php).

PersonView.php?PersonID=1)، سيتم تنفيذ الحمولة فورًا، وستظهر نافذة تنبيه. يمكن للمهاجم استخدام حمولة أكثر تقدمًا لسرقة ملف تعريف ارتباط الجلسة الخاص بالمسؤول.

هذه ثغرة حرجة في تصعيد الامتيازات. تسمح لمستخدم بصلاحيات محددة ومرفوعة (ولكنها غير إدارية) بالحصول على سيطرة كاملة على حساب المسؤول. من خلال اختطاف جلسة المسؤول، يمكن للمهاجم تنفيذ أي إجراء متاح للمسؤول، بما في ذلك إنشاء حسابات مسؤول جديدة، وحذف البيانات، ومن المحتمل دمج هذا مع ثغرات أخرى لتحقيق اختراق كامل للخادم.
تم الإبلاغ بواسطة: Łukasz Rybak
تم الكشف عن هذه الثغرة (CVE) بشكل مسؤول وفقًا لممارسات الكشف المنسق عن الثغرات الأمنية. المعلومات المقدمة هنا هي لأغراض تعليمية ودفاعية فقط.