Nel kernel di Linux sono state scoperte due vulnerabilità che consentono di utilizzare il sottosistema eBPF per bypassare le protezioni contro l'attacco Spectre v4 (SSB, Speculative Store Bypass). Utilizzando un programma BPF non privileggiato, un attaccante può creare condizioni per l'esecuzione speculativa di determinate operazioni e determinare il contenuto di aree di memoria arbitrarie del kernel. I sottosistemi eBPF nel kernel hanno avuto accesso a un prototipo di exploit che dimostra la possibilità di effettuare attacchi nella pratica. I problemi sono stati risolti tramite patch (1, 2) che saranno incluse nel prossimo aggiornamento del kernel Linux. Gli aggiornamenti nelle distribuzioni non sono ancora stati elaborati (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).
Il metodo di attacco Spectre 4 si basa sul ripristino dei dati memorizzati nella cache della CPU dopo che il risultato dell'esecuzione speculativa delle operazioni è stato scartato, durante l'elaborazione di operazioni di scrittura e lettura alternate utilizzando l'indirizzamento indiretto. Quando l'operazione di lettura segue l'operazione di scrittura (ad esempio, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), l'offset dell'indirizzo di lettura può già essere noto grazie all'esecuzione di operazioni simili (le operazioni di lettura vengono eseguite molto più frequentemente e la lettura può avvenire dalla cache) e la CPU può eseguire speculativamente la lettura prima della scrittura, senza attendere che venga calcolato l'offset dell'indirizzamento indiretto per la scrittura.
Se, dopo il calcolo dell'offset, viene rilevato un'intersezione tra le aree di memoria per la scrittura e la lettura, la CPU semplicemente scarta il risultato di lettura già ottenuto speculativamente e ripete l'operazione. Questa caratteristica consente all'istruzione di lettura di accedere al vecchio valore di un determinato indirizzo mentre l'operazione di salvataggio non è ancora completata. Dopo lo scarto dell'operazione speculativa non riuscita, nella cache rimangono tracce della sua esecuzione, che possono essere utilizzate per ottenere il contenuto della cache analizzando le variazioni nel tempo di accesso ai dati memorizzati e non memorizzati nella cache.
La prima vulnerabilità (CVE-2021-35477) è causata da una mancanza nel meccanismo di verifica dei programmi BPF. Per proteggere dagli attacchi Spectre 4, il verificatore aggiunge dopo le operazioni potenzialmente problematiche di salvataggio in memoria un'istruzione aggiuntiva che salva un valore nullo per soffocare le tracce dell'operazione precedente. Si supponeva che l'operazione di scrittura dello zero sarebbe stata eseguita molto rapidamente bloccando l'esecuzione speculativa, poiché dipendeva solo dal puntatore al frame dello stack BPF. Ma in realtà, è stato possibile creare condizioni in cui l'istruzione che porta all'esecuzione speculativa riesce a completarsi prima dell'operazione di salvataggio di soffocamento.
La seconda vulnerabilità (CVE-2021-3455) è legata al fatto che, quando il verificatore BPF rileva operazioni di salvataggio in memoria potenzialmente pericolose, non tiene conto delle aree non inizializzate dello stack BPF, la prima operazione di scrittura su cui non è protetta. Questa caratteristica consente la possibilità di eseguire un'operazione di lettura speculativa che dipende da un'area di memoria non inizializzata, prima di eseguire l'istruzione di salvataggio. La nuova memoria per lo stack BPF viene allocata senza controllare il contenuto già presente nella memoria allocata e, prima dell'esecuzione del programma BPF, è possibile controllare il contenuto dell'area di memoria che sarà quindi allocata per lo stack BPF.
Fonte: opennet.ru
