xss

Un attacco cross-site scripting, noto in gergo anche come attacco XSS, consiste nell’iniettare script dannosi nel codice dei siti web legittimi.

E’ una minaccia che sfrutta le falle di programmazione principalmente nelle sezioni di input utente, come form o questionari.

Le vulnerabilità XSS sono oggi una delle prime 10 preoccupazioni di sicurezza informatica, soprattutto perché molte aziende utilizzano app web e mobile per interagire con i clienti.

In ogni caso, attendendosi a norme di security-by-design ed effettuando periodici test di sicurezza, gli sviluppatori possono facilmente prevenire, rilevare e riparare potenziali vulnerabilità.

In questo articolo, dunque, approfondiremo come funziona un attacco XSS, le diverse tipologie in circolazione, nonché le principali soluzioni per prevenirlo.

Cos’è il Cross-site scripting

Come accennato in apertura, in un attacco cross-site scripting l’hacker inserisce gli script maliziosi nel codice sorgente di un sito web.

Il browser dell’utente, tuttavia, è incapace di distinguere se determinate porzioni di codice siano attendibili o meno. Ne consegue che, all’apertura del portale web infetto, quegli script dannosi verranno eseguiti dinamicamente e senza alcun tipo di protezione, .

Di solito questi script sono scritte in linguaggio

  • Javascript
  • HTML
  • Flash,
  • ActiveX
  • o WBScript

ma si possono condividere anche download dannosi, plugin o media, quindi come elementi solo in apparenza transitori.

Ma, nello specifico, quali dati vengono carpiti da un attacco XSS?

Fondamentalmente, poiché il codice malizioso viene inserito in corrispondenza di qualsiasi sezione di input utente, i principali obiettivi sono:

A ciò si aggiungono script che, al contrario, prendono di mira il client

Inoltre gli attacchi XSS possono essere particolarmente efficaci perché appaiono all’interno di un sito web di fiducia.

In sintesi:

  • XSS è un attacco eseguito su app web vulnerabili
  • i contenuti dannosi vengono principalmente implementati tramite JavaScript, HTML, Flash, ActiveX e WBScript.

Come funziona l’XSS

Gli attacchi XSS, dunque, fanno sì che il browser esegua dinamicamente lo script dannoso sul browser della vittima.

Quando ciò avviene, il cybercriminale può compromettere completamente la sua interazione con l’applicativo.

Esistono due fasi all’interno di un tipico attacco XSS:

  • Trovare una vulnerabilità: per eseguire il JavaScript (HTML, Flash, ecc.) dannoso nel browser dell’utente, bisogna prima trovare un modo per iniettare il codice (payload) in una pagina web che questi visita abitualmente
  • Spingere la vittima a visitare la pagina: l’utente deve visitare la pagina web con il codice dannoso. Se l’attacco è diretto a qualcuno in particolare, il criminale può utilizzare l’ingegneria sociale e/o un tentativo di phishing per inviare un URL dannoso da cliccare.

Quando l’aggressore riesce a sfruttare le vulnerabilità XSS, può

  • accedere alle credenziali dell’account.
  • nonché, diffondere worm
  • visualizzare la cronologia del browser o controllarlo da remoto

Dopo aver ottenuto il controllo del sistema della vittima, può anche analizzare e utilizzare altre applicazioni Intranet.

Vediamo ora come funziona un semplice attacco XSS:

  • Il cybercriminale inietta un payload nel database del sito web inviando il codice malizioso
  • La vittima richiede la pagina web dal server
  • Il server apre sul browser la pagina con il payload malevolo come parte del codice sorgente
  • Il browser della vittima esegue lo script.
  • l’hacker si trova, quindi, in possesso di informazioni sensibili, privilegi di accesso, e cookie di sessione
  • Il malintenzionato ora può usare il cookie rubato alla vittima.

Dopo aver compreso come funziona un attacco cross-site scripting, scopriamone le tipologie.

Tipi di vulnerabilità XSS

Esistono tre tipologie principali di vulnerabilità XSS. Vediamone brevemente le principali caratteristiche.

XSS Riflesso

Lo script dannoso proviene dall’attuale richiesta HTTP. Questa è la tipologia di cross-site scripting più semplice. Un attacco riflesso è di solito inviato via mail o da un sito web neutrale. L’esca è un URL che punta ad un sito attendibile, ma che in realtà contiene un vettore XSS. Se il sito è vulnerabile a quel vettore, il click sul link può causare l’esecuzione di script malevoli.

XSS Persistente

In questo caso, il codice malizioso  proviene dal database del sito web ed è una variante più devastante di cross-site scripting. Si verifica quando i dati forniti dal malintenzionato vengono salvati sul server, e quindi visualizzati in modo permanente sulle pagine normalmente fornite agli utenti durante la  navigazione. Lo script dannoso è fornito automaticamente senza la necessità di indirizzare la vittima o attirarla su un sito di terze parti.

XSS Locale o basato su DOM

