
Cross-site Scripting (XSS) è un attacco di iniezione di codice lato client . L'autore dell'attacco mira a eseguire script dannosi in un browser Web della vittima includendo codice dannoso in una pagina Web o un'applicazione Web legittima. L'attacco vero e proprio si verifica quando la vittima visita la pagina Web o l'applicazione Web che esegue il codice dannoso. La pagina web o l'applicazione web diventa un veicolo per consegnare lo script dannoso al browser dell'utente. I veicoli vulnerabili comunemente utilizzati per gli attacchi di Cross-site Scripting sono forum, bacheche e pagine Web che consentono commenti.
Una pagina Web o un'applicazione Web è vulnerabile a XSS se utilizza input utente non sanificato nell'output che genera. Questo input dell'utente deve quindi essere analizzato dal browser della vittima. Gli attacchi XSS sono possibili in VBScript, ActiveX, Flash e persino CSS. Tuttavia, sono più comuni in JavaScript, principalmente perché JavaScript è fondamentale per la maggior parte delle esperienze di navigazione.
"Lo scripting cross-site non è il problema dell'utente?"
Se un utente malintenzionato può abusare di una vulnerabilità XSS su una pagina Web per eseguire JavaScript arbitrario nel browser di un utente, la sicurezza di quel sito Web vulnerabile o dell'applicazione Web vulnerabile e dei suoi utenti è stata compromessa. XSS non è un problema dell'utente come qualsiasi altra vulnerabilità di sicurezza. Se colpisce i tuoi utenti, colpisce te.
Il cross-site Scripting può anche essere usato per deturpare un sito web invece di prendere di mira l'utente. L'autore dell'attacco può utilizzare script iniettati per modificare il contenuto del sito Web o persino reindirizzare il browser a un'altra pagina Web, ad esempio una che contiene codice dannoso.
Cosa può fare l'attaccante con JavaScript?
Le vulnerabilità XSS sono percepite come meno pericolose rispetto, ad esempio, alle vulnerabilità SQL Injection. Le conseguenze della capacità di eseguire JavaScript su una pagina Web potrebbero non sembrare disastrose all'inizio. La maggior parte dei browser Web esegue JavaScript in un ambiente strettamente controllato. JavaScript ha un accesso limitato al sistema operativo dell'utente e ai file dell'utente. Tuttavia, JavaScript può comunque essere pericoloso se utilizzato in modo improprio come parte di contenuti dannosi:
- JavaScript dannoso ha accesso a tutti gli oggetti a cui ha accesso il resto della pagina web. Ciò include l'accesso ai cookie dell'utente. I cookie vengono spesso utilizzati per memorizzare token di sessione. Se un utente malintenzionato può ottenere il cookie di sessione di un utente, può impersonare quell'utente, eseguire azioni per conto dell'utente e ottenere l'accesso ai dati sensibili dell'utente.
- JavaScript può leggere il DOM del browser e apportarvi modifiche arbitrarie. Fortunatamente, questo è possibile solo all'interno della pagina in cui è in esecuzione JavaScript.
- JavaScript può utilizzare l'XMLHttpRequestoggetto per inviare richieste HTTP con contenuto arbitrario a destinazioni arbitrarie.
- JavaScript nei browser moderni può utilizzare le API HTML5. Ad esempio, può accedere alla geolocalizzazione, alla webcam, al microfono e persino a file specifici dell'utente dal file system dell'utente. La maggior parte di queste API richiede l'attivazione dell'utente, ma l'autore dell'attacco può utilizzare l'ingegneria sociale per aggirare tale limitazione.
Quanto sopra, in combinazione con l'ingegneria sociale, consente ai criminali di eseguire attacchi avanzati tra cui il furto di cookie, l'installazione di trojan, keylogging, phishing e furto di identità. Le vulnerabilità XSS forniscono il terreno perfetto per intensificare gli attacchi a quelli più gravi. Cross-site Scripting può essere utilizzato anche in combinazione con altri tipi di attacchi, ad esempio Cross-Site Request Forgery (CSRF) .
Esistono diversi tipi di attacchi Cross-site Scripting: XSS archiviato/persistente, XSS riflesso/non persistente e XSS basato su DOM. Puoi leggere di più su di loro in un articolo intitolato Tipi di XSS.
Come funziona lo scripting cross-site
Ci sono due fasi per un tipico attacco XSS:
- Per eseguire codice JavaScript dannoso nel browser di una vittima, un utente malintenzionato deve prima trovare un modo per iniettare codice dannoso (payload) in una pagina Web visitata dalla vittima.
- Successivamente, la vittima deve visitare la pagina Web con il codice dannoso. Se l'attacco è diretto a determinate vittime, l'autore dell'attacco può utilizzare l'ingegneria sociale e/o il phishing per inviare un URL dannoso alla vittima.
Affinché il primo passaggio sia possibile, il sito Web vulnerabile deve includere direttamente l'input dell'utente nelle sue pagine. Un utente malintenzionato può quindi inserire una stringa dannosa che verrà utilizzata all'interno della pagina Web e trattata come codice sorgente dal browser della vittima. Esistono anche varianti di attacchi XSS in cui l'attaccante induce l'utente a visitare un URL utilizzando l'ingegneria sociale e il payload fa parte del collegamento su cui l'utente fa clic.
Come prevenire XSS
Per proteggerti da XSS, devi disinfettare il tuo input. Il codice dell'applicazione non dovrebbe mai inviare i dati ricevuti come input direttamente al browser senza verificarne la presenza di codice dannoso.