Vulnerabilità nel sottosistema eBPF del kernel Linux

Nel sottosistema eBPF, che consente di eseguire gestori per il tracciamento, l'analisi delle prestazioni delle sottosistemi e la gestione del traffico, eseguiti all'interno del kernel Linux in una speciale macchina virtuale con JIT, è stata identificata una vulnerabilità (CVE-2021-29154) che consente a un utente locale di eseguire codice a livello di kernel. Il problema si manifesta fino alla versione 5.11.12 (inclusa) e non è ancora stato corretta nelle distribuzioni (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). La correzione è disponibile sotto forma di patch.

Secondo i ricercatori che hanno identificato la vulnerabilità, sono riusciti a sviluppare un prototipo funzionante di exploit per sistemi 32 e 64 bit x86, che può essere utilizzato da un utente non privilegiato. Tuttavia, la Red Hat osserva che il pericolo del problema dipende dalla disponibilità alla chiamata di sistema eBPF per l'utente. Ad esempio, in RHEL e nella 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 misura di protezione, si raccomanda di disabilitare BPF JIT usando il comando: echo 0 > /proc/sys/net/core/bpf_jit_enable

Il problema è causato da un errore nel calcolo dello spostamento per i comandi di branching durante la generazione di codice macchina da parte del compilatore JIT. In particolare, nella generazione delle istruzioni di branching non si tiene conto del fatto che lo spostamento può cambiare dopo la fase di ottimizzazione. Questo difetto può essere sfruttato per generare codice macchina anomalo e eseguirlo a livello di kernel.

È interessante notare che questa non è l'unica vulnerabilità nel sottosistema eBPF recentemente. A fine marzo, sono state identificate altre due vulnerabilità nel kernel (CVE-2020-27170, CVE-2020-27171), che consentono di utilizzare eBPF per aggirare le difese contro le vulnerabilità di tipo Spectre, permettendo di determinare il contenuto della memoria del kernel a seguito della creazione di condizioni per l'esecuzione speculativa di determinate operazioni. Per un attacco Spectre è necessaria la presenza di una specifica sequenza di comandi nel codice privilegiato, che porta all'esecuzione speculativa delle istruzioni. Sono stati trovati diversi modi di generare tali istruzioni attraverso manipolazioni con i programmi BPF inviati per l'esecuzione.

La vulnerabilità CVE-2020-27170 è causata dalla presenza di manipolazioni dei puntatori nel verificatore BPF, che provocano operazioni speculative che accedono a aree al di fuori dei limiti del buffer. La vulnerabilità CVE-2020-27171 è legata a un errore di aritmetica intera (underflow) nella gestione dei puntatori, che porta a accessi speculativi a dati al di fuori del buffer. I problemi sopra menzionati sono stati già 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 negli aggiornamenti del kernel della 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

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster