Vulnerabilità nel sottosistema eBPF che consente l'esecuzione di codice a livello del kernel Linux

È stata identificata una vulnerabilità (CVE-2021-4204) nel sottosistema eBPF, che consente di eseguire gestori all'interno del kernel Linux in una speciale macchina virtuale con JIT, consentendo a un utente locale non privilegiato di ottenere l'escalation dei privilegi ed eseguire il proprio codice Livello del kernel Linux. Il problema si presenta dal kernel Linux 5.8 e rimane irrisolto (inclusa la versione 5.16). Lo stato degli aggiornamenti generati per risolvere il problema nelle distribuzioni può essere monitorato su queste pagine: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. È stato annunciato che è stato creato un exploit funzionante, la cui pubblicazione è prevista per il 18 gennaio (agli utenti e agli sviluppatori è stata concessa una settimana per correggere la vulnerabilità).

La vulnerabilità è causata da un'errata verifica dei programmi eBPF trasmessi per l'esecuzione. Il sottosistema eBPF prevede funzioni ausiliarie, il cui corretto utilizzo è verificato da un apposito verificatore. Alcune funzioni richiedono il passaggio di un valore PTR_TO_MEM come argomento e, per evitare possibili overflow del buffer, il verificatore deve conoscere la dimensione della memoria associata all'argomento. Per le funzioni bpf_ringbuf_submit e bpf_ringbuf_discard, i dati sulla dimensione della memoria trasferita non sono stati segnalati al verificatore, che potrebbe essere utilizzato per sovrascrivere aree di memoria oltre il limite del buffer durante l'esecuzione di codice eBPF appositamente progettato.

Per effettuare un attacco, l'utente deve essere in grado di caricare il proprio programma BPF, e molte recenti distribuzioni Linux bloccano questa capacità per impostazione predefinita (incluso l'accesso non privilegiato a eBPF è ora proibito per impostazione predefinita nel kernel stesso, a partire dalla versione 5.16). Ad esempio, la vulnerabilità può essere sfruttata nella configurazione predefinita in Ubuntu 20.04 LTS, ma negli ambienti Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 e Fedora 33 appare solo se l'amministratore ha impostato il parametro kernel.unprivileged_bpf_disabled su 0. Come soluzione alternativa per bloccare la vulnerabilità, è possibile impedire l'esecuzione di programmi BPF da parte di utenti non privilegiati con il comando “sysctl -w kernel.unprivileged_bpf_disabled=1”.

Fonte: opennet.ru

Aggiungi un commento