Nel sottosistema eBPF, che consente di eseguire gestori all'interno del kernel Linux in una speciale macchina virtuale con JIT, è stata identificata una vulnerabilità (CVE-2021-4204) che consente a un utente non privilegiato locale di ottenere diritti elevati ed eseguire il proprio codice a livello di kernel Linux. Il problema si manifesta a partire dal kernel Linux 5.8 ed è attualmente non risolto (compreso il rilascio 5.16). È possibile monitorare lo stato della preparazione degli aggiornamenti per risolvere il problema nelle distribuzioni seguendo queste pagine: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. È stato annunciato un exploit funzionante che si prevede venga pubblicato il 18 gennaio (agli utenti e agli sviluppatori è stata concessa una settimana per risolvere la vulnerabilità).
La vulnerabilità è causata da un controllo non corretto dei programmi eBPF inviati per l'esecuzione. Il sottosistema eBPF fornisce funzioni ausiliarie la cui correttezza viene verificata da un apposito verificatore. Alcune funzioni richiedono di passare un valore PTR_TO_MEM come argomento e per evitare possibili overflow di buffer, il verificatore deve conoscere la dimensione della memoria associata all'argomento. Per le funzioni bpf_ringbuf_submit e bpf_ringbuf_discard, le informazioni sulla dimensione della memoria passata non venivano comunicate al verificatore, il che potrebbe essere stato sfruttato per sovrascrivere aree di memoria al di fuori del buffer durante l'esecuzione di codice eBPF appositamente formattato.
Per eseguire un attacco, l'utente deve avere la possibilità di caricare il proprio programma BPF e molte delle recenti distribuzioni Linux bloccano questa possibilità per impostazione predefinita (incluso l'accesso non privilegiato a eBPF ora vietato per impostazione predefinita e nel kernel stesso, a partire dal rilascio 5.16). Ad esempio, la vulnerabilità può essere sfruttata nella configurazione predefinita di Ubuntu 20.04 LTS, ma nei contesti di Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 e Fedora 33 si manifesta solo se l'amministratore ha impostato il parametro kernel.unprivileged_bpf_disabled a 0. Come soluzione alternativa per bloccare la vulnerabilità, si può vietare l'esecuzione di programmi BPF agli utenti non privilegiati con il comando "sysctl -w kernel.unprivileged_bpf_disabled=1."
Fonte: opennet.ru
