
Moodle 5.2.3 - عالي - عن بُعد - مسار - Blackboard img src ينسخ الملفات خارج شجرة الاستيراد
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · moodle-blackboard-img
Moodle LMS 5.2.3 - Moodle
الفئة: قراءة ملف الوصول: عن بُعد
qformat_blackboard_six_base::text_field يدمج img src في $this->filebase بدون PARAM_PATH. ثم يقوم store_file_for_text_field بنسخ ذلك المسار إلى منطقة ملفات المسودة الخاصة بالمستخدم. أما get_filecontent من نفس العائلة فيحتوي بالفعل باستخدام clean_param($path, PARAM_PATH). وقد احتوى MSA-26-0012 استيراد نشاط قاعدة البيانات باستخدام PARAM_FILE. لم يكن img src الخاص بـ Blackboard ضمن تلك المجموعة.
المعلّم القادر على استيراد ملف Blackboard zip يزرع <img src="https://raw.githubusercontent.com/html/config.php">. وتكون "الصورة" في المسودة هي config.php. لا يمكن للطلاب الاستيراد.
| المعرّف | لا يوجد CVE بعد |
| CWE | CWE-22 / CWE-73 |
| CVSS | متوسط: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| المنتج | Moodle |
| المتأثر | 5.2.3 وسم v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116) |
| المصادقة | معلّم (بنك الأسئلة / استيراد Blackboard للدرس) |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
الكاتب: معلّم قادر على استيراد ملف Blackboard zip إلى بنك الأسئلة (أو الدرس). الجائزة النموذجية هي config.php (كلمة مرور قاعدة البيانات) بصلاحيات مستخدم PHP. ليس RCE إلا إذا سلسلوا ثغرة متبقية ثانية. ليس LPE.
| الصلاحية | الطريقة / نقطة الوصول | الاستطلاع / السلامة / التوافر | مُثبت مختبريًا أو مُستنتج |
|---|---|---|---|
قراءة ملف يمكن لمستخدم PHP فتحه، عبر ../ في img src | text_field يدمج $this->filebase . '/' . $path؛ وstore_file_for_text_field ينسخ إلى منطقة المسودة | استطلاع (بايتات الملف) | مُثبت مختبريًا. بايتات المسودة تطابق /var/www/html/config.php وتحتوي على MOODLE-BLACKBOARD-IMG-WITNESS |
| تنزيل تلك المسودة كـ "صورة" | itemid المسودة + اسم ملف @@PLUGINFILE@@ المُعاد كتابته | استطلاع | مُثبت مختبريًا. أعاد GET /draft 298 بايت، وsha256 مطابق لـ config.php |
| أي شخص يمكنه لاحقًا فتح السؤال المُستورد | نفس المسودة / pluginfile | استطلاع | مُستنتج. توقف المختبر عند مطابقة مسودة المعلّم |
| استيراد الطالب | نفس ملف zip، role=student | لا ينطبق | مُثبت مختبريًا مغلق. HTTP 403 teacher-only |
نفس المسار عبر clean_param($path, PARAM_PATH) | أداة jail=1 | لا ينطبق | مُثبت مختبريًا مغلق. لا مطابقة، لا شاهد، يبقى المسار تحت filebase |
| PHP RCE / OS LPE | لا ينطبق | لا ينطبق | مغلق. هذه الثغرة المتبقية تنسخ بايتات الملف إلى مسودة. لا تنفذها |
Moodle الافتراضي بدون استيراد Blackboard ليس هذه الثغرة. MSA-22-0016 نظّف baseurl فقط.
ثغرات متبقية بنفس الإصدار: enrol_database SQLi، grades feedback IDOR، hidden grade items.
ثبّتُ moodle/moodle v5.2.3 بعد MSA-26-0042/0043. احتوى MSA-26-0012 استيراد نشاط قاعدة البيانات. ثم انتقلت إلى Blackboard لأن get_filecontent() كان يعرف بالفعل عن PARAM_PATH بينما text_field() لا يزال يقوم بدمج خام.
الطرق الخاطئة المسجلة مسبقًا: اعتبار استيراد الطالب هو التسريب (إنه 403)؛ تسمية هذا RCE لأن الملف المنسوخ هو PHP (المسودة تخزّن البايتات، ولا تقوم بـ include لها)؛ افتراض أن MSA-22-0016 أنهى المهمة (baseurl فقط). reverse shell. مسرحية.
أداة مطابقة لـ text_field / store_file_for_text_field في الإصدار المثبّت، وليس تطبيق Moodle PHP كاملًا. how=gadget.
python3 moodle-blackboard-img-Abraxas-Labs.py
أو
cd lab
./run.sh
الهدف فقط http://127.0.0.1:19560. مشروع Compose باسم moodle-blackboard-img. يتم تفكيك الحزمة بعد التشغيل.
SUCCESS moodle-blackboard-img how=gadget pin=v5.2.3 teacher-import=yes draft-match-config=yes student=403 param-path-jail=yes MOODLE-BLACKBOARD-IMG-WITNESS
clean_param($path, PARAM_PATH) على img src، ثم يجب أن يبقى realpath تحت realpath($this->filebase). نفس شكل get_filecontent().
formatbase.php (text_field، store_file_for_text_field)format.php (get_filecontent يستخدم بالفعل PARAM_PATH)GNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. لا ضمان.