CVE-2025-60500 — Upload di file non sicuro / difetto logico in QDocs Smart School (Smart School 7.1)
Data di pubblicazione: 2025-10-17
Autore / Scopritore: Lebas Vivien
Stato: Riservato
CVE: CVE-2025-60500 (riservato)
Riepilogo
Un upload di file non sicuro / difetto logico in QDocs Smart School — School Management System 7.1 consente agli utenti autenticati con ruoli come accountant, admin o superadmin di aggirare le restrizioni sul tipo di file nella funzionalità di upload dei media sfruttando l'opzione alternativa URL YouTube. Questo difetto consente a un attaccante di causare il salvataggio di file PHP arbitrari in una directory accessibile via web, permettendo l'esecuzione remota di codice quando il file caricato viene acceduto.
Prodotto interessato: Smart School : School Management System 7.1 (QDocs)
Confermato dal fornitore: Sì
Impatto
- Esecuzione remota di codice (RCE) tramite file PHP caricati e collocati in una directory accessibile via web.
- Un utente autenticato con i ruoli specificati può caricare un file PHP arbitrario che verrà salvato in un percorso prevedibile e accessibile via web.
- Gli attaccanti potrebbero eseguire comandi di sistema o spostarsi ulteriormente nell'ambiente invocando il file caricato.
Componente interessato
- Funzionalità di upload dei file — Download Center > Upload Share Content (upload dei media / flusso di condivisione contenuti)
Tipo di attacco / Vettore
- Tipo di attacco: Remoto (richiede un account autenticato con ruolo: accountant/admin/superadmin)
- Vettori di attacco: Flusso di upload combinato con l'opzione alternativa URL YouTube; inviando sia un file caricato sia il campo del link YouTube, il server salva il file caricato con estensione
.php in una directory accessibile via web.
Riproduzione (PoC concettuale — nessun payload eseguibile incluso)
- Accedi a Smart School come utente con ruolo
accountant, admin o superadmin.
- Vai su Download Center → Upload Share Content.
- Intercetta la richiesta HTTP (ad esempio, con un proxy come Burp) durante il flusso di upload/condivisione.
- Carica un file il cui nome termina con
.php (i controlli/filtri lato server tentano di bloccare gli upload PHP tramite la normale validazione del tipo di file).
- Nella stessa richiesta di upload/invio, compila anche il campo alternativo URL YouTube (il percorso logico che gestisce l'opzione YouTube consente erroneamente che il file caricato venga accettato e salvato).
- Completa il flusso di condivisione/upload; annota la risposta del server o osserva il percorso del file salvato restituito (l'applicazione rivela il percorso di archiviazione). Esempio di pattern del percorso di archiviazione osservato: /uploads/school_content/material/media/!file.php
- Accedi al file
.php salvato tramite l'URL restituito per attivare l'esecuzione del codice (se il file contiene codice PHP eseguibile).
Proof-of-concept (ad alto livello)
- Un file PHP caricato tramite il flusso vulnerabile viene scritto in una directory accessibile via web e può essere richiamato direttamente tramite HTTP.
- La vulnerabilità è un bypass logico/di validazione (il percorso di codice dell'URL YouTube alternativo non applica le stesse restrizioni rigorose sul tipo di file del normale flusso di upload).
Mitigazione / Correzioni consigliate
Correzioni lato fornitore (consigliate):
- Correggere il difetto logico affinché il percorso dell'URL YouTube alternativo e qualsiasi altro percorso di upload speciale applichi la stessa validazione e filtro del tipo di file del normale flusso di upload. Verificare inoltre se l'URL YouTube è valido/esistente.
- Bloccare l'esecuzione dei file caricati salvando i contenuti caricati al di fuori della webroot o garantendo che gli upload vengano serviti tramite un handler sicuro che non esegua mai codice lato server.
- Applicare controlli lato server su MIME type ed estensione e validare tramite una whitelist dei tipi di file consentiti anziché una blacklist.
- Rinominare i file salvati con estensioni sicure e/o randomizzare i nomi senza preservare l'estensione originale.
- Impostare permessi server corretti affinché i file caricati non siano eseguibili (ad esempio,
chmod per rimuovere il permesso di esecuzione; configurare il web server per non eseguire PHP dalle directory di upload).
- Aggiungere logging e monitoraggio per upload sospetti e tentativi di accesso ai file caricati.
- Applicare restrizioni basate sui ruoli — limitare quali ruoli possono caricare contenuti e richiedere una validazione aggiuntiva per i ruoli privilegiati.
Workaround per gli amministratori:
- Disabilitare temporaneamente la funzionalità problematica di upload/condivisione, se fattibile.
- Limitare l'accesso all'upload a un numero minore di account fidati.
- Configurare il web server per impedire l'esecuzione di
.php nella directory /uploads/....
Riferimenti
- Istanza demo segnalata:
https://smart-school.in/demo
- ID CVE MITRE riservato: CVE-2025-60500