Nel contesto dell'API Filesystem Context fornito dal kernel Linux, è stata individuata una vulnerabilità (CVE-2022-0185) che consente a un utente locale di ottenere diritti di root nel sistema. Il ricercatore che ha scoperto il problema ha pubblicato una dimostrazione di un exploit che permette di eseguire codice con privilegi di root su Ubuntu 20.04 nella configurazione predefinita. Si prevede che il codice di exploit venga pubblicato su GitHub entro una settimana, dopo che le distribuzioni avranno rilasciato un aggiornamento con la correzione della vulnerabilità.
La vulnerabilità è presente nella funzione legacy_parse_param() in VFS ed è causata dalla mancanza di un'adeguata verifica della dimensione massima dei parametri forniti in file system che non supportano l'API Filesystem Context. Trasmettendo un parametro troppo grande, si può causare un overflow della variabile intera utilizzata per calcolare la dimensione dei dati da scrivere; nel codice è presente un controllo per l'uscita dal limite del buffer «if (len > PAGE_SIZE - 2 - size)», che non si attiva se il valore di size è maggiore di 4094 a causa dell'overflow intero attraverso il limite inferiore (convertendo 4096 - 2 - 4095 in unsigned int si ottiene 2147483648).
L'errore indicato consente, durante l'accesso a un'immagine di filesystem appositamente formattata, di provocare un overflow del buffer e sovrascrivere i dati del kernel che seguono l'area di memoria allocata. Per sfruttare questa vulnerabilità è necessaria la presenza dei diritti CAP_SYS_ADMIN, ovvero delle autorizzazioni da amministratore. Il problema è che tali autorizzazioni possono essere ottenute da un utente non privilegiato in un container isolato, se nel sistema è abilitato il supporto per gli spazi dei nomi degli identificatori degli utenti (user namespaces). Ad esempio, gli user namespaces sono attivati per default in Ubuntu e Fedora, ma non sono abilitati in Debian e RHEL (a meno che non si utilizzino piattaforme di isolamento dei container).
Il problema si manifesta a partire dal kernel Linux 5.1 ed è stato risolto negli aggiornamenti di ieri 5.16.2, 5.15.16, 5.10.93, 5.4.173. Gli aggiornamenti pacchetti con correzione della vulnerabilità sono già stati rilasciati per RHEL, Debian, Fedora, Ubuntu. La correzione non è ancora disponibile per Arch Linux, Gentoo, SUSE e openSUSE. Come soluzione alternativa di protezione per i sistemi che non utilizzano isolamento dei container, è possibile impostare a 0 il valore di sysctl «user.max_user_namespaces»: echo «user.max_user_namespaces=0» > /etc/sysctl.d/userns.conf # sysctl -p /etc/sysctl.d/userns.conf
Fonte: opennet.ru
