L'azienda Google ha pubblicato diversi prototipi di exploit che mostrano la possibilità di sfruttare vulnerabilità della classe Spectre durante l'esecuzione di codice JavaScript nel browser, eludendo i metodi di protezione aggiunti in precedenza. Gli exploit possono essere utilizzati per ottenere accesso alla memoria del processo che gestisce il contenuto web nella scheda attuale. Per testare il funzionamento dell'exploit, è stato avviato il sito leaky.page, e il codice con la descrizione della logica di funzionamento è stato caricato su GitHub.
Il prototipo proposto è progettato per attaccare sistemi con processori Intel Core i7-6500U in un ambiente Linux e Chrome 88. Per applicare l'exploit in altri ambienti sono necessarie modifiche. Il metodo di sfruttamento non è specifico per i processori Intel: dopo adeguata adattazione, è stato confermato che l'exploit funziona su sistemi con CPU di altri produttori, incluso l'Apple M1 basato su architettura ARM. Dopo lievi modifiche, l'exploit è funzionante anche in altri sistemi operativi e in altri browser basati sul motore Chromium.
In un ambiente basato su Chrome 88 e processori Intel Skylake, è riuscito a ottenere una fuga di dati dal processo che gestisce il contenuto web nella scheda Chrome attuale (renderer process), con una velocità di 1 kilobyte al secondo. Sono stati anche sviluppati prototipi alternativi, ad esempio, un exploit che consente, a costo di una riduzione della stabilità, di aumentare la velocità di fuga fino a 8 kB/s utilizzando il timer performance.now() con una precisione di 5 microsecondi (0,005 millisecondi). È stata anche preparata una versione che funziona con una precisione del timer di un millisecondo, che potrebbe essere utilizzata per accedere alla memoria di un altro processo con una velocità di circa 60 byte al secondo.
Il codice dimostrativo pubblicato è composto da tre parti. La prima parte esegue la calibrazione del timer per stimare il tempo di esecuzione delle operazioni necessarie per recuperare i dati rimasti nella cache del processore a seguito dell'esecuzione speculativa delle istruzioni della CPU. La seconda parte determina il layout della memoria utilizzato durante l'allocazione di un array JavaScript.
La terza parte sfrutta direttamente la vulnerabilità Spectre per determinare il contenuto della memoria del processo attuale mediante la creazione di condizioni per l'esecuzione speculativa di determinate operazioni, i cui risultati vengono scartati dal processore dopo aver determinato una previsione errata, ma le tracce di esecuzione vengono memorizzate nella cache condivisa e possono essere recuperate tramite metodi di determinazione del contenuto della cache attraverso canali laterali, che analizzano le variazioni nel tempo di accesso ai dati memorizzati nella cache e a quelli non memorizzati.
La tecnica di sfruttamento proposta consente di fare a meno di timer ad alta precisione, disponibili tramite l'API performance.now(), e senza supporto per il tipo SharedArrayBuffer, che consente la creazione di array in memoria condivisa. L'exploit include un gadget Spectre che provoca un'esecuzione speculativa controllata del codice e un analizzatore di perdite attraverso canali laterali, che determina i dati memorizzati nella cache ottenuti durante l'esecuzione speculativa.
Il gadget è implementato tramite un array JavaScript, in cui viene tentato l'accesso a un'area al di fuori dei limiti del buffer, influenzando lo stato del blocco di previsione dei salti a causa della presenza di un controllo della dimensione del buffer aggiunto dal compilatore (il processore esegue speculativamente l'accesso, ma ripristina lo stato dopo il controllo). Per analizzare il contenuto della cache in condizioni di imprecisione del timer, è stato proposto un metodo che inganna la strategia di espulsione dei dati dalla cache Tree-PLRU utilizzata nei processori e permette, aumentando il numero di cicli, di aumentare notevolmente la differenza nel tempo di restituzione di un valore dalla cache rispetto a un valore assente nella cache.
Si segnala che Google ha pubblicato un prototipo di exploit per dimostrare la fattibilità degli attacchi che usano le vulnerabilità di tipo Spectre e per stimolare gli sviluppatori web ad applicare tecniche che minimizzino i rischi da tali attacchi. Google ritiene che senza una riprogettazione sostanziale del prototipo proposto non sia possibile creare exploit universali, pronti non solo per la dimostrazione, ma anche per un utilizzo diffuso.
Per ridurre il rischio, ai proprietari dei siti viene suggerito di utilizzare gli header recentemente implementati Cross-Origin Opener Policy (COOP), Cross-Origin Embedder Policy (COEP), Cross-Origin Resource Policy (CORP), Fetch Metadata Request, X-Frame-Options, X-Content-Type-Options e SameSite Cookie. Questi meccanismi non proteggono direttamente dagli attacchi, ma consentono di isolare i dati del sito dalle perdite nei processi in cui può essere eseguito il codice JavaScript dell'attaccante (la fuga avviene dalla memoria del processo corrente, dove possono essere elaborati oltre al codice dell'attaccante anche i dati di un altro sito aperto nella stessa scheda). L'idea principale è quella di separare l'esecuzione del codice del sito da codice esterno proveniente da fonti inaffidabili, ad esempio incluso tramite iframe.

Fonte: opennet.ru
