Il cross site scripting, o XSS, è una vulnerabilità informatica che affligge le pagine e i siti web dinamici quando questi non hanno controlli sufficienti all’interno dei campi input o nei form. Sostanzialmente consiste nell’iniezione di codice attraverso linguaggi vb script o javascript all’interno di una pagina web.
Un XSS funziona sempre lato client, ciò significa che non attaccano il server del sito web, ma sfruttano la vulnerabilità presente nel sito per infettare il dispositivo della vittima attraverso il browser, durante l’esecuzione di una pagina web.
Che tipo di XSS esistono?
Esistono due tipologie principali di XSS: le reflected XSS (non persistent) e le stored XSS (o persistent)
Reflected XSS:
Gli attacchi reflected sono quelli più comuni, sono trasmessi infatti via url o email, contenente un URL esca che contenente un vettore XSS.
Gli attacchi reflected sono quelli in cui lo script iniettato viene riflesso dal server web, come in un messaggio di errore, un risultato di ricerca, o qualsiasi altra risposta che include alcuni o tutti gli input inviati al server come parte della richiesta.
Quando un utente viene indotto con l’inganno a cliccare su un link dannoso, a inviare un modulo appositamente creato, o anche solo a navigare su un sito dannoso, il codice iniettato viaggia verso il sito web vulnerabile, che riflette l’attacco al browser dell’utente. Il browser quindi esegue il codice perché proviene da un server “affidabile”.
Stored XSS:
Un XSS stored è più grave del precedente perché i dati inseriti all’interno dell’input vengono inviati al server e salvati all’interno del database dopodiché il server risponderà con gli stessi dati, causando nuovamente il XSS.
Le conseguenze degli attacchi XSS
Un XSS utilizzata da un cybercriminale potrebbe portare ad una serie di attacchi come la raccolta di informazioni, il reindirizzamento di informazioni riservate o la manipolazione e l’alterazione del comportamento dinamico delle pagine web interessate. Gli attacchi XSS più gravi comportano la divulgazione dei cookie di sessione dell’utente, permettendo ad un attaccante di dirottare la sessione dell’utente e prendere il controllo dell’account. Altri attacchi dannosi includono la divulgazione di file dell’utente finale, l’installazione di programmi Trojan horse, il reindirizzamento dell’utente a qualche altra pagina o sito, o la modifica della presentazione del contenuto.
Come prevenire gli attacchi XSS?
Nonostante siano lato client, i proprietari di un sito web devono assicurarsi che nel sito non siano presenti questo tipo di vulnerabilità
Sicuramente la prima cosa da fare è seguire le linee guida OWASP, la fondazione internazionale che lavora per migliorare la sicurezza del software attraverso progetti open source ed una comunità di migliaia di membri in tutto il mondo. Secondo il “OWASP Cross Site Scripting Prevention Cheat Sheet”, le vulnerabilità XSS possono essere eliminate controllando estensivamente tutti gli input passati dall’utente tramite l’ausilio di librerie apposite. Ecco le 8 regole individuate dalla OWASP per prevenire questo tipo di attacchi:
RULE #0
La regola base è negare tutto: Non inserite alcun dato non controllato e non fidato all’interno dell’HTML di risposta.
RULE #1
Quando vuoi inserire dati non attendibili direttamente nel corpo dell’HTML, assicurati di encodarlo tramite HTML Entity per evitare che possano essere iniettati tag HTML nella pagina.
RULE #2
Per inserire dati non attendibili nei valori degli attributi comuni dell’HTML come larghezza, nome, valore, ecc., è consigliabile encodare gli attributi.
RULE #3
Effettuare l’encoding Javascript prima di inserire dati non validati all’interno di JS stesso (come values, variabili, ecc..)
In un mondo Web 2.0, la necessità di avere dati generati dinamicamente da un’applicazione in un contesto JavaScript è comune. Una strategia è quella di fare una chiamata AJAX per ottenere i valori, ma questo non è sempre performante. Spesso, un blocco iniziale di JSON viene caricato nella pagina per agire come un unico posto per memorizzare più valori. Questi dati sono difficili, anche se non impossibili, da codificare (o effettuarne l’escaping) correttamente senza rompere il formato e il contenuto dei valori.
RULE #4
Encodare i CSS prima di inserire dati non attendibili nei valori delle proprietà di stile HTML.
I CSS sono sorprendentemente potenti e possono essere usati per numerosi attacchi. Perciò è importante che usiate dati non fidati solo in un valore di proprietà e non in altri posti nei dati di stile. Dovresti stare lontano dal mettere dati non attendibili in proprietà complesse come url, behavior e custom (-moz-binding).
RULE #5
Codificare l’URL prima di inserire dati non attendibili nei valori dei parametri dell’URL.
RULE #6
Sanitizzare il markup HTML con una libreria apposita. Ce ne sono diverse disponibili presso OWASP che sono semplici da usare, una di queste è HtmlSanitizer.
RULE #7
Evitare gli URL JavaScript. Assicuratevi di convalidare tutti gli URL non attendibili per assicurarvi che contengano solo schemi sicuri come HTTPS.
RULE #8
Prevenire gli XSS basati su DOM. Per i dettagli su cosa sia l’XSS basato su DOM e le difese contro questo tipo di falla XSS, vi consigliamo di consultare l’articolo di OWASP su DOM based XSS Prevention Cheat Sheet.
Bonus Rules
Prevenire tutte le falle XSS in un’applicazione è difficile, come potete vedere. Per aiutare a mitigare l’impatto di una falla XSS sul vostro sito, OWASP raccomanda anche di impostare il flag HTTPOnly sul vostro cookie di sessione e su qualsiasi cookie personalizzato che avete e che non è accessibile da qualsiasi JavaScript che avete scritto.
C’è un’altra buona soluzione complessa per mitigare l’impatto di una falla XSS chiamata Content Security Policy. Si tratta di un meccanismo lato browser che permette di creare liste di permessi di origine per le risorse lato client della vostra applicazione web, ad esempio JavaScript, CSS, immagini, ecc. CSP tramite una speciale intestazione HTTP indica al browser di eseguire o renderizzare solo le risorse da quelle fonti.
Come funzionano tecnicamente gli XSS? Scopritelo nel nostro video.
In questo video il nostro DevSecOps engineer Mattia Zignale, dopo avere introdotto la vulnerabilità XSS, vi mostrerà come funziona tecnicamente.
Se questo contenuto vi è stato utile continuate a seguire il nostro Blog o il nostro canale Youtube, ogni settimana approfondiremo un attacco informatico o una vulnerabilità con il nostro DevSecOps engineer Mattia Zignale.
Servizio
Cybersecurity
Sviluppiamo strategie di security che possano prevenire gli attacchi informatici, gestire rischi, evitare downtime e malfunzionamenti e proteggere informazioni e dati sensibili.
Approfondisci