Sono state scoperte due nuove vulnerabilità nel sottosistema eBPF, che consente di eseguire handler all'interno del kernel Linux in una speciale macchina virtuale con JIT. Entrambe le vulnerabilità consentono di eseguire codice con privilegi di kernel, al di fuori della macchina virtuale isolata eBPF. Le informazioni sui problemi sono state pubblicate dal team Zero Day Initiative, che organizza competizioni Pwn2Own, durante le quali quest'anno sono state dimostrate tre attacchi a Ubuntu Linux, sfruttando vulnerabilità precedentemente sconosciute (non è stato comunicato se le vulnerabilità in eBPF siano correlate a questi attacchi).
- CVE-2021-3490 — la vulnerabilità è causata dall'assenza di controlli sui limiti dei valori a 32 bit durante l'esecuzione di operazioni bit a bit AND, OR e XOR nell'eBPF ALU32. Un attaccante può sfruttare questo errore per leggere e scrivere dati al di fuori dei limiti del buffer allocato. Il problema con l'operazione XOR si manifesta a partire dalla versione del kernel 5.7-rc1, mentre AND e OR a partire dal rilascio 5.10-rc1.
- CVE-2021-3489 — la vulnerabilità è causata da un errore nell'implementazione del buffer circolare ed è legata al fatto che la funzione bpf_ringbuf_reserve non controllava se la dimensione dell'area di memoria allocata potesse risultare inferiore alla dimensione effettiva del buffer circolare ringbuf. Il problema si manifesta a partire dal rilascio 5.8-rc1.
Lo stato della correzione delle vulnerabilità nelle distribuzioni può essere monitorato su queste pagine: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Le correzioni sono disponibili anche come patch (CVE-2021-3489, CVE-2021-3490). La possibilità di sfruttare il problema dipende dalla disponibilità all'utente della chiamata di sistema eBPF. Ad esempio, nella configurazione predefinita in RHEL, per sfruttare la vulnerabilità è necessario che l'utente disponga dei diritti CAP_SYS_ADMIN.
Vale la pena notare un'altra vulnerabilità nel kernel Linux — CVE-2021-32606, che consente a un utente locale di elevare i propri privilegi a livello di root. Il problema si manifesta a partire dal kernel Linux 5.11 ed è causato da una condizione di race nell'implementazione del protocollo CAN ISOTP, che consente di modificare i parametri di binding del socket a causa della mancata installazione di adeguati blocchi nella funzione isotp_setsockopt() durante la gestione del flag CAN_ISOTP_SF_BROADCAST.
Dopo la chiusura del socket ISOTP, continua a esistere il legame con il socket destinatario, che può continuare a utilizzare le strutture associate al socket dopo aver liberato la memoria a essa associata (use-after-free a causa dell'accesso durante la chiamata a isotp_rcv() a una struttura isotp_sock già liberata). Attraverso manomissioni dei dati, è possibile ottenere la ridefinizione del puntatore alla funzione sk_error_report() e eseguire il proprio codice a livello di kernel.
Fonte: opennet.ru
