È stata identificata una vulnerabilità (CVE-2022-0185) nell'API Filesystem Context fornita dal kernel Linux, che consente a un utente locale di ottenere diritti di root nel sistema. Il ricercatore che ha scoperto il problema ha pubblicato una dimostrazione dell'exploit, che consente di eseguire codice con diritti di root su Ubuntu 20.04 con configurazione predefinita. Il codice dell'exploit sarà reso disponibile su GitHub entro una settimana, dopo che le distribuzioni rilasceranno aggiornamenti con la correzione della vulnerabilità.
La vulnerabilità è presente nella funzione legacy_parse_param() nel VFS ed è causata dall'assenza di un'adeguata verifica della dimensione massima dei parametri forniti nei filesystem che non supportano l'API Filesystem Context. Trasmettendo un parametro troppo grande, è possibile provocare un overflow di una variabile intera utilizzata per calcolare la dimensione dei dati scritti: nel codice è presente un controllo per il superamento del limite del buffer "if (len > PAGE_SIZE - 2 - size)" che non si attiva se il valore size è superiore a 4094 a causa di un overflow intero da sotto (integer underflow; convertendo 4096 - 2 - 4095 in unsigned int si ottiene 2147483648).
L'errore indicato consente di provocare un overflow del buffer e sovrascrivere i dati del kernel, seguendo un'area di memoria allocata, quando si accede a un'immagine FS appositamente formattata. Per sfruttare la vulnerabilità è necessario avere diritti CAP_SYS_ADMIN, ovvero poteri da amministratore. Il problema è che tali poteri possono essere ottenuti da un utente non privilegiato in un contenitore isolato, se la supporta è attivata per gli spazi dei nomi degli identificatori utente (user namespaces). Ad esempio, i user namespaces sono abilitati per impostazione predefinita in Ubuntu e Fedora, ma non sono attivati in Debian e RHEL (se non si utilizzano piattaforme di isolamento dei contenitori).
Il problema si presenta 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 dei pacchetti contenenti la 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 provvisoria per le sistemazioni che non utilizzano l'isolamento dei contenitori, è possibile impostare a 0 il valore 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
