Sicurezza delle applicazioni web - Vulnerabilità XSS
Lukasz Kolko
Gli attacchi XSS consentono agli aggressori di iniettare script lato client nelle pagine Web visualizzate da altri utenti. Gli effetti principali di questa vulnerabilità sono la possibilità di eseguire qualsiasi azione nel contesto dell'utente connesso e di leggere qualsiasi dato nel contesto dell'utente connesso.
Scenario di attacco
L'attaccante individua la vulnerabilità XSS in un sito web utilizzato dalla vittima, ad esempio il sito di una banca.
La vittima è attualmente collegata a questa pagina
L'aggressore invia alla vittima un URL modificato.
La vittima clicca sull'URL
Sulla vittima banca sito web, JavaScriptcodice inizia a essere eseguito per intercettare i dati dell'utente o per eseguire un trasferimento a suo nome verso il conto dell'aggressore
Vale la pena notare che le operazioni eseguite per conto della vittima possono essere invisibili a quest'ultima, in quanto possono avvenire in background utilizzando l'API della banca, oppure l'aggressore può eseguirle successivamente con i dati necessari per l'autenticazione, i token, i cookie, ecc.
Tipi di XSS
1. XSS riflesso
È quello in cui il codice HTML/JavaScript contenuto in qualsiasi parametro (ad esempio GET, POST o cookie) viene visualizzato nella risposta.
Una pagina con un input di testo per cercare qualcosa che metta il parametro ricerca=focaccia nell'URL finale quando si interroga l'API. Dopo aver inserito una frase, se non viene trovata, viene inserito un messaggio di ritorno in HTML ex.
<div>Nessun risultato trovato per <b>pippo</b></div>
Possiamo provare a inserire l'URL search=..
2.DOM XSS
Ciò avviene quando la sua esecuzione è abilitata dall'uso di funzioni pericolose nell'JavaScript, come ad esempio `eval` o `innerHtml`. L'"esempio dal vivo" qui sotto mostra un attacco DOM XSS basato sull'elemento `innerHtml` funzione.
3. XSS memorizzato
Si tratta di un caso in cui il codice dannoso viene scritto sul lato server. Ad esempio, possiamo inviare un commento con codice dannoso a un post del blog che viene caricato sul server. Il suo compito è, ad esempio, quello di attendere la moderazione dell'amministratore e poi di rubare i dati della sua sessione, ecc.
Metodi di iniezione
1. Nel contenuto del tag
`onerror=alert('XSS')`in
<img src onerror="alert('XSS')" />
2. Nel contenuto dell'attributo
`" onmouseover=alert('XSS')` in
<div class="" onmouseover="alert('XSS')""></div>
Nel contenuto dell'attributo senza le virgolette
x onclick=avviso('XSS')in
<div class="x" onclick="alert('XSS')"></div>
Nel hrefattributo ef
javascript:alert('XSS') in
<a href="javascript:alert('XSS')"></a>
Nella stringa all'interno del codice JavaScript
";alert('XSS')// in
<script>let username="";alert('XSS')//";</script>
Nell'attributo con l'evento JavaScript
');alert('XSS')// dove ' è una citazione singola, in
Utilizzo di sistemi di template con codifica automatica. La maggior parte dei framework popolari che utilizzano tali sistemi ci proteggono dall'iniezione di XSS (Django, Templates, Vue, React ecc.)
Non utilizzare funzioni come valutazione o Funzione con dati utente non attendibili.
Non utilizzare funzioni e proprietà che assegnano codice HTML direttamente agli elementi dell'albero DOM, ad es, innerHTML, outerHTML, insertAdjacentHTML, ocumento.scrivere. Si possono invece utilizzare funzioni che assegnano il testo direttamente a questi elementi, come ad esempio testoContenuto o testo interno.
Fate attenzione quando reindirizzate l'utente a un URL che è sotto il suo controllo. Rischio di iniezione location = 'javascript('XSS')'.
Filtrare l'HTML utilizzando librerie come DOMPurificare.
Attenzione al caricamento .html o .svg file. È possibile creare un dominio separato da cui verranno serviti i file caricati.
Utilizzare il Politica di sicurezza dei contenuti meccanismo.
Date un'occhiata ai filtri anti-XSS integrati nei browser più diffusi.
Se avete trovato interessante questo articolo, seguite Lukasz su Github: https://github.com/twistezo