
Questa repo contiene tutto il lavoro relativo allo sviluppo del PoC per CVE-2024-48208 e mostra come una semplice lettura OOB(Out-of-bound) possa portare a jail escape oltre che a un controllo degli accessi non funzionante.
Il repository contiene tutto il lavoro relativo allo sviluppo del PoC su come una semplice lettura OOB (out-of-bound) possa portare a evasioni dalla jail e a un controllo degli accessi compromesso.
La descrizione originale della CVE è la seguente:

La PR su GitHub del repository ufficiale descrive come la funzione domlsd() nel file ls.c sia vulnerabile a una lettura OOB, a causa di un incremento non controllato del puntatore di base, che può portare il puntatore a puntare a un buffer al di fuori del buffer cmd, come si può notare alle righe 1053 e 1054.

Durante il debug del buffer in GDB, abbiamo notato che la lettura OOB faceva finire l'utente in qualcosa chiamato replybuf.
Dopo ulteriori analisi, abbiamo scoperto che replybuf è un buffer che viene popolato dalla risposta che il server ha fornito al client. Il replybuf è definito nel file ftpd.c, come mostrato di seguito:

Quindi, per riassumere:
base punti a una parte di replybuf.replybuf contiene la risposta fornita al client.Ora, nella PR su GitHub originale, l'autore della CVE non ha considerato/dimostrato cosa succederebbe se la condizione seguente in ls.c:1055 restituisse true?

Abbiamo iniziato a rifletterci sopra, e si scopre che se un attaccante può far sì che chdir(base) restituisca true, allora la funzione domlsd() procede con l'elencazione del file.
Il team ha considerato gli scenari, forniti in VMsetup.txt, relativi ad amministratori di sistema che configurano ambienti ristretti, e ha deciso di costruire un exploit che funzioni come segue:
L'utente ristretto si connette al server FTP vulnerabile e accede con le proprie credenziali.
nc <server-ip> <ftp-port>
USER <username>
PASS <password>
L'utente entra quindi in modalità EPSV.
EPSV
L'utente prende nota del numero di porta restituito, poiché dovrà connettersi ad esso per leggere i risultati dell'elencazione.
L'utente può ora creare un file di collegamento (dipende dall'offset del buffer che può essere facilmente automatizzato in base all'ultima risposta ricevuta) che punta alla directory da cui vuole elencare i file.
L'utente invia il comando malevolo (dipende dall'offset selezionato).
MLSD -........<più di 4096 per fare overflow del buffer cmd>
L'utente può quindi stabilire un'altra connessione alla porta notata in precedenza, per leggere l'elencazione.
Abbiamo sviluppato uno script di exploit automatizzato pure.py che esegue gli stessi passaggi e si basa su altri script che abbiamo sviluppato lungo il percorso per i test, che si trovano nella directory dev_files.
Per riprodurre la vulnerabilità puoi seguire una guida passo-passo per la configurazione di una macchina virtuale in VMsetup.txt
Per creare un container Docker dell'istanza vulnerabile puoi fare riferimento a Dockersetup.txt