
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
Class: File read Reach: Remote
qformat_blackboard_six_base::text_field img src को बिना किसी PARAM_PATH के $this->filebase पर जोड़ता है। फिर store_file_for_text_field उस पथ को उपयोगकर्ता के draft filearea में कॉपी कर देता है। उसी परिवार का get_filecontent पहले से ही clean_param($path, PARAM_PATH) के साथ jail करता है। MSA-26-0012 ने database-activity import को PARAM_FILE के साथ jail किया था। Blackboard img src उस सेट में नहीं था।
एक शिक्षक जो Blackboard zip आयात कर सकता है, <img src="https://raw.githubusercontent.com/html/config.php"> रखता है। draft "image" config.php है। छात्र आयात नहीं कर सकते।
| ID | अभी तक कोई CVE नहीं |
| CWE | CWE-22 / CWE-73 |
| CVSS | Medium: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| Product | Moodle |
| Affected | 5.2.3 tag v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116) |
| Auth | teacher (question bank / lesson Blackboard import) |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
Writer: एक शिक्षक जो question bank (या lesson) में Blackboard zip आयात कर सकता है। आमतौर पर इनाम config.php (DB password) है, PHP उपयोगकर्ता के रूप में। RCE नहीं, जब तक वे दूसरे बचे हुए leftover को चेन न करें। LPE नहीं।
| Privilege | Method / sink | Recon / integrity / availability | Lab-proven या inferred |
|---|---|---|---|
PHP उपयोगकर्ता द्वारा खोली जा सकने वाली फ़ाइल को img src में ../ के माध्यम से पढ़ें | text_field $this->filebase . '/' . $path को जोड़ता है; store_file_for_text_field draft area में कॉपी करता है | Recon (file bytes) | Lab-proven। Draft bytes /var/www/html/config.php से मेल खाते हैं और उनमें MOODLE-BLACKBOARD-IMG-WITNESS है |
| उस draft को "image" के रूप में डाउनलोड करें | draft itemid + rewritten @@PLUGINFILE@@ filename | Recon | Lab-proven। GET /draft ने 298 bytes लौटाए, sha256 config.php के बराबर |
| कोई भी जो बाद में आयातित प्रश्न खोल सकता है | Same draft / pluginfile | Recon | Inferred। Lab teacher draft match पर रुक गया |
| Student import | same zip, role=student | n/a | Lab-proven closed। HTTP 403 teacher-only |
clean_param($path, PARAM_PATH) के माध्यम से वही पथ | gadget jail=1 | n/a | Lab-proven closed। कोई मेल नहीं, कोई witness नहीं, पथ filebase के अंतर्गत ही रहता है |
| PHP RCE / OS LPE | n/a | n/a | Closed। यह leftover फ़ाइल bytes को draft में कॉपी करता है। यह उन्हें execute नहीं करता |
Blackboard import के बिना डिफ़ॉल्ट Moodle यह bug नहीं है। MSA-22-0016 ने केवल baseurl साफ़ किया था।
Same pin leftovers: enrol_database SQLi, grades feedback IDOR, hidden grade items।
मैंने MSA-26-0042/0043 के बाद moodle/moodle v5.2.3 को pin किया। MSA-26-0012 ने database-activity import को jail किया। मैंने इसके बाद Blackboard पर ध्यान दिया क्योंकि get_filecontent() पहले से PARAM_PATH के बारे में जानता था और text_field() अभी भी raw join कर रहा था।
पहले से दर्ज गलत रास्ते: student import को leak मानना (यह 403 है); इसे RCE कहना क्योंकि कॉपी की गई फ़ाइल PHP है (draft bytes को संग्रहीत करता है, उन्हें include नहीं करता); यह मानना कि MSA-22-0016 ने काम पूरा कर दिया था (केवल baseurl)। एक reverse shell। नाटक।
pin text_field / store_file_for_text_field का faithful gadget, पूर्ण Moodle PHP app नहीं। how=gadget।
python3 moodle-blackboard-img-Abraxas-Labs.py
या
cd lab
./run.sh
लक्ष्य केवल http://127.0.0.1:19560। Compose project moodle-blackboard-img। रन के बाद stack tear down हो जाता है।
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
img src पर clean_param($path, PARAM_PATH), फिर 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 lab। कोई वारंटी नहीं।