Moodle 5.2.3 - उच्च - रिमोट - IDOR - core_grades_get_feedback अलग-समूह जाँचों को छोड़ देता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · moodle-grades-feedback-idor
राइट-अप: https://abraxaslabs.tech/research/moodle-grades-feedback-idor
Moodle LMS 5.2.3 - Moodle
वर्ग: IDOR पहुँच: रिमोट
core_grades_get_feedback अभी भी केवल require_capability('gradereport/grader:view') को कॉल करता है। MSA-26-0016 / MDL-88667 के बाद अन्य ग्रेड वेब सेवाओं में groups_user_groups_visible / groups_group_visible जोड़े गए। इस AJAX सेवा में नहीं जोड़े गए। JSON में feedbacktext, fullname, picture, और पहला पहचान फ़ील्ड लौटकर आता है।
Separate groups में एक non-editing teacher, accessallgroups के बिना, किसी अन्य छात्र का userid POST करता है और उस समूह का फ़ीडबैक पढ़ता है।
| ID | अभी तक कोई CVE नहीं |
| CWE | CWE-863 / 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) |
| प्रमाणीकरण | gradereport/grader:view वाला non-editing teacher, moodle/site:accessallgroups के बिना। पाठ्यक्रम Separate groups में। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
लेखक: Separate-groups पाठ्यक्रम में नामांकित एक non-editing teacher, केवल Group A में, grader view के साथ और access-all-groups के बिना। वे किसी अन्य नामांकित छात्र का userid (क्रमिक ints) चुनते हैं और AJAX सेवा को कॉल करते हैं। RCE नहीं। LPE नहीं। स्कोर राइट नहीं।
| विशेषाधिकार | विधि / सिंक | रेकॉन / अखंडता / उपलब्धता | लैब-प्रमाणित या अनुमानित |
|---|---|---|---|
| किसी अन्य समूह का ग्रेड फ़ीडबैक पढ़ना | POST /lib/ajax/service.php?sesskey= core_grades_get_feedback {courseid, userid, itemid} | रेकॉन | लैब-प्रमाणित। HTTP 200, error=false, feedbacktext में MOODLE-GRADES-FEEDBACK-IDOR-WITNESS शामिल है |
| उस छात्र का पहचान फ़ील्ड और प्रदर्शित नाम पढ़ना | वही प्रतिक्रिया additionalfield / fullname / picture | रेकॉन | लैब-प्रमाणित। [email protected], fullname=Student Bravo |
उसी पाठ्यक्रम में क्रमिक userid मानों को टहलाना | वही विधि, अनुमानित ids | रेकॉन | अनुमानित। लैब ने सीड किए गए Group B id का उपयोग किया |
| सहोदर सेलेक्टर के माध्यम से Group B को सूचीबद्ध करना | core_grades_get_gradable_users {courseid, groupid=B} | लागू नहीं | लैब-प्रमाणित बंद। cannotaccessgroup |
| छात्र वही फ़ीडबैक सेवा कॉल करता है | student भूमिका, वही args | लागू नहीं | लैब-प्रमाणित बंद। nopermissions |
| समान-समूह फ़ीडबैक (Group A छात्र) | Student Alpha के लिए teacher कॉल | रेकॉन (इच्छित) | लैब-प्रमाणित अनुमत। HTTP 200, error=false |
| PHP RCE / OS LPE / ग्रेड राइट | लागू नहीं | लागू नहीं | बंद। यह अवशेष फ़ीडबैक और प्रोफ़ाइल फ़ील्ड का पठन है |
Separate groups के बिना डिफ़ॉल्ट Moodle, या वह शिक्षक जिसके पास पहले से moodle/site:accessallgroups है, यह अवशेष नहीं है। उस कैप वाले editing teachers पहले से ही हर समूह देखते हैं।
समान पिन अवशेष: Blackboard img फ़ाइल पठन, enrol_database SQLi, छिपे ग्रेड आइटम।
मैंने MSA-26-0042/0043 के बाद moodle/moodle v5.2.3 को पिन किया। MSA-26-0016 ने अन्य ग्रेड वेब सेवाओं पर समूह जाँचें बंद कर दीं। get_feedback.php उस सेट में नहीं था। ग्रेडर UI को सुदृढ़ किया गया था। इस AJAX सेवा को नहीं।
पहले से दर्ज गलत मोड़: सहोदर get_gradable_users चूक को पूरी कहानी मान लेना (वह तो पहले से ही cannotaccessgroup फेंकता है); इसे स्कोर राइट कहना क्योंकि पेलोड में itemid का नाम है (सेवा एक रीड है); छात्र-को-हमलावर मानना (nopermissions)। एक रिवर्स शेल। नाटक।
php:8.3-cli + MariaDB 11.4 पर लाइव Moodle v5.2.3। सीड एक Separate-groups कोर्स बनाता है, शिक्षक केवल Group A में, छात्र B केवल Group B में, moodle/site:accessallgroups पर CAP_PREVENT, और एक मैनुअल ग्रेड आइटम जिसका फीडबैक गवाह है। how=live।
Compose ../../vendors/moodle/src को /opt/moodle-pin के रूप में बाइंड-माउंट करता है (पथ lab/docker-compose.yml के सापेक्ष है)। moodle/moodle टैग v5.2.3 को उस पथ पर क्लोन करें, या वॉल्यूम को अपने चेकआउट की ओर इंगित करें। Moodle ट्री इस पैक में नहीं है।
python3 moodle-grades-feedback-idor-Abraxas-Labs.py
या
cd lab
./run.sh
केवल http://127.0.0.1:19580 को लक्षित करें। प्रोजेक्ट moodle-grades-feedback-idor को कंपोज़ करें। रन के बाद स्टैक टियर डाउन हो जाता है।
SUCCESS moodle-grades-feedback-idor how=live pin=v5.2.3 teacher-role=teacher accessallgroups=no groupmode=1 feedback-has-witness=yes [email protected] sibling-group-b=cannotaccessgroup student-call=nopermissions MOODLE-GRADES-FEEDBACK-IDOR-WITNESS
validate_context / require_capability के बाद, पाठ्यक्रम और लक्ष्य उपयोगकर्ता को लोड करें, फिर मना करें जब तक कि groups_user_groups_visible($course, $userid) न हो और लक्ष्य नामांकित न हो। MDL-88667 के बाद gradereport_user और core_grades_get_gradable_users के समान स्वरूप।
get_feedback.phpget_gradable_users.phpGNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।