
Moodle 5.2.3 - Hoch - Remote - Pfad - Blackboard img src kopiert Dateien außerhalb des Importbaums
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · moodle-blackboard-img
Moodle LMS 5.2.3 - Moodle
Klasse: Datei lesen Reichweite: Remote
qformat_blackboard_six_base::text_field fügt img src an $this->filebase an, ohne PARAM_PATH. store_file_for_text_field kopiert diesen Pfad dann in den Draft-Dateibereich des Benutzers. Das verwandte get_filecontent sperrt bereits mit clean_param($path, PARAM_PATH). MSA-26-0012 sperrte den Datenbank-Aktivitäts-Import mit PARAM_FILE. Blackboard img src war nicht in diesem Set.
Ein Lehrer, der eine Blackboard-Zip importieren kann, platziert <img src="https://raw.githubusercontent.com/html/config.php">. Das Draft-"Bild" ist config.php. Schüler können nicht importieren.
| ID | noch keine CVE |
| CWE | CWE-22 / CWE-73 |
| CVSS | Mittel: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| Produkt | Moodle |
| Betroffen | 5.2.3 Tag v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116) |
| Auth | Lehrer (Fragenbank / Lektion Blackboard-Import) |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1 |
Schreibender: ein Lehrer, der eine Blackboard-Zip in die Fragenbank (oder Lektion) importieren kann. Typische Beute ist config.php (DB-Passwort) als der PHP-Benutzer. Kein RCE, es sei denn, sie verketten einen zweiten Überrest. Kein LPE.
| Berechtigung | Methode / Sink | Recon / Integrität / Verfügbarkeit | Lab-bewiesen oder abgeleitet |
|---|---|---|---|
Eine Datei lesen, die der PHP-Benutzer öffnen kann, via ../ in img src | text_field fügt $this->filebase . '/' . $path zusammen; store_file_for_text_field kopiert in den Draft-Bereich | Recon (Dateibytes) | Lab-bewiesen. Draft-Bytes stimmen mit /var/www/html/config.php überein und enthalten MOODLE-BLACKBOARD-IMG-WITNESS |
| Diesen Draft als das "Bild" herunterladen | Draft-itemid + umgeschriebener @@PLUGINFILE@@-Dateiname | Recon | Lab-bewiesen. GET /draft lieferte 298 Bytes, sha256 gleich config.php |
| Jeder, der später die importierte Frage öffnen kann | Derselbe Draft / pluginfile | Recon | Abgeleitet. Lab stoppte beim Lehrer-Draft-Match |
| Schüler-Import | dieselbe Zip, role=student | n/a | Lab-bewiesen geschlossen. HTTP 403 teacher-only |
Derselbe Pfad durch clean_param($path, PARAM_PATH) | Gadget jail=1 | n/a | Lab-bewiesen geschlossen. Kein Match, kein Witness, Pfad bleibt unter filebase |
| PHP RCE / OS LPE | n/a | n/a | Geschlossen. Dieser Überrest kopiert Dateibytes in einen Draft. Er führt sie nicht aus |
Standard-Moodle ohne Blackboard-Import ist nicht dieser Bug. MSA-22-0016 bereinigte nur baseurl.
Gleiche Pin-Überreste: enrol_database SQLi, grades feedback IDOR, hidden grade items.
Ich pinnte moodle/moodle v5.2.3 nach MSA-26-0042/0043. MSA-26-0012 sperrte den Datenbank-Aktivitäts-Import. Ich blieb als Nächstes bei Blackboard, weil get_filecontent() bereits von PARAM_PATH wusste und text_field() immer noch einen rohen Join machte.
Bereits dokumentierte Irrwege: den Schüler-Import als das Leck zu behandeln (er ist 403); dies RCE zu nennen, weil die kopierte Datei PHP ist (der Draft speichert Bytes, er includet sie nicht); anzunehmen, MSA-22-0016 hätte die Arbeit erledigt (nur baseurl). Eine Reverse Shell. Theater.
Getreues Gadget des Pins text_field / store_file_for_text_field, keine vollständige Moodle-PHP-App. how=gadget.
python3 moodle-blackboard-img-Abraxas-Labs.py
oder
cd lab
./run.sh
Ziel nur http://127.0.0.1:19560. Compose-Projekt moodle-blackboard-img. Stack wird nach dem Lauf abgebaut.
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) auf img src, dann muss realpath unter realpath($this->filebase) bleiben. Gleiche Form wie get_filecontent().
formatbase.php (text_field, store_file_for_text_field)format.php (get_filecontent verwendet bereits PARAM_PATH)GNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.