Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
moodle-grades-gradeitems — Moodle 5.2.3 - عالي - عن بُعد - IDOR - core_grades_get_gradeitems يسرد عناصر الدرجات المخفية | Kitploit
أدوات/GitHubGitHub/abraxas/moodle-grades-gradeitems
تحليل الثغرات الأمنيةاستغلال تطبيقات الويباختبار أمان APIجمع المعلوماتأمن الويباختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubabraxas/moodle-grades-gradeitems

moodle-grades-gradeitems

Moodle 5.2.3 - عالي - عن بُعد - IDOR - core_grades_get_gradeitems يسرد عناصر الدرجات المخفية

عرض المستودع
27منذ 9 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Abraxas Labs - moodle-grades-gradeitems

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  moodle-grades-gradeitems

التحليل المكتوب: https://abraxaslabs.tech/research/moodle-grades-gradeitems

moodle-grades-gradeitems

Moodle LMS 5.2.3 - Moodle

الفئة: IDOR الوصول: عن بُعد

core_grades_get_gradeitems هو ajax بالإضافة إلى خدمة الهاتف المحمول الرسمية، دون وجود مفتاح capabilities في services.php. validate_context هو البوابة الوحيدة. بعد ذلك يقوم grade_item::fetch_all بإخراج كل عنصر في المقرر. يُسقط array_filter العناصر من نوع GRADE_TYPE_NONE وعناصر الفئات وعنصر المقرر. العناصر المخفية ليست ضمن هذا الفلتر. الشقيق core_grades_get_grade_tree يتطلب بالفعل moodle/grade:viewall.

طالب مسجّل يرسل POST بـ {courseid} فيحصل على أسماء عناصر التقييم المخفية التي لا يزال واجهة سجل درجات الطالب تخفيها.

المعرّفلا يوجد CVE بعد
CWECWE-862 / CWE-200
CVSSمتوسط: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
المنتجMoodle
المتأثر5.2.3 وسم v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116)
المصادقةطالب مسجّل (moodle/grade:view؛ يفتقر إلى viewall / viewhidden)
الترخيصGNU Affero GPL v3.0
المختبر127.0.0.1 فقط

ما يمكن للمهاجم فعله

الكاتب: طالب مسجّل في المقرر. يرسل POST إلى خدمة AJAX بـ {courseid}. الاستجابة هي أسماء ومعرّفات وفئات. مخطط الإرجاع لا يحتوي على درجات. ليس RCE. ليس LPE. وليس كتابة درجة.

الصلاحيةالطريقة / نقطة الوصولالاستطلاع / السلامة / التوافرمُثبت مختبريًا أو مُستنتج
قراءة اسم ومعرّف وفئة عنصر تقييم مخفيPOST /lib/ajax/service.php?sesskey= core_grades_get_gradeitems {courseid}استطلاعمُثبت مختبريًا. HTTP 200، الأسماء تتضمن MOODLE-GRADES-GRADEITEMS-WITNESS
قراءة اسم ومعرّف وفئة عنصر تقييم ظاهرنفس الاستجابةاستطلاع (مقصود للمعلمين)مُثبت مختبريًا. الأسماء تتضمن Visible Lab Assignment
نفس الكتالوج عبر خدمة الهاتف المحمول الرسميةنفس الفئة، services تتضمن MOODLE_OFFICIAL_MOBILE_SERVICEاستطلاعمُستنتج من services.php. استخدم المختبر AJAX.
المرور على قيم courseid المتسلسلة للمقررات التي يمكن للطالب دخولهانفس الطريقة، معرّفات مُخمّنةاستطلاعمُستنتج. استخدم المختبر معرّف المقرر المزوّد 2
رؤية العنصر المخفي في واجهة سجل درجات الطالبGET /grade/report/user/index.php?id=لا ينطبقمُثبت مختبريًا مغلق. hidden-in-ui=False، visible-in-ui=True
الاستدعاء دون جلسةAJAX بمفتاح sesskey وهميلا ينطبقمُثبت مختبريًا مغلق. servicerequireslogin
الاستدعاء كمستخدم مسجّل الدخول غير مسجّل في المقررAJAX من خارج المقرر، نفس courseidلا ينطبقمُثبت مختبريًا مغلق. requireloginerror
قراءة درجات طلاب آخرين أو كتابة درجاتلا ينطبقلا ينطبقمغلق. مفاتيح الإرجاع هي id وitemname وcategory
PHP RCE / OS LPEلا ينطبقلا ينطبقمغلق. هذه البقايا هي قراءة كتالوج