Questa tipologia di attacco XSS sfrutta una vulnerabilità presente nel Document Object Model (DOM) del sito, e non nel codice sorgente. Gli elementi più spesso presi di mira sono: l’URL, il suo ancoraggio e il referrer. Pertanto, non venendo attaccato direttamente l’HTML del sito, questo tipo di attacco risulta piuttosto ostico da individuare, rendendo necessaria l’analisi nel runtime o direttamente del DOM.

Solo dopo aver compreso le differenze tra le vulnerabilità possiamo passare alla domanda fondamentale: come possiamo prevenire gli attachi cross-site scripting?

Come prevenire gli attacchi

La prevenzione delle vulnerabilità XSS in alcuni casi può apparire banale, ma può diventare molto più difficile a seconda della complessità dell’applicazione e dei modi in cui gestisce i dati in input dall’utente.

Per proteggerti, è necessario scansionare regolarmente il tuo sito o l’applicazione. I tuoi sviluppatori dovrebbero aggiornare periodicamente il codice per eliminare le vulnerabilità.

Contrariamente all’opinione comune, infatti, i firewall non proteggono dagli XSS, rendono solo l’attacco più difficile, ma non correggono la falla in sé.

Le lacune possono essere difficili da identificare e rimuovere da un’applicazione.

Il modo migliore per trovarle è eseguire una revisione della sicurezza del codice e cercare tutti i luoghi in cui l’input da una richiesta HTTP potrebbe eventualmente farsi strada nell’output HTML.

Ricorda: se una parte di un sito web è vulnerabile, c’è un’alta probabilità che ci siano anche altri problemi.

In generale, per prevenire efficacemente gli attacchi, posso consigliarti le seguenti misure:

  • Mantenere l’awareness: per proteggere la tua applicazione, tutti i soggetti coinvolti nella sua creazione devono essere a conoscenza dei rischi associati alle vulnerabilità XSS. E’ necessario fornire una formazione di sicurezza adeguata a tutti i tuoi sviluppatori, al personale di controllo qualità e amministratori di sistema.
  • Applica la policy zero-trust: tratta tutti gli input dell’utente come non attendibili. Qualsiasi input utente  utilizzato come parte dell’output HTML introduce il rischio di XSS. Tratta l’input da utenti autenticati e/o interni nello stesso modo in cui tratti gli input pubblici.
  • Usa escaping/encoding: utilizzare queste stringhe in maniera appropriata a seconda di dove deve essere utilizzato l’input dell’utente. Usa le librerie JavaScript esistenti per l’escaping, non scriverne una tua se non assolutamente necessario.
  • Imposta il flag HttpOnly: per mitigare le conseguenze di una possibile vulnerabilità XSS, imposta il flag HttpOnly per i cookie. Così facendo, tali cookie non saranno accessibili tramite JavaScript sul lato client.
  • Utilizza una Content Security Policy: minimizza le conseguenze di una possibile vulnerabilità XSS utilizzando una politica di sicurezza dei contenuti. CSP è un’intestazione di risposta HTTP che consente di dichiarare le risorse dinamiche che possono caricare a seconda della fonte di richiesta.
  • Scansiona regolarmente: le vulnerabilità XSS possono essere introdotte dagli sviluppatori o tramite librerie/moduli/software esterni. Dovresti scansionare regolarmente le tue applicazioni web utilizzando uno scanner di vulnerabilità.

Lato utente, le best practice da seguire prevedono:

  • disabilitare lo scripting
  • evitare di fare click su link sospetti
  • aggiornare periodicamente i software,
  • nonché eliminare gli applicativi utilizzati raramente

Conclusioni

Anche se un attacco cross-site scripting si verifica nel browser dell’utente finale, potrebbe, però, utilizzare come vettore una falla del tuo sito web e/o app.

Ad esempio una vulnerabilità XSS che consente ad un malintenzionato di modificare un comunicato stampa o un articolo di notizie potrebbe influire sul prezzo delle azioni di un’azienda o ridurre la fiducia dei consumatori.

In sintesi, dunque, anche in materia di prevenzione da attacchi XSS, è sempre consigliabile rivolgersi a consulenti esperti in cybersecurity. Questi saranno in grado di individuare le vulnerabilità sfruttabili in un attacco XSS, impedendo che il proprio portale diventi vettore della minaccia.

Cyberment Srl

Cyberment è un’azienda specializzata in consulenza di sicurezza informatica. Il nostro red team è composto da hacker etici e specialisti in cybersecurity che operano in questo settore da oltre 20 anni.

Ci occupiamo di identificare le vulnerabilità informatiche nei sistemi e nelle applicazioni web tramite servizi di Vulnerability Assessment e Penetration Test.

Siamo un’azienda di sicurezza informatica certificata ISO 9001, ISO 27001, nonché azienda etica. Abbiamo sede legale a Milano e sede operativa a Porto Mantovano, mentre Londra è il cuore del nostro reparto ricerca e sviluppo.

Se desideri conoscere in modo approfondito i nostri servizi di prevenzione dalle minacce informatiche, contattaci!