Per oltre due decenni, i browser hanno convissuto con una vulnerabilità insidiosa e spesso sottovalutata: la possibilità per i siti Web di rilevare se un utente ha visitato determinate pagine tramite lo stile CSS associato ai link :visited
. Si tratta di una lacuna legata alla privacy che fa leva sulla cronologia del browser. Google ha finalmente deciso di porre fine a questa lacuna storica con un’importante modifica in arrivo su Chrome 136.
Una falla sistemica: come funziona il tracciamento via :visited
I browser Web usano differenziare visivamente i link già visitati da quelli non ancora cliccati, cambiandone il colore tramite lo pseudoselettore :visited
nei fogli di stile. Questo comportamento, seppur utile per migliorare l’esperienza dell’utente, ha aperto le porte ad attacchi in grado di determinare la cronologia di navigazione dell’utente.
Negli anni, diversi ricercatori hanno dimostrato come la vulnerabilità legata ai link :visited
potesse essere sfruttata attraverso varie classi di attacchi, ciascuna con meccanismi differenti per interagire con la cronologia di navigazione dell’utente. Tra queste tecniche citiamo, ad esempio:
- Timing attacks. Attacchi basati sulla misurazione del tempo di rendering o di risposta del browser durante l’applicazione degli stili CSS, che varia leggermente a seconda che un link sia stato visitato o meno.
- Pixel attacks. Tecniche che sfruttano modifiche impercettibili a livello di pixel per rilevare visivamente (anche tramite canvas o snapshot) se un link appare con lo stile di un link visitato.
- User interaction attacks. Attacchi che inducono l’utente a interagire con un’interfaccia contenente link appositamente generati (ad esempio tramite hover, focus o click), per rilevare differenze di comportamento o stile.
- Process-level attacks. Approcci più avanzati che tentano di sfruttare la separazione dei processi nel browser per accedere indirettamente allo stato :visited, spesso combinando più vulnerabilità o attacchi side-channel.
La soluzione di Chrome: partizionamento a tripla chiave
Con la pubblicazione di Chrome 136, Google introduce un nuovo modello di isolamento dei link visitati, basato su una tripla chiave per la memorizzazione delle visite:
- URL del link (target);
- Dominio di primo livello (quello mostrato nella barra degli indirizzi);
- Origine del frame (contesto in cui il link è visualizzato).
Questa architettura di partizionamento assicura che l’informazione relativa allo stato “visitato” di un link sia accessibile solo all’interno dello stesso sito e dello stesso contesto di origine da cui è partita la visita. In questo modo, un sito non potrà più dedurre se l’utente ha cliccato su un link a partire da una pagina HTML ospitata su un altro dominio.
Come attivare la protezione privacy oggi in Google Chrome
Gli sviluppatori Google hanno introdotto la nuova funzionalità di protezione in Chrome 132, abilitandola in via sperimentale. Sarà appunto attivata per default a partire dal rilascio della release 136 del browser. Nel frattempo, gli interessati possono abilitarla digitando quanto segue nella barra degli indirizzi quindi ponendo la corrispondente impostazione su Enabled:
chrome://flags/#partition-visited-link-database-with-self-links
Situazione negli altri browser
Sebbene anche Firefox e Safari abbiano implementato contromisure a fronte della medesima problematica, la protezione offerta non è equivalente a quella di Chrome.
Firefox, ad esempio, limita gli stili CSS applicabili ai link :visited
e impedisce agli script di accedervi, ma non adotta alcun partizionamento.
Safari applica restrizioni simili e utilizza meccanismi avanzati come Intelligent Tracking Prevention, ma non implementa ancora un modello di isolamento paragonabile a quello in via di integrazione all’interno di Chrome.
Credit immagine in apertura: iStock.com – da-kuk