المعلم أو المدير الذي يمتلك بالفعل moodle/grade:viewall يرى الكتالوج مسبقًا. لا يزال المستخدمون الضيوف / غير المصادَقين بحاجة إلى سياق مقرر.

بقايا التثبيت نفسها: قراءة ملف صورة Blackboard، حقن SQL في enrol_database، IDOR في ملاحظات الدرجات.

كيف وجدته

ثبّتُّ moodle/moodle على الإصدار v5.2.3 بعد MSA-26-0042/0043. كانت خدمات الويب الخاصة بالدرجات ضمن نطاق تلك الـ MSA. لا يزال get_gradeitems.php بلا require_capability. كانت واجهة الطالب تُخفي العنصر بالفعل. أما كتالوج AJAX فلم يفعل.

المسارات الخاطئة المسجّلة سلفًا: اعتبار استجابة AJAX غير الموثّقة بحالة 200 هي التسريب (الجسم هو servicerequireslogin)؛ تسمية هذا بـ IDOR للدرجات لأن اسم الدالة يحتوي على grade (المخطط أسماء فقط)؛ توقّع أن يكون get_grade_tree هو نفس البقايا (فهو يتطلب viewall بالفعل). صدفة عكسية. مسرح.

المختبر

Moodle مباشر v5.2.3 على php:8.3-apache + MariaDB 11.4. يُسجّل البذور labstudent، ويُبقي laboutsider خارج المقرر، ويُنشئ عنصرًا يدويًا مرئيًا إضافةً إلى عنصر مخفي اسمه هو الشاهد. ينسخ run.sh تثبيتًا محليًا أو git clone --depth 1 --branch v5.2.3. شجرة Moodle ليست في هذه الحزمة.

python3 moodle-grades-gradeitems-Abraxas-Labs.py

أو

cd lab
./run.sh

استهدف فقط http://127.0.0.1:19590. مشروع Compose moodle-grades-gradeitems. تُفكَّك الحزمة بعد انتهاء التشغيل.

SUCCESS moodle-grades-gradeitems student-ajax=200 hidden-in-ajax=yes hidden-in-ui=no visible-in-ajax=yes visible-in-ui=yes outsider-error=yes unauth-error=yes MOODLE-GRADES-GRADEITEMS-WITNESS

الإصلاح

بعد validate_context، اشترط نفس القيد الذي يفرضه get_grade_tree: require_capability('moodle/grade:viewall', $context). كذلك احذف العناصر المخفية ما لم يكن لدى المستدعي moodle/grade:viewhidden. أضف حالة اختبار Behat/PHPUnit: طالب مسجّل، وعنصر يدوي مخفي، ويجب أن يحذف core_grades_get_gradeitems ذلك العنصر (أو يُرجع 403). واجهة سجل درجات الطالب تخفيه بالفعل.

المراجع

  • github.com/moodle/moodle وسم v5.2.3
  • get_gradeitems.php
  • النظير يفرض القيد بالفعل: get_grade_tree.php
  • تسجيل الخدمة: services.php (core_grades_get_gradeitems، بدون capabilities)
  • نفس التثبيت: moodle-blackboard-img · moodle-enrol-database-sqli · moodle-grades-feedback-idor
  • CWE-862

الترخيص

GNU Affero GPL v3.0. راجع LICENSE. للاستخدام في مختبر loopback فقط. دون أي ضمان.

تنزيل الأداة