L’estensione del browser di protezione Exfil CSS offre un attacco di vulnerabilità Exfil CSS

L’estensione del browser di protezione Exfil CSS è un software che ha lo scopo di proteggere gli utenti da eventuali attacchi di exfiltration, ovvero di furto di dati sensibili da un’applicazione o un sito web. Tuttavia, recentemente è stato scoperto che questa stessa estensione può essere utilizzata come strumento per effettuare un attacco di vulnerabilità Exfil CSS. In questo caso, un malintenzionato potrebbe sfruttare l’estensione per rubare informazioni riservate dall’interno del browser dell’utente, senza che quest’ultimo si accorga di nulla. Questo tipo di vulnerabilità rappresenta una minaccia per la sicurezza informatica, e richiede pertanto la massima attenzione da parte degli utenti e degli sviluppatori di software.

La cronologia del browser: significato e funzioni

L’estensione del browser di protezione Exfil CSS offre un attacco di vulnerabilità Exfil CSS. La cronologia del browser svolge un ruolo importante in questo tipo di attacco, quindi è importante comprendere il suo significato e le sue funzioni.

Significato della cronologia del browser

La cronologia del browser è l’elenco di tutti i siti web visitati in precedenza dal browser. Questo elenco viene salvato nel computer dell’utente e può essere accessibile in qualsiasi momento. La cronologia del browser può essere utile per gli utenti che desiderano tornare a un sito web visitato in precedenza senza dover digitare nuovamente l’URL. Tuttavia, la cronologia del browser può anche essere utilizzata per tracciare le attività dell’utente e compromettere la sua privacy.

Funzioni della cronologia del browser

La cronologia del browser ha diverse funzioni, tra cui:

  • Back: la funzione “Back” del browser consente all’utente di tornare alla pagina web visitata in precedenza. Questa funzione è possibile grazie alla cronologia del browser.
  • Auto-completamento: la cronologia del browser viene utilizzata anche per il completamento automatico delle informazioni di login e di altri campi del modulo. Questo è utile per gli utenti che desiderano risparmiare tempo nel digitare le informazioni di accesso.
  • Tracciamento delle attività: la cronologia del browser può essere utilizzata per tracciare le attività dell’utente, come i siti web visitati e le ricerche effettuate. Queste informazioni possono essere utilizzate per la pubblicità mirata o per altre finalità di marketing.
  • Ricerca dei siti web visitati in precedenza: la cronologia del browser può essere utilizzata anche per trovare i siti web visitati in precedenza.

Tuttavia, la cronologia del browser può anche essere utilizzata per scopi malevoli, come l’attacco Exfil CSS. In questo tipo di attacco, un malintenzionato utilizza la cronologia del browser per recuperare informazioni sensibili, come le credenziali di accesso, dai campi di input del sito web. L’estensione del browser Exfil CSS offre un attacco di vulnerabilità che sfrutta questa tecnica.

CSS Keylogger – vecchio è di nuovo nuovo

The fascination with CSS Keyloggers

La motivazione per questo video proviene da questo esempio di keylogger CSS condiviso su Twitter e Reddit ed è incredibilmente popolare. Il repository GitHub con questo esempio ha migliaia di stelle dopo solo un giorno e trovo che tutto ciò sia affascinante. Ma prima di addentrarci in questo particolare esempio, torniamo indietro nel tempo al 2012. Nel 2012, quasi sei anni fa rispetto a questo video, ero ancora all’inizio dell’apprendimento della sicurezza. Stavo ancora leggendo e imparando molte delle basi come i vettori XSS di base. Un mio amico mi ha invitato a una piccola conferenza hacker riservata e così sono lì, un principiante completo che si sente come se non appartenesse a quelle persone, guardando queste presentazioni. E c’era una presentazione chiamata “Script-less Attacks: Attacchi in un mondo post-XSS” di Mario. Il presupposto della presentazione, come si può intuire dal titolo, riguarda un mondo senza JavaScript e senza problemi di XSS. È un esperimento mentale anzitutto perché avere una situazione del genere, in cui hai una iniezione di HTML senza contesto JavaScript, è raro, forse con politiche di sicurezza dei contenuti sempre più diffuse, meno raro, ma nel grande schema del web si potrebbe arguire che sia irrilevante o non davvero impressionante perché potrebbe non avere molto impatto. Ma per me questo stava facendo saltare la mia mente. Questa è ricerca, questa è porre una domanda interessante e ti fa pensare a tutto in un modo molto più intricato. Puoi imparare le basi dell’XSS in un pomeriggio, ma poi spingere i confini e capire fino a che punto puoi andare, è lì che diventi davvero bravo. E se sconfiggessimo l’XSS, quale superficie di attacco rimarrebbe e farebbe la differenza? Innanzitutto, devi pensare a quale sia il nostro obiettivo, cos’è che vogliamo ottenere con l’XSS? In generale, vogliamo rubare dati a cui non dovremmo accedere e vogliamo farlo con HTML che possiamo iniettare nel sito web target visitato dalla vittima. Questa presentazione mostra molte tecniche e trucchi diversi che utilizzano varie funzionalità per estrarre diversi tipi di informazioni dal sito che potrebbero essere tasti premuti per l’accesso o potrebbero riguardare i dati dei form a cui si accede come token CSRF, password o numero di carte di credito. Questa presentazione si basa effettivamente su un articolo con lo stesso nome e Mario ha presentato questa presentazione diverse volte. Tuttavia abbiamo stabilito una regola per quest’esperimento mentale: non utilizzare JavaScript, evitare l’XSS. Ora la domanda è come possiamo mitigare o bypassare questa protezione mediante l’utilizzo solo di CSS e altre cose inattive, senza l’utilizzo di JavaScript. Altre persone hanno già fatto questo alcuni anni fa, e credo che sia anche stata una splendida presentazione da parte di BlueHat e SANS. Lo è anche questa presentazione di cuore di David, che ha già fatto un lavoro simile, e c’è ancora una demo a cui si può dare un’occhiata. Hanno anche utilizzato CSS, fogli di stile in cascata. Quello che hanno fatto è stato sfruttare i selettori di attributi e dire: “ok, seleziona tutto ciò che ha un valore oppure un qualsiasi elemento di input che abbia un valore che inizi con la lettera A e assegnagli un’immagine in background che indica che abbiamo la lettera A”. Se c’era la lettera A come prima lettera inviavano l’immagine nello stesso modo con b, c, d, e, f, g, e potevano farlo anche con l’ultima lettera o con qualche lettera intermedia. Quello che non potevano fare era selezionare ad esempio l’ennesimo carattere, non potevano dire: “ei, seleziona l’elemento in cui il secondo carattere è effettivamente ABC oppure D, o qualsiasi altra lettera”. Così hanno dovuto votare per noi molto, hanno dovuto scrivere molto CSS per rendere tutto questo possibile, quasi a livello di megabyte di CSS per poterlo iniettare, quindi non era molto fattibile, inoltre non era scalabile in quanto richiedeva molto tempo per selezionare l’attacco o distribuirlo. Poi Mario ha mostrato una tecnica più efficiente e folle per portare tutto questo a termine, ma come lui ha evidenziato questa idea con selettori di attributi e caricamento di immagini in background è stata già presentata in precedenza da Eduardo S.S, Gareth Hayes e David Thorpe, adesso invece facciamo avanzare rapidamente fino al 2018 e un tweet che ho trovato a febbraio di Mike Gualtieri che apparentemente ha scoperto di nuovo questo indipendentemente e puoi vedere come lui spiega i selettori di attributi CSS e poi usa lo stesso trucco di caricamento di immagini in background a cui ha dedicato molto impegno, ha scritto un articolo dettagliato chiamandolo “rubare dati con CSS” e ha persino scritto un’estensione per Chrome e Firefox che rimuove queste regole CSS come forma di protezione. Mi sento un po’ dispiaciuto per lui perché penso che abbia pensato di aver trovato qualcosa di nuovo, ma era solo una riscoperta e sì, può succedere ed è qualcosa che accade spesso in termini di sicurezza, diversi team trovano cose in modo indipendente e magari a distanza di anni, ed è una tecnica così oscura che è molto probabile che non ne avessi mai sentito parlare se non trascorri molto tempo con la sicurezza client-side del browser e immagino di essere stato solo fortunato ad aver visto la presentazione di Mario nel 2012. Ora, alcuni giorni dopo, compare questo esempio di CSS keylogger. Non so se sia una coincidenza o se sia stato ispirato da questo articolo, ma questa persona ha creato un’estensione che simula un’iniezione di CSS in una pagina per rubare i caratteri inseriti in un campo di input. Puoi vedere il CSS iniettato qui. Utilizza il selettore di attributi CSS per un campo password di input e, in base al valore, incorpora un’immagine di sfondo da un URL che invia quel carattere a un server per raccoglierlo. Ora c’è un piccolo dettaglio qui che è piuttosto interessante. Il selettore di attributi CSS funziona sull’attributo value, quindi non funziona in un semplice esempio di HTML anche se il testo inserito è disponibile tramite la proprietà di valore dell’elemento di input, ma non è il valore attributo, quindi il selettore di CSS non viene attivato. Ecco perché l’esempio di furto della password dell’articolo sul blog imposta effettivamente il valore del campo di input dal quale desidera estrarre i caratteri tramite un parametro GET. Questa è una tecnica per rubare dati di attributi. Un altro buon obiettivo per queste tecniche è il token CSRF che di solito viene impostato come valore di input nascosto, ma l’esempio di GitHub funzionava su input in cui è sufficiente digitare. Quel piccolo dettaglio è abbastanza interessante. Fondamentalmente succede che molti framework JavaScript, come React, agiscono sugli eventi come la digitazione in un campo e propagano automaticamente questi valori nelle variabili interne, ma impostano correttamente anche l’attributo value dell’elemento di input. Fondamentalmente si può ridurre tutto a questo esempio: ad ogni evento di pressione del tasto, impostiamo l’attributo di valore sulla proprietà di valore come un test e impostiamo qui una condizione per indicare che si attiva solo quando viene rilevato il carattere X. Quindi, quando ora lo testiamo e digitiamo qualcosa nel campo, vediamo che l’attributo di valore si aggiorna di conseguenza e con una X la regola CSS scatta e potrebbe essere utilizzata per estrarre i dati e puoi osservare facilmente questo comportamento anche nel modulo di accesso di Instagram. Quindi, se Instagram avesse un’iniezione HTML e per qualche motivo non potessi eseguire JavaScript, potresti utilizzarla per rubare alcuni dati dei campi di input. Si comportamento molto interessante, vero? Ok, allora non voglio minimizzare questa ricerca e non sto dicendo che questa ricerca è stata rubata o qualcosa del genere. Li do il beneficio del dubbio, specialmente Mike sembra molto genuino e ha scoperto qualcosa di nuovo da solo, il che secondo me è impressionante e dimostra che ha un grande talento di pensatore creativo. Voglio dire, non è come se avessi pensato a questa cosa e non sono sicuro se mi sarebbe mai venuto in mente. So solo che è un esempio di ricerca fantastico che è stato fatto in passato ed è stato riscoperto o è riemerso in qualche modo. Il numero di persone interessate all’esempio di CSS keylogger mostra che molte persone non ne avevano mai sentito parlare o non si erano rese conto che fosse possibile, quindi ora più persone ne stanno venendo a conoscenza ed è fantastico. Spero di aver reso chiaro che c’è un contributo di ricerca che riconosco e non voglio essere uno di quei personaggi che si vantano di averne sentito parlare già nel 2012. Tuttavia, voglio mettere anche questo in prospettiva e devo criticare alcune cose. Il nome CSS keylogger, ok, forse la persona che l’ha creato non si aspettava che diventasse così popolare, ma è facilmente frainteso dalla maggior parte delle persone ed è spaventoso quando sentiamo keylogger, di solito pensiamo a un malware maligno che funziona in background registrando ogni battitura, ed è terrificante. Poi a volte sentiamo parlare di keylogger del browser e anche questo è un po’ più sfumato perché di solito si riferisce a battiture di tastiera catturate su un sito web specifico tramite JavaScript, che di solito è anche spaventoso perché si rifà al termine del malware keylogger, perché in tale contesto non è un keylogger a livello di sistema e il JavaScript potrebbe fare altro che sia peggiore rispetto alla semplice registrazione delle battiture e quindi questo esempio CSS è ancora meno impattante rispetto a tutto questo. Questo esempio specifico può catturare solo i valori degli attributi e di solito solo iniezioni di CSS senza XSS che è abbastanza rara, come Mario ha già affermato nel 2012, è più un esperimento mentale e una domanda di ricerca interessante piuttosto che qualcosa di realistico. Ci sono alcuni casi interessanti, ad esempio che cosa succederebbe se anche Reddit non consentisse JavaScript, ma consentisse la personalizzazione CSS, quindi dovresti sapere che queste tecniche esistono quando stai cercando problemi di sicurezza, ma sono praticamente irrilevanti per la maggior parte del mondo, l’impatto nel mondo reale potrebbe essere basso, ma, come ho già detto, è un’idea che fa saltare la mente, è come la scoperta di un nuovo pianeta lontano in una zona abitabile, molte persone dicono “a chi importa di questa roba qui sulla Terra, abbiamo problemi reali”, ma è una ricerca fantastica, sta spingendo i confini della tecnologia e ci sta aiutando a capire il mondo meglio, e quindi questi attacchi CSS ci aiutano a comprendere meglio la tecnologia web e le minacce che la riguardano e già questo è fantastico, ma diventa un problema quando questa cosa si diffonde così tanto e diventa così popolare spaventando così tante persone. Queste e molte altre tecniche sono state conosciute da oltre un decennio, il che dimostra che non è un problema o un attacco a cui dovresti preoccuparti. Quindi, rilassati, guarda i dati tecnici sottostanti, ignora la disinformazione sulla tor per gli utenti anonimi o i keylogger e apprezzate come puoi modellare il CSS per fare cose folli.