Un attacco dall’impatto devastante che sfrutta una vulnerabilità hardware, unita alla versatilità di JavaScript.
- Cos’è l’attacco SMASH?
- Cos’è l’esecuzione speculativa?
- Come funziona un attacco SMASH?
- Le vulnerabilità dei browser
- Come difendersi da un attacco SMASH?
JavaScript, un linguaggio che di certo non ha bisogno di presentazioni.
Nato negli anni 90 e all’inizio impiegato solo per semplici animazioni, oggi è diventato un pilastro del web moderno.
Tutto grazie alla sua versatilità e alla capacità di essere eseguito lato client.

Con il tempo, però, queste sue caratteristiche lo hanno reso un bersaglio appetibile da parte dei cybercriminali.
Constatando la possibilità di essere eseguito perfino da remoto, questi hanno pensato di sfruttarlo per scopi naturalmente malevoli.
Il risultato è stato l’aver sviluppato attacchi sofisticati e difficili da individuare in tempo.
Di sicuro il più riuscito di questi risponde al nome di SMASH, uno dei principali veicoli di conversione al lato oscuro di JavaScript.
Ma come sempre, andiamo con ordine e affrontiamo per gradi l’argomento.
Cos’è l’attacco SMASH?
SMASH, acronimo di Simple Many And Short Hashing, è un attacco che sfrutta le vulnerabilità intrinseche all’architettura alla base dei moderni processori.
Il target dell’attacco è la memoria cache, su cui viene sfruttato un meccanismo di hashing corto, ripetuto costantemente. Ciò permette all’attore malevolo di eseguire operazioni speculative sui dati temporanei memorizzati proprio in quella memoria.
La categoria di attacchi in cui SMASH si inserisce, è conosciuta come side-channel e non è molto diverso da un altro tipo di attacco: l’hammering.
Questo perché in entrambi i casi il processore subisce un autentico “martellamento” mediante informazioni indirette, il quale porta inevitabilmente alla rivelazione del contenuto di dati cifrati. Questi sono solitamente chiavi crittografiche, credenziali di accesso, token di autenticazione, eccetera eccetera.
La peculiarità di SMASH non è tanto legata alla tipologia di attacco, ma alla sua messa in atto.
Sfruttando il linguaggio di programmazione JavaScript, eseguito all’interno di un qualsiasi browser web, gli attaccanti eseguono ogni mossa lato client.
Ciò è possibile in quanto JavaScript è un linguaggio interpretato, piuttosto che compilato. Un attacco tradizionale per impossessarsi dei dati sensibili degli utenti, deve necessariamente prendere di mira l’hardware o il software.
SMASH, invece, riesce a unirli entrambi sapientemente in questo modo:
- Lato hardware: viene sfruttata la vulnerabilità dell’esecuzione speculativa presente nell’architettura del processore;
- Lato software: vengono sfruttate le capacità del browser di eseguire qualsiasi script in JavaScript;
A conti fatti si tratta di una tecnica non molto diversa da Spectre e Meltdown, due vulnerabilità critiche apparse nel 2018.
Questo perché il modus operandi di SMASH è estremamente simile, in quanto si concentra specificamente sulla manipolazione della cache attraverso esecuzioni ripetute e rapide di hashing.
Cos’è l’esecuzione speculativa?
Prima di parlare di come funziona effettivamente un attacco SMASH, è necessario introdurre un argomento fondamentale alla sua comprensione: l’esecuzione speculativa.
Si tratta di una tecnica di ottimizzazione implementata nell’architettura dei processori multi-core, in grado di aumentare prestazioni ed efficienza.
Questa fa sì che un processore sia in grado di prevedere quali operazioni saranno eseguite successivamente, potendo così iniziare ad elaborare i dati prima ancora che il flusso di esecuzione di un programma lo richieda. Se ad un certo momento del flusso il lavoro svolto anticipatamente si dimostra non richiesto dal programma, i risultati ottenuti vengono semplicemente ignorati.
L’obiettivo dell’esecuzione speculativa è quello di creare maggiore concorrenza quando sono disponibili risorse supplementari.
L’esempio per antonomasia è il parallelismo, in cui la tecnica diviene molto utile per prevedere le diramazioni di esecuzione del flusso di esecuzione sulla pipeline dei processori. Un’altra applicazione pratica avviene nel precaricamento della memoria e dei file da elaborare, oltre al controllo di concorrenza ottimistica nei database. Tuttavia, è bene sottolineare che, sebbene questo approccio aumenti significativamente le prestazioni, è responsabile dell’introduzione di vulnerabilità che possono essere sfruttate in attacchi side-channel.
Quella più critica è legata proprio ai dati elaborati in anticipo e scartati dal flusso di esecuzione. Questi vengono sì cancellati dalla memoria cache, ma alcune loro tracce permangono comunque al suo interno. Per cui un attaccante può decidere di ricostruirle e ottenere l’informazione completa, ricorrendo proprio alla manipolazione della stessa con l’hashing corto ripetuto.
Come funziona un attacco SMASH?
Per realizzare un attacco SMASH, l’attore malevolo sfrutta una serie di tecniche che gli permettono di accedere in maniera diretta alla cache L1. La scelta non è casuale, in quanto si tratta della porzione di memoria integrata in ciascun core dei moderni processori. Il codice JavaScript malevolo viene iniettato in una pagina web compromessa, sfruttando un attacco di tipo cross-site scripting (XSS). In tal modo gli attaccanti non hanno alcuna necessità di prendere il controllo totale del sistema della vittima, ma ingannano la fiducia del browser, poiché tutto avviene lato client.
Quando la pagina compromessa viene aperta, lo script malevolo effettua un’operazione di cache timing.
Questa è molto importante in quanto, misurando accuratamente il tempo che un processore impiega nell’accedere a specifiche locazioni di memoria, è possibile ricostruire il pattern completo delle sue operazioni recenti. Per far ciò, SMASH esegue un grande volume di operazioni di hashing ripetute su piccole porzioni dei dati. Ciascuna di queste è monitorata attraverso il calcolo delle differenze nei tempi di accesso. Queste determinano la variabilità nei tempi di risposta del processore e permettono agli attaccanti di capire cosa sia presente nella cache in un determinato momento.
A questo punto lo script malevolo induce il processore ad eseguire calcoli speculativi. Successivamente manipola la cache, per ricostruire parte delle informazioni segrete elaborate durante l’esecuzione speculativa. Ciò consente all’attaccante di accedere a dati che normalmente non sarebbero leggibili dal livello browser. Le informazioni vengono così estratte dalla cache e trasferite al server C&C. Poiché queste non sono integre, ma frammentate, SMASH effettua svariate iterazioni per ricostruirle. Al termine del processo si ottengono chiavi di criptazione, credenziali di accesso e token di autenticazione. Il tutto senza che l’utente possa minimamente accorgersene.
Le vulnerabilità dei browser
Come abbiamo potuto constatare, la chiave del successo di SMASH risiede tutta nell’esecuzione speculativa.
Le sue implicazioni sono molto pesanti, dato che le normali misure di sicurezza vengono aggirate facilmente. Nulla possono la memoria protetta o la crittografia end-to-end, in quanto anche queste vengono superate lato software. Il problema principale è legato alle vulnerabilità dei browser e alla loro capacità di eseguire nativamente il codice JavaScript. Ciò significa che qualsiasi utente è inconsapevolmente a rischio.
L’attacco basa la sua efficacia su alcune peculiarità dei browser moderni, di cui si citano:
- Web Worker
Consentono di eseguire operazioni JavaScript in parallelo, senza bloccare l’interfaccia utente.
Tuttavia, l’esecuzione simultanea di script su thread separati può essere sfruttata per aumentare l’efficacia degli attacchi side-channel, come SMASH.
I web workers, infatti, possono continuare a eseguire codice malevolo anche quando l’utente non interagisce attivamente con la pagina. - API JavaScript avanzate
Le API moderne, come la SharedArrayBuffer, forniscono strumenti potenti per gestire operazioni a basso livello, inclusa la manipolazione diretta della memoria condivisa tra diversi thread. Questa funzionalità, se non adeguatamente controllata, può consentire a un attaccante di implementare attacchi side-channel molto efficaci. - Esecuzione di script in background
Una vulnerabilità chiave dei browser è la capacità di eseguire script in background.
In molti casi, gli utenti aprono pagine web e successivamente le lasciano attive in una scheda secondaria o inattiva. Questo consente al codice malevolo di continuare a raccogliere informazioni senza essere notato, soprattutto se le operazioni di raccolta dati sono progettate per essere a basso impatto in termini di risorse.
Come difendersi da un attacco SMASH?
Una misura contenitiva universale per difendersi da un attacco del genere, sfortunatamente non esiste.
Questo perché le contromisure richiedono un approccio multilivello, sia lato hardware, che software. Di seguito sono riportati alcuni consigli in merito.
- Installare le nuove patch di aggiornamento hardware
Dato che l’attacco sfrutta vulnerabilità legate alla cache e all’esecuzione speculativa, i produttori di processori, come Intel e AMD, hanno rilasciato aggiornamenti di microcodice che mitigano questi rischi.
Alcune patch hardware riducono l’esposizione della cache durante l’esecuzione speculativa, mentre altre introducono delay che impediscono il cache timing. - Effettuare regolarmente l’aggiornamento dei propri browser
Aggiornare costantemente i propri browser deve essere la prima regola in questo contesto. Questo perché le ultime versioni di Firefox, Safari, o Chrome, implementano delle restrizioni all’accesso a funzionalità potenzialmente pericolose. Inoltre, vengono utilizzate tecniche di randomizzazione per i tempi di accesso alla memoria. Tale misura rende più difficile per un attaccante ricostruire dati basandosi sui timing. - Installare estensioni per la gestione degli script all’interno del browser
Molti browser supportano delle estensioni in grado di bloccare l’esecuzione di codice JavaScript su siti non affidabili.
Tra quelle più efficaci e gettonate si citano NoScript e uBlock Origin, entrambe pienamente supportate da Mozilla Firefox. Con il loro uso si previene il rischio di eseguire codice malevolo inconsapevolmente. - Effettuare un monitoraggio costante delle attività anomale
L’impiego di strumenti di monitoraggio della rete devono essere l’imperativo moderno.
In tal modo gli amministratori di rete e gli utenti avanzati possono utilizzare rilevare comportamenti anomali sin da subito. Se è in corso l’esecuzione eccessivo di script o vi è un consumo intenso di CPU, allora significa che un attacco side-channel è in corso. In tal modo si stronca sul nascere la messa in atto di un attacco come SMASH.
In conclusione
SMASH dimostra che i confini tra software e hardware sono divenuti sempre più labili.
Questo perché tecniche studiate per ottenere un vantaggio prestazionale, divengono uno strumento di attacco. Ciò lo rende uno degli attacchi più subdoli e sofisticati mai apparse sulla scena informatica. L’idea che un semplice codice JavaScript possa essere utilizzato per sottrarre informazioni sensibili, solleva interrogativi preoccupanti sulla tenuta delle nostre difese digitali. In un mondo in cui l’evoluzione tecnologica procede a ritmi sempre più rapidi, è essenziale che utenti e professionisti adottino una mentalità proattiva.
L’innovazione, che dovrebbe essere sinonimo di progresso, rischia di diventare il campo di battaglia su cui si giocano i nostri diritti fondamentali. Per questo, la sicurezza informatica non è solo una questione tecnica, ma una sfida critica per la protezione delle libertà personali.
