Vulnerabilità nel sottosistema eBPF del kernel Linux

È stata individuata una vulnerabilità (CVE-2021-29154) nel sottosistema eBPF, che consente di eseguire gestori di tracciamento, analisi del funzionamento dei sottosistemi e gestione del traffico, eseguiti all'interno del kernel Linux in un'apposita macchina virtuale con JIT, che consente un utente locale per ottenere l'esecuzione del proprio codice a livello di kernel. Il problema si presenta fino alla versione 5.11.12 (inclusa) e non è stato ancora risolto nelle distribuzioni (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). La correzione è disponibile come patch.

Secondo i ricercatori che hanno individuato la vulnerabilità, sono riusciti a sviluppare un prototipo funzionante dell'exploit per sistemi x32 a 64 e 86 bit, che può essere utilizzato da un utente non privilegiato. Tuttavia, Red Hat nota che la gravità del problema dipende dal fatto che la chiamata di sistema eBPF sia accessibile all'utente. Ad esempio, su RHEL e sulla maggior parte delle altre distribuzioni Linux nella configurazione predefinita, la vulnerabilità può essere sfruttata se BPF JIT è abilitato e l'utente dispone dei diritti CAP_SYS_ADMIN. Come soluzione alternativa, si consiglia di disabilitare BPF JIT utilizzando il comando: echo 0 > /proc/sys/net/core/bpf_jit_enable

Il problema è causato da un errore nel calcolo dell'offset per le istruzioni di salto durante il processo di generazione del codice macchina del compilatore JIT. In particolare, quando si generano istruzioni di salto, non si tiene conto che l'offset può cambiare dopo aver attraversato la fase di ottimizzazione. Questo difetto può essere utilizzato per generare codice macchina anomalo ed eseguirlo a livello di kernel.

È interessante notare che questa non è l'unica vulnerabilità recentemente riscontrata nel sottosistema eBPF. Alla fine di marzo sono state identificate altre due vulnerabilità nel kernel (CVE-2020-27170, CVE-2020-27171), consentendo di utilizzare eBPF per aggirare la protezione contro le vulnerabilità della classe Spectre, che consentono di determinare il contenuto della memoria del kernel in conseguenza della creazione delle condizioni per l'esecuzione speculativa di alcune operazioni. L'attacco Spectre richiede la presenza di una determinata sequenza di comandi in un codice privilegiato che porta all'esecuzione speculativa delle istruzioni. In eBPF sono stati trovati diversi modi per generare tali istruzioni attraverso manipolazioni con programmi BPF trasmessi per l'esecuzione.

La vulnerabilità CVE-2020-27170 è causata dalla manipolazione del puntatore nel verificatore BPF che fa sì che le operazioni speculative accedano a un'area esterna ai limiti del buffer. La vulnerabilità CVE-2020-27171 è dovuta a un errore di underflow di un numero intero quando si lavora con i puntatori, che porta ad un accesso speculativo ai dati all'esterno del buffer. Questi problemi sono già stati risolti nelle versioni del kernel 5.11.8, 5.10.25, 5.4.107, 4.19.182 e 4.14.227 e sono stati inclusi anche negli aggiornamenti del kernel per la maggior parte delle distribuzioni Linux. I ricercatori hanno preparato un prototipo di exploit che consente a un utente non privilegiato di estrarre dati dalla memoria del kernel.

Fonte: opennet.ru

Aggiungi un commento