[Black Hat] Tool per interrogare la cache di un utente (2007)
L'exploit del marzo 2007: leggere lo storico di navigazione dalla cache del browser e profilare l'utente senza consenso.
1. L'esperimento del marzo 2007: profilare senza chiedere permesso
Nel marzo 2007 pubblicai su questo blog un esperimento che fece discutere la comunità tecnica italiana: un tool capace di interrogare silenziosamente lo stato del browser dell'utente per determinare quali siti avesse precedentemente visitato, tracciandone un profilo professionale senza alcun modulo o consenso esplicito.
All'epoca scelsi volutamente di non divulgare il codice sorgente: l'esperimento dimostrava una grave violazione della privacy e intendevo evidenziare quanto l'architettura dei browser dell'epoca fosse vulnerabile all'estrazione di informazioni sensibili.
2. Il meccanismo tecnico: sniffing dello storico via CSS :visited
Come funzionava realmente l'exploit sotto il cofano?
Il vettore di attacco sfruttava una falla fondamentale nell'implementazione della pseudo-classe CSS :visited:
- Nei browser dell'epoca (Firefox, Internet Explorer, Safari pre-2010), i collegamenti ipertestuali a URL già visitati dall'utente assumevano uno stile visivo diverso (es. colore diverso o immagine di sfondo dedicata).
- Tramite JavaScript era possibile generare centinaia di tag
<a>nascosti nel DOM puntanti a URL bersaglio e interrogare immediatamente lo stile calcolato tramitewindow.getComputedStyle(element).coloro misurando i millisecondi di caricamento di risorse memorizzate in cache locale. - Se il colore corrispondeva allo stile definito per
:visited, la macchina otteneva la certezza matematica che l'utente avesse visitato quell'indirizzo specifico.
3. La matrice di profilazione sui 200 URL
Per dimostrare l'impatto pratico della falla, allestii un paniere di 200 URL rappresentativi suddivisi in 4 categorie professionali:
- SEO: forum di settore (es. GiorgioTave, Html.it, forum esteri), blog di analisti, tool di posizionamento;
- Web Marketer: portali di advertising, network pubblicitari, riviste di marketing;
- Programmatori Web: repository, siti di documentazione PHP, W3C, forum di sviluppo;
- Blogger: piattaforme di blogging, aggregatori di feed, blog network popolari.
In pochi secondi di esecuzione asincrona in background, lo script calcolava il rapporto tra i riscontri positivi nella cache e il totale degli URL di ciascun paniere, restituendo una stima probabilistica sorprendente per precisione (es. «74% probabilità SEO, 40% Web Marketer, 12% Programmatore»).
4. La chiusura della falla nei browser moderni
Questa classe di vulnerabilità (nota nella letteratura di sicurezza come CSS History Sniffing o Cache Timing Attack) venne definitivamente corretta a partire dal 2010:
- I consorzi e i produttori di browser (Mozilla, Google, Apple) modificarono le specifiche W3C: per motivi di sicurezza, le funzioni di interrogazione dello stile (
getComputedStyle) restituiscono sempre il valore dello stato non visitato (:link), impedendo agli script di leggere lo stato reale. - Venne introdotto il partizionamento della cache (Network Cache Partitioning), che isola le risorse memorizzate in base al dominio di primo livello visitato, neutralizzando i timing attack inter-sito.