L'azienda Qualys ha identificato una vulnerabilità critica (CVE-2023-4911) nel linker ld.so, fornito con la libreria C di sistema Glibc (GNU libc). La vulnerabilità consente a un utente locale di elevare i propri privilegi di sistema specificando dati opportunamente formattati nella variabile di ambiente GLIBC_TUNABLES prima dell'esecuzione di un file eseguibile con il flag suid root, ad esempio, /usr/bin/su.
La possibilità di sfruttare con successo la vulnerabilità è stata dimostrata su Fedora 37 e 38, Ubuntu 22.04 e 23.04, Debian 12 e 13. Si sospetta che la vulnerabilità si manifesti anche in altre distribuzioni che utilizzano Glibc. Le distribuzioni basate sulla libreria C di sistema Musl, come Alpine Linux, non sono vulnerabili a questo problema. La vulnerabilità è stata corretta in una patch rilasciata il 2 ottobre. È possibile monitorare il rilascio degli aggiornamenti dei pacchetti nelle distribuzioni sulle pagine di Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, Gentoo e ALT Linux.
La vulnerabilità è causata da una modifica effettuata nell'aprile 2021 e inclusa nel rilascio di glibc 2.34. A causa di un errore nel codice di analisi della stringa fornita nella variabile di ambiente GLIBC_TUNABLES, una combinazione di parametri non corretta in questa variabile porta alla scrittura del valore analizzato al di fuori del buffer allocato. Il problema si manifesta quando, invece delle normali sequenze «name=val», i parametri sono forniti in forma di doppia assegnazione «name=name=val». In questo caso, l'assegnazione viene elaborata due volte, inizialmente come «name=name=val» e poi come «name=val». A causa di tale elaborazione doppia, si genera un risultato «name=name=val:name=val», la cui dimensione supera quella del buffer tunestr.
I ricercatori hanno preparato un exploit funzionante in modo stabile, che consente di ottenere diritti di root utilizzando praticamente qualsiasi programma con il flag suid root. Le eccezioni sono l'utilità sudo (cambia il valore di ELF RUNPATH), le utilità chage e passwd in Fedora (protette da regole SELinux specifiche) e l'utilità snap-confine in Ubuntu (protetta da regole specifiche di AppArmor). Il metodo di sfruttamento proposto non funziona nemmeno in RHEL 8 e RHEL 9, anche se queste versioni sono vulnerabili (per attaccare è necessario creare un altro exploit). Il codice dell'exploit sarà pubblicato in seguito, dopo la rimozione della vulnerabilità a livello globale. Puoi verificare se il tuo sistema è vulnerabile utilizzando il comando indicato qui sotto, che in caso di problemi si concluderà con un crash: env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '192x' 1`" \/usr\/bin\/su —help
Si segnala inoltre la risoluzione di altre due vulnerabilità in Glibc:
- CVE-2023-4806 — accesso a un'area di memoria già liberata (use-after-free) nella funzione getaddrinfo(), che si manifesta quando il plugin NSS implementa solo le chiamate di callback "_gethostbyname2_r" e "_getcanonname_r", ma non supporta la chiamata "_gethostbyname3_r". Per sfruttare la vulnerabilità, il server DNS deve restituire un gran numero di indirizzi IPv6 e IPv4 per l'host richiesto, il che porterà al crash del processo che ha chiamato la funzione getaddrinfo per la famiglia AF_INET6 impostando i flag AI_CANONNAME, AI_ALL e AI_V4MAPPED.
- CVE-2023-5156 — perdita di contenuto della memoria durante la chiamata della funzione getaddrinfo per la famiglia di indirizzi AF_INET6 con i flag AI_CANONNAME, AI_ALL e AI_V4MAPPED.
Fonte: opennet.ru
