
CVE-2024-34832
Nel pannello di amministrazione, parametri come _g e node vengono usati per costruire il percorso per includere file .inc.php ed eseguire codice PHP. Un utente malintenzionato con la possibilità di caricare file .inc.php in qualsiasi punto del server può sfruttare una vulnerabilità di path traversal per includerli ed eseguire codice malevolo.
.inc.php in qualsiasi punto del server (ad es. accesso FTP, un'altra applicazione sullo stesso server che consenta il caricamento di file, nuove vulnerabilità nelle funzionalità di upload di CubeCart, ecc.).Diciamo che c'è un server FTP in esecuzione sullo stesso server dove è installato CubeCart e un utente è in grado di caricare file in una posizione specifica. Nel nostro caso, diciamo che qualsiasi cosa caricata via FTP finirà in /opt/FTP_Example.
Supponiamo anche che questo utente abbia caricato un file chiamato path_traversal.inc.php via FTP e che il suo contenuto sia il seguente codice PHP <?php system('whoami;id;hostname;ls') ?>.

All'inizio non c'è alcun pericolo nel caricare un file del genere, poiché non verrà eseguito né si trova nella directory di un server web - come Apache - che potrebbe eseguirlo.
Questo stesso utente può avere privilegi molto limitati o addirittura nessun privilegio sul pannello di amministrazione di CubeCart, ma può comunque accedervi. Ad esempio, abbiamo creato un utente chiamato julio che non ha alcun privilegio.

Dopo aver effettuato l'accesso all'applicazione come julio, abbiamo iniziato a testare i parametri _g e node. Abbiamo notato che questi parametri aggiungono automaticamente .inc.php alla fine di un percorso e sembrano usare include() su quel file per eseguire codice PHP.
Come mostrato di seguito, quando il file non viene trovato, viene restituito il seguente messaggio di errore.

Abbiamo iniziato a chiederci se fosse possibile attraversare il percorso e raggiungere un file .inc.php in una directory da qualche altra parte del server, come la nostra cartella FTP.
Poiché avevamo un file chiamato path_traversal.inc.php nella cartella /opt/FTP_Example, abbiamo provato ad aggiungere molti /../../../ finché non abbiamo raggiunto la directory root, poi abbiamo aggiunto /opt/FTP_Example/path_traversal e l'applicazione ha aggiunto automaticamente .inc.php alla fine del percorso.
Come mostrato di seguito, il codice è stato eseguito con successo.

Abbiamo notato che il parametro node effettivamente esegue l'escaping delle barre (/), ma _g non lo fa. Tutti i parametri usati per costruire i percorsi dovrebbero fare l'escaping delle barre per prevenire vulnerabilità di path traversal.
Sebbene esistano prerequisiti per lo sfruttamento efficace di questa vulnerabilità - il che riduce considerevolmente il rischio - è comunque consigliabile applicare una patch. Puoi controllare nei riferimenti come gli autori di CubeCart hanno corretto questa vulnerabilità e applicare le correzioni alla tua istanza di CubeCart finché non verrà rilasciata una versione ufficiale che la includa già corretta.