
PoC e documentazione per CVE-2026-7275: Moodle Google Drive Repository (repository_googledocs) — Path Traversal / Arbitrary File Write che può portare a RCE sulle versioni di Moodle non patchate.
PoC e documentazione per CVE-2026-7275: Moodle Google Drive Repository (repository_googledocs) — Path Traversal / Arbitrary File Write che può portare a RCE sulle versioni di Moodle non ancora patchate.
Disclaimer: Solo per ricerca di sicurezza autorizzata, audit e formazione difensiva. Non utilizzare su sistemi senza autorizzazione scritta.
| Campo | Valore |
|---|
| CVE | CVE-2026-7275 |
| Advisory | MSA-26-0006 |
| Tracker | MDL-88423 |
| Componente | repository_googledocs |
| CWE | CWE-22 (Path Traversal) |
| Gravità | Critica (CVSS ~9.1) |
| Affette | Moodle 5.1.0–5.1.3, 5.0.0–5.0.6, 4.5.0–4.5.10 |
| Corretto in | 5.1.4, 5.0.7, 4.5.11 |
Il plugin Google Drive di Moodle scarica file dall'API di Google utilizzando i metadati del nome file ($originalfile->name). Prima della patch, questo nome veniva passato a prepare_file() senza sanitizzazione, quindi payload come ../../../../public/shell.php potevano scrivere file al di fuori della directory temporanea → potenziale RCE se la webroot esegue PHP.
Non è necessario conoscere il percorso assoluto — è sufficiente una traversata relativa (../ ripetuto) dalla cartella temporanea casuale.
├── README.md ← riepilogo (questo file)
├── CONTRIBUTORS.md ← 0xNuts + Cursor
├── EXPLOIT.md ← attack chain, payload, prerequisiti
├── PATCH.md ← analisi della patch e mitigazioni
└── poc/
└── demo_path_traversal.py ← demo locale pre-patch vs post-patch
python poc/demo_path_traversal.py
L'output mostra il percorso ESCAPE (pre-patch) rispetto a contained (post-patch).
| Requisito | Dettagli |
|---|---|
| Account Moodle | Utente autenticato |
| Capability | repository/googledocs:view |
| OAuth | Google Drive collegato all'utente Moodle |
| Plugin | repository_googledocs attivo |
| Versione | Non ancora patchata (< 5.1.4 / < 5.0.7 / < 4.5.11) |
// public/repository/lib.php — prepare_file()
return sprintf('%s/%s', make_request_directory(), clean_param($filename, PARAM_FILE));
Dettagli completi: PATCH.md
| 0xNuts | @ExDev994 — ricercatore principale, PoC, documentazione |
| Cursor | cursor.com — co-ricercatore, analisi statica, write-up di exploit e patch |
Dettagli: CONTRIBUTORS.md
/*
* CVE-2026-7275 — break to understand, patch to defend.
* Contributors: 0xNuts (@ExDev994) + Cursor
*/