
Repository contenente una Proof of Concept (PoC) che dimostra l'impatto di CVE-2023-4911, una vulnerabilità nel caricatore dinamico ld.so di glibc, che espone rischi legati a Looney Tunables.
La GNU C Library (glibc) funge da libreria C nel sistema GNU ed è parte integrante dei sistemi basati su Linux. Al suo interno, glibc definisce funzionalità essenziali per i programmi, incluse le system call e funzioni comuni come open, malloc, printf ed exit. Il dynamic loader, un componente vitale di glibc, svolge un ruolo chiave nella preparazione ed esecuzione dei programmi, gestendo le librerie condivise e collegandole in fase di esecuzione.
Introdotta per dare agli utenti maggiore controllo senza ricompilazione, la variabile d'ambiente GLIBC_TUNABLES consente di modificare il comportamento di glibc in fase di esecuzione. Fornisce un mezzo per regolare i parametri di prestazioni e comportamento, influenzando l'avvio delle applicazioni.
Una vulnerabilità di buffer overflow nell'elaborazione di GLIBC_TUNABLES da parte del dynamic loader rappresenta un rischio di sicurezza critico. Lo sfruttamento garantisce agli attaccanti locali privilegi elevati, potenzialmente portando all'accesso root completo. Lo sfruttamento riuscito su distribuzioni importanti come Fedora, Ubuntu e Debian sottolinea la gravità e l'impatto diffuso.
L'uso improprio o lo sfruttamento di questa vulnerabilità può influire su prestazioni, affidabilità e sicurezza del sistema. Sebbene i dettagli dell'exploit non siano divulgati, il rischio è imminente, poiché i buffer overflow possono trasformarsi rapidamente in attacchi solo-dati. Le distribuzioni Linux più diffuse che utilizzano glibc potrebbero essere vulnerabili, evidenziando la necessità di consapevolezza e mitigazione tempestive.
Assegnato: 3 ottobre 2023
Tipo: Escalation locale dei privilegi
Versioni interessate: glibc 2.34 e successive
Distribuzioni: RHEL, Ubuntu, Fedora, Debian, Amazon Linux, Gentoo e altre che utilizzano glibc Mitigazione
Aggiornamento: applicare tempestivamente gli aggiornamenti di glibc.
Monitoraggio: restare informati sugli advisory di sicurezza.
Revisione: valutare l'uso di GLIBC_TUNABLES nelle applicazioni.
Audit: esaminare i log di sistema per attività sospette.
Ubuntu 22.04 Ubuntu GLIBC 2.35-0ubuntu3.1 su da util-linux 2.37.2 ASLR ON
Utilizzato l'ISO di Ubuntu (versione 22.04.1) per creare la macchina virtuale
Dopo un'installazione riuscita non è necessario aggiornare nulla, ma installeremo git e il pacchetto GNU Binutils perché non sono presenti nel sistema; quando compilerai lo script python dell'exploit incontrerai l'errore.
Usando questi comandi:
$ sudo apt install git
$ sudo apt install binutils
Controlla se è vulnerabile
$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
Se restituisce
Segmentation fault (core dumped)allora è vulnerabile.
controlla la versione del dynamic linker/loader, spesso associato alla GNU C Library (glibc)
$ ldd --version
L'output fornirà la versione di GLIBC
ldd (Ubuntu GLIBC 2.35-0ubuntu3.6) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Ora che sappiamo che la nostra macchina è vulnerabile e pronta per escalare i privilegi di root
Nota: Non dobbiamo installare gcc nella macchina; se lo installiamo perderà la sua vulnerabilità, quindi lo script non funzionerà.
Poiché non abbiamo gcc installato, dobbiamo compilare il programma C sulla macchina host e poi importarlo nella macchina guest.
possiamo compilare il programma C con questo comando
$ gcc exploit.c -o (outputname)
Dopo aver importato il file di output del programma C, importa anche lo script python (genlib.py).
Ora compila lo script python
$ python3 genlib.py
Dopo la compilazione viene creata una cartella '"'.
Faremo questo nella cartella /tmp così l'utente può eseguire script e programma.
Ora infine eseguiremo il programma per escalare i privilegi di root.
$ ./(nameoftheprogram)
Ci vorrà del tempo e si otterrà la shell di root.
Proteggi per Potenziare, Non Sfruttare!
Riferimenti: