Abbiamo trattato e spiegato CVE-2023-4911 Looney Tunables che colpisce principalmente tutte le distribuzioni Linux e consente a un utente malintenzionato di aumentare i privilegi a root. La vulnerabilità colpisce il caricatore dinamico della libreria GNU C, noto come ld.so durante l'elaborazione della variabile di ambiente GLIBC_TUNABLES. Questo problema potrebbe consentire a un utente malintenzionato locale di utilizzare variabili di ambiente GLIBC_TUNABLES dannose quando si avviano file binari con autorizzazione SUID per eseguire codice con privilegi elevati. Abbiamo utilizzato una configurazione di laboratorio appositamente per provare questo exploit utilizzando ProvaHackMe.
LD.SO: il linker/caricatore dinamico
Ogni volta che esegui un file ELF che dipende da librerie condivise (.COSÌ
file), il sistema operativo dovrà caricare tali librerie e collegarle al tuo eseguibile in modo che eventuali funzioni condivise siano disponibili per il tuo programma durante la sua esecuzione. In Linux sistemi, questo è normalmente gestito da ld.so
, un eseguibile preconfezionato come parte di glibc
biblioteca.
Ogni eseguibile ELF contiene una sezione denominata .interp
, dove viene specificata la posizione del caricatore richiesto in modo che il sistema operativo sappia quale caricatore specifico utilizzare.
CVE-2023-4911 Sfruttamento delle vulnerabilità
Approfondiremo la fase di sfruttamento utilizzando quanto segue PoC.
- Impostazione delle variabili d'ambiente
L'exploit crea diversi array (riga 41), che verranno utilizzati in seguito per memorizzare il fileGLIBC_TUNABLES
variabili d'ambiente e attivano l'overflow del buffer in glibc quando il programma viene eseguito. - Creazione di variabili ambientali
riempitivo
: Questa variabile viene creata per riempire la sezione di lettura-scrittura del caricatore. È riempito con una lunga sequenza di caratteri "F" ("F"). (linee 17-23)
kv
: Questa variabile è il carico utile che attiverà l'overflow del buffer. È riempito con una lunga sequenza di caratteri "A" ("A"). (linee 27-33)
riempitivo2
: simile al riempitivo, questa variabile viene utilizzata per eliminare eventuali porzioni extra. È inoltre riempito con una sequenza di caratteri "F". (linee 37-43)
dt_rpath
: questa variabile viene utilizzata per creare un valore specifico-0x14ULL
per sovrascrivere le regioni di memoria nel processo di sfruttamento. (righe 47-53) Tutte queste variabili verranno copiate nel fileenvp
array, che contiene variabili di ambiente. - Armi
Il carico utile dentroGLIBC_TUNABLES
fa quanto segue su ld.so: sovrascrive un segmento dello stack con un indice che punta a una stringa con"
come il suo contenuto. L'intenzione qui è quella di manipolare lo stack in modo che l'indice punti a uno specifico indirizzo di memoria in cui è memorizzato il carattere "(una virgoletta doppia). Lo stack è una regione di memoria utilizzata per memorizzare variabili locali e informazioni sulle chiamate di funzione durante l'esecuzione del programma. Per aumentare la complessità dell'exploit, i moderni sistemi operativi randomizzano la posizione dello stack, rendendo difficile prevedere dove finirà l'indice in memoria. - Sfruttamento:
L'exploit utilizza un approccio per tentativi ed errori per tenere conto della casualità della posizione dello stack. Esegue ripetutamente il programma (biforcandolo ed eseguendolo) finché non ottiene fortuna e trova l'indirizzo fisso0x7ffdffffff030
corrisponde all'indirizzo a cui punta l'indice dello stack ". Ciò manipola efficacemente il percorso di ricerca della libreria in modo che punti alla directory denominata"
che conterrà una versione dannosa dilib6.so
.
Il processo per generare il forgiatolibc6.so
consiste nel copiare libc6.so sostituendo però il file__libc_start_main
funzione con uno shellcode personalizzato che lo fasetuid(0) + setgid(0) + exec('/bin/sh')
. Puoi trovare lo script Python per questo Qui.
Il programma entra in un ciclo in cui biforca un processo figlio: nel processo figlio tenta di eseguire/usr/bin/su
con--aiuto
. Se il processo figlio impiega più di un secondo, presuppone che stia tornando da una shell, indicando un potenziale exploit riuscito.
CVE-2023-4911 Mitigazione
Se non riesci ad applicare la patch, segui le istruzioni questo link per la mitigazione
CVE-2023-4911 Bonifica
Applicare patch al sistema è il modo migliore e unico per rimediare.
Risposte in camera
/root/root.txt
?Videoprocedura dettagliata