
Moodle 5.2.3 - Alto - Remoto - Percorso - Blackboard img src copia file al di fuori dell'albero di importazione
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · moodle-blackboard-img
Moodle LMS 5.2.3 - Moodle
Classe: Lettura di file Raggiungibilità: Remota
qformat_blackboard_six_base::text_field unisce img src a $this->filebase senza alcun PARAM_PATH. store_file_for_text_field copia poi quel percorso nella filearea della bozza utente. get_filecontent, della stessa famiglia, si protegge già con clean_param($path, PARAM_PATH). MSA-26-0012 ha protetto l'importazione delle attività di database con PARAM_FILE. L'img src di Blackboard non era in quell'insieme.
Un insegnante che può importare uno zip Blackboard inserisce <img src="https://raw.githubusercontent.com/html/config.php">. La "immagine" della bozza è config.php. Gli studenti non possono importare.
| ID | nessuna CVE al momento |
| CWE | CWE-22 / CWE-73 |
| CVSS | Medio: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| Prodotto | Moodle |
| Affetto | 5.2.3 tag v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116) |
| Auth | insegnante (banca domande / importazione Blackboard della lezione) |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
Scrittore: un insegnante che può importare uno zip Blackboard nella banca domande (o lezione). Il premio tipico è config.php (password del DB) come utente PHP. Non è RCE a meno che non concateni un secondo residuo. Non è LPE.
| Privilegio | Metodo / sink | Ricognizione / integrità / disponibilità | Provato in lab o dedotto |
|---|---|---|---|
Leggere un file che l'utente PHP può aprire, tramite ../ in img src | text_field unisce $this->filebase . '/' . $path; store_file_for_text_field copia nella bozza | Ricognizione (byte del file) | Provato in lab. I byte della bozza corrispondono a /var/www/html/config.php e contengono MOODLE-BLACKBOARD-IMG-WITNESS |
| Scaricare quella bozza come "immagine" | itemid della bozza + nome file @@PLUGINFILE@@ riscritto | Ricognizione | Provato in lab. GET /draft ha restituito 298 byte, sha256 uguale a config.php |
| Chiunque possa in seguito aprire la domanda importata | Stessa bozza / pluginfile | Ricognizione | Dedotto. Il lab si è fermato alla corrispondenza della bozza dell'insegnante |
| Importazione studente | stesso zip, role=student | n/a | Provato in lab chiuso. HTTP 403 teacher-only |
Stesso percorso tramite clean_param($path, PARAM_PATH) | gadget jail=1 | n/a | Provato in lab chiuso. Nessuna corrispondenza, nessun witness, il percorso resta sotto filebase |
| RCE PHP / LPE OS | n/a | n/a | Chiuso. Questo residuo copia i byte del file in una bozza. Non li esegue |
Un Moodle predefinito senza importazione Blackboard non è affetto da questo bug. MSA-22-0016 ha ripulito solo baseurl.
Altri residui dello stesso pin: enrol_database SQLi, grades feedback IDOR, hidden grade items.
Ho fissato moodle/moodle v5.2.3 dopo MSA-26-0042/0043. MSA-26-0012 ha protetto l'importazione delle attività di database. Mi sono concentrato su Blackboard perché get_filecontent() conosceva già PARAM_PATH e text_field() faceva ancora un join grezzo.
Vicoli ciechi già registrati: considerare l'importazione studente come la falla (è 403); definire questo RCE perché il file copiato è PHP (la bozza memorizza i byte, non li include); presumere che MSA-22-0016 avesse completato il lavoro (solo baseurl). Una reverse shell. Teatro.
Gadget fedele del pin text_field / store_file_for_text_field, non una completa applicazione PHP Moodle. how=gadget.
python3 moodle-blackboard-img-Abraxas-Labs.py
oppure
cd lab
./run.sh
Target solo http://127.0.0.1:19560. Progetto Compose moodle-blackboard-img. Lo stack viene smontato dopo l'esecuzione.
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) su img src, poi realpath deve restare sotto realpath($this->filebase). Stessa forma di get_filecontent().
formatbase.php (text_field, store_file_for_text_field)format.php (get_filecontent usa già PARAM_PATH)GNU Affero GPL v3.0. Vedi LICENSE. Solo lab su loopback. Nessuna garanzia.