Dopo le recenti vulnerabilità cross-site scripting (XSS), l'FBI e la CISA hanno recentemente aumentato le loro misure di sicurezza e si sono concentrate sul miglioramento della resilienza informatica. Non sorprende che le organizzazioni spesso non riescano ad affrontare gli aspetti fondamentali, ed è così che si verificano le violazioni dei dati.
Gli attacchi cross-site scripting si verificano quando le applicazioni e i servizi web non riescono a gestire le richieste, gli input o non funzionano come previsto. Sono pericolosi perché non prendono di mira solo le applicazioni, ma anche gli utenti che le utilizzano.
Ecco una guida sugli attacchi cross-site scripting e tutto ciò che dovresti sapere sull'argomento.
Cosa sono gli attacchi Cross-Site Scripting (XSS)?
Nessuna app o sito web è perfetto; ci sono difetti nascosti. Gli attacchi Cross-site scripting sfruttano questa vulnerabilità inviando codice dannoso per causarne il malfunzionamento. Questi attacchi possono consentire a un malintenzionato di assumere l'identità della vittima e persino di impersonarla.
Lo script dannoso si nasconde all'interno dell'applicazione web, quindi non è facilmente rilevabile. Si mimetizza con il codice sorgente dell'applicazione, rendendo impossibile per i servizi verificare se proviene da fonti non attendibili. Qual è il risultato? Gli hacker ottengono l'accesso ai cookie, ai token del sito e ad altri dati sensibili raccolti dal browser web. Se il sito web o l'app distribuiscono contenuti in luoghi diversi, anche questi vengono automaticamente intercettati. Anche i forum online e le bacheche degli utenti dove è possibile lasciare commenti sotto i post sono suscettibili a questo tipo di attacchi.
Tipi di attacchi Cross-Site Scripting (XSS)
In passato, le vulnerabilità XSS hanno creato worm e compromesso le misure di sicurezza delle applicazioni. Possono diffondere malware, phishing delle credenziali e dirottare siti web di difesa.
Esistono tre tipi principali di attacchi cross-site scripting (XSS). Prima di imparare come prevenire gli attacchi XSS, è importante conoscere le minacce a cui si va incontro. Sono le seguenti.
1. XSS memorizzato (XSS persistente)
Questa è una delle forme più basilari ma pericolose di XSS. L'XSS memorizzato si riferisce al codice dannoso memorizzato nei database web quando manca la convalida dell'input. L'autore dell'attacco inietta il codice attraverso una vulnerabilità dell'applicazione web e lo memorizza in modo permanente. La vittima può eseguire lo script senza saperlo e un payload viene inviato al suo browser web come codice HTML. Una volta eseguito lo script dannoso caricando la pagina web, è tutto finito.
Un classico esempio di questo è un commento lasciato su un post di un blog. L'aggressore può allegare un URL e indurre la vittima a leggere il commento cliccandoci sopra. Quando l'utente interagisce, il codice viene eseguito automaticamente.
2. XSS riflesso (XSS non persistente)
Quando il payload di un aggressore diventa parte di quello inviato al browser web, si trasforma in un attacco XSS riflesso. La richiesta rimbalza dal browser in modo che la risposta HTTP includa il payload dalla richiesta HTTP. Gli hacker possono utilizzare una combinazione di ingegneria sociale minacce, link dannosi e altre tattiche di phishing per indurre le vittime a effettuare richieste al server. L'unico inconveniente di questa tecnica è che l'autore dell'attacco deve inviare i payload individuali alle vittime separatamente. Non è possibile inviare payload in massa; la maggior parte degli attacchi XSS riflessi viene effettuata sui social network.
3. XSS basato su DOM
L'XSS basato su DOM consiste nell'hackerare gli account degli utenti utilizzando codice Javascript dannoso proveniente da una fonte controllabile dall'autore dell'attacco. Questo codice viene trasmesso a un sink che lo esegue dinamicamente e lo esegue in modo arbitrario. L'URL del browser è la fonte più comune per questi attacchi cross-site scripting. L'autore dell'attacco aggiunge anche un link per indirizzare le vittime verso pagine vulnerabili con payload incorporati nelle stringhe di query. Può anche frammentare parti dell'URL e manipolare ulteriormente le vittime indirizzandole in modo errato.
Come funziona il cross-site scripting (XSS)?
Il cross-site scripting funziona manomettendo i siti web vulnerabili e restituendo codice JavaScript dannoso agli utenti. Quando l'aggressore inietta codice dannoso e lo esegue dall'interno del browser della vittima, può compromettere completamente le sue applicazioni e qualsiasi interazione che ne deriva.
Gli iframe cross-origin non consentono agli utenti di richiamare la funzione di avviso. Sono utilizzati per comporre alcuni degli attacchi XSS più avanzati. L'autore dell'attacco può anche ottenere il controllo dei privilegi e dell'accesso degli utenti all'interno delle applicazioni web e impossessarsi dei dati in esse contenuti.
Gli attacchi e le vulnerabilità cross-site scripting possono consentire all'autore dell'attacco di impersonare la vittima e mascherarsi come tale in tutta la rete. Possono aggirare le politiche di origine. Possono separare completamente siti web diversi.
Ecco una panoramica semplificata di come funziona un attacco cross-site scripting:
- L'autore dell'attacco ti invierà un link dannoso. Quando clicchi su di esso, il codice verrà iniettato e il contenuto dinamico verrà consegnato al browser web.
- Invierà una richiesta HTTP al server web dell'aggressore. Il dirottatore potrà quindi utilizzare i tuoi cookie rubati per impersonarti.
- Potrà accedere a informazioni sensibili ed eseguire attacchi di ingegneria sociale più avanzati.
- Gli attacchi cross-site scripting consentono agli aggressori di aggirare le politiche same-origin progettate per mantenere separati i diversi siti web. Questi attacchi sono brutali da eseguire e possono danneggiare la reputazione della tua azienda. L'avversario può danneggiare la tua organizzazione modificandone i contenuti e danneggiando o infangando l'immagine dell'azienda.
- Possono diffondere informazioni errate, modificare le istruzioni per gli utenti sui tuoi siti web e indirizzarli in modo errato.
Gli attacchi XSS sono pericolosi, soprattutto se prendono di mira agenzie governative, organizzazioni sanitarie o aziende che forniscono risorse vitali durante le crisi.
Come prevenire gli attacchi Cross-Site Scripting (XSS)?
È possibile adottare diversi approcci. Scopriteli per sapere come prevenire gli attacchi cross-site scripting:
- La convalida degli input delle applicazioni web e dei servizi può aiutare a prevenire gli attacchi cross-site scripting (XSS). È inoltre possibile utilizzare uno scanner di vulnerabilità per verificare la presenza di altre vulnerabilità di sicurezza nei propri siti web. È uno dei modi migliori per sapere come prevenire automaticamente gli attacchi (XSS).
- Il secondo modo per prevenire gli attacchi XSS è codificare i dati in uscita. Idealmente, ciò dovrebbe essere fatto prima di scrivere i dati su una pagina. Il tipo di codifica da utilizzare dipenderà dal contesto di scrittura.
- Ad esempio, i valori delle stringhe JavaScript richiederanno un tipo di codifica diverso rispetto a quelli in un contesto HTML. In un contesto HTML, è necessario convertire i valori non inclusi nella whitelist in entità HTML. In un contesto stringa JavaScript, invece, è necessario garantire l'escape Unicode per i valori non alfanumerici.
- Potrebbero essere necessari più livelli di codifica e questo processo deve essere applicato nell'ordine corretto. È necessario incorporare gli input dell'utente nei gestori di eventi e gestire i contesti HTML e JavaScript. Esistono numerosi modi per convalidare gli input al loro arrivo.
- Ad esempio, se un utente invia un URL e questo viene restituito in una risposta, è possibile convalidarlo iniziando con un protocollo di sicurezza come HTTPS e HTTP. È anche possibile convalidare i valori quando un utente li fornisce in ordine alfabetico o numerico. È anche possibile convalidare in modo diverso limitando l'input a un insieme di caratteri previsto.
Ecco alcuni altri approcci che è possibile adottare:
- È possibile creare un elenco di tutti i protocolli sicuri consentiti sul proprio sito web. In questo modo la tua difesa bloccherà automaticamente i protocolli dannosi che non riconosce per impostazione predefinita. Ciò può rendere gli attacchi XSS incapaci di offuscare valori non validi cercando di eludere le liste di blocco.
- Agli utenti non dovrebbe essere consentito pubblicare markup HTML, ma a volte è necessario. È possibile filtrare i tag dannosi implementando delle whitelist. Queste salveranno i tag sicuri e filtreranno qualsiasi codice dannoso associato ai tag presenti nella blacklist. Tutti i tag al di fuori delle whitelist saranno considerati nella blacklist, a meno che non vengano specificati.
- Sarà necessario monitorare il proprio sito web per gli aggiornamenti di sicurezza. Supponiamo che si intenda utilizzare librerie JavaScript per eseguire il filtraggio e la codifica direttamente dal browser dell'utente. In tal caso, puoi anche prevenire gli attacchi XSS utilizzando un motore di template lato server. Può incorporare contenuti dinamici in HTML e definire un codice specifico.
- Puoi anche utilizzare filtri con argomenti e definire il contesto. Questo può aiutare a prevenire la maggior parte dei casi di attacchi XSS. È possibile rivedere queste funzionalità di escape per valutare periodicamente se continuare con il motore di template o il framework.
- Esistono anche funzioni integrate in PHP per codificare le entità ed è possibile richiamarle per eseguire l'escape degli input ogni volta che i valori si trovano all'interno di un contesto HTML. È possibile richiamarle con tre argomenti e sono necessari input di escape Unicode. PHP non fornisce API per stringhe di escape Unicode.
- Convertire le stringhe in entità HTML e quindi richiamare le funzioni. È possibile utilizzare il proprio codificatore HTML personalizzato per prevenire attacchi XSS JavaScript lato client.
Migliorare l'intelligence sulle minacce
Scoprite come il servizio di caccia alle minacce WatchTower di SentinelOne può far emergere maggiori informazioni e aiutarvi a superare gli attacchi.
Per saperne di piùAttacchi Cross-Site Scripting (XSS): consigli per la prevenzione (migliori pratiche)
Le migliori pratiche che è possibile adottare per prevenire gli attacchi XSS sono:
- Pulisci gli input degli utenti e i dati di output tramite la codifica.
- Puoi sostituire i caratteri speciali con valori codificati in modo che tutti i dati possano essere elaborati come testo anziché come codice. L'autore dell'attacco non sarà in grado di inserire uno script dannoso se ha a che fare con testo semplice. Se si applica la codifica in modo corretto, nessun utente sarà colpito in questo modo.
- È possibile applicare molti tipi di codifica a seconda della logica aziendale o del tipo di applicazione, compreso anche il tipo di dati memorizzati ed elaborati. Esistono diversi metodi di codifica, come la codifica delle entità HTML, una delle misure più basilari. È anche possibile codificare i valori degli attributi.
- Un'altra buona pratica per prevenire gli attacchi XSS è filtrare i dati ricevuti sul lato client. Il filtraggio dei dati rimuove i caratteri pericolosi come tag, gestori di eventi HTML, elementi JavaScript dannosi, ecc.
- È possibile restituire le risposte delle pagine web utilizzando una combinazione di filtraggio dell'input e dell'output. Questo metodo mitiga al meglio gli attacchi XSS memorizzati.
- La convalida dell'input dell'utente è un'altra misura di sicurezza. Ad esempio, se si impostano i campi di input predefiniti in modo da consentire i tipi di dati di testo, sarà impossibile per gli utenti inserire numeri. Questo funziona bene per i moduli web; gli input possono essere convalidati per impedire agli aggressori di caricare script dannosi tramite l'autorizzazione. I browser web consentono l'accesso solo alle risorse autorizzate e ignorano tutti gli altri domini. Gli script iniettati non verranno eseguiti anche se un aggressore riesce a scoprire vulnerabilità di iniezione XSS.
- Per prevenire attacchi cross-site scripting in jQuery, è possibile passare gli input dell'utente a un selettore jQuery. Il modo più comune per farlo è utilizzare la posizione. Hash e passare il selettore per rendere l'HTML. jQuery è in grado di riconoscere il problema e correggere la logica del selettore per verificare se gli input iniziano con un hash.
- È possibile specificare risorse come immagini e script che possono essere caricati dall'origine del sito. Se un aggressore inietta payload XSS, non sarà in grado di caricare risorse che non appartengono all'origine corrente. Il selettore jQuery può ridurre significativamente le possibilità di un attacco XSS o di una vulnerabilità.
Se prevedi di passare dati non attendibili ai tuoi selettori jQuery, assicurati di eseguire correttamente l'escape dei valori utilizzando la funzione js—escape. Puoi anche mitigare gli attacchi XSS sfruttando le politiche di sicurezza dei contenuti. Queste possono aiutarti a controllare vari aspetti della gestione degli script esterni, come il loro caricamento e l'esecuzione di script inline.
Esempi comuni di attacchi XSS
Ecco alcuni esempi comuni di attacchi XSS nel mondo reale:
- Nel 2018 British Airways è stata invasa da MageCart, un gruppo di hacker di alto profilo. Il gruppo ha sfruttato una vulnerabilità XSS nella libreria JavaScript. I dati dei clienti sono stati inviati a un server dannoso con un nome di dominio simile a quello del sito web ufficiale. Alla fine sono stati sottratti i dati delle carte di credito di oltre 380.000 transazioni di prenotazione, causando ingenti perdite alla compagnia aerea fino a quando la violazione non è stata scoperta, ormai troppo tardi.
- Fornite è un popolare gioco multiplayer online che ha subito un attacco XSS. Una vulnerabilità SSO non sicura reindirizzava gli utenti a una pagina di login falsa, dove venivano rubati i loro dati. I giocatori hanno anche perso le valute virtuali all'interno del gioco e le chat registrate dei giocatori sono state divulgate.
- eBay aveva una vulnerabilità XSS che consentiva agli aggressori l'accesso completo agli account dei venditori. I pirati informatici hanno manipolato il posizionamento degli annunci di eBay e hanno continuato i loro attacchi anche dopo che eBay ha individuato e risolto la vulnerabilità.
Conclusione
Gli attacchi cross-site scripting sono tra le minacce più gravi alla sicurezza web, minando la fiducia nelle piattaforme online e compromettendo i dati degli utenti. Conoscendo i tipi di attacchi XSS e applicando adeguati meccanismi di prevenzione, gli sviluppatori possono proteggere le loro applicazioni. Le misure appropriate includono la convalida degli input, la codifica degli output e l'applicazione di politiche di sicurezza dei contenuti.
Gli audit di sicurezza e gli strumenti sofisticati di rilevamento delle minacce sono essenziali per garantire una presenza online sicura e protetta. Con l'avanzare della tecnologia, anche la metodologia degli aggressori si evolve, quindi la cautela è fondamentale. Dando priorità alla prevenzione degli attacchi XSS, le organizzazioni possono salvaguardare la loro reputazione e garantire l'integrità della loro presenza online.
FAQs
Gli attacchi XSS consistono nell'iniezione di script dannosi nei siti web per consentire agli hacker di accedere ai dati sensibili degli utenti. Gli attacchi XSS sfruttano le vulnerabilità delle applicazioni web e spesso utilizzano input degli utenti o URL manipolati.
Gli sviluppatori possono evitare gli attacchi XSS controllando gli input degli utenti, codificando i dati di output e consentendo solo script dannosi. Anche audit di sicurezza periodici e politiche di sicurezza dei contenuti riducono i rischi.
Gli attacchi XSS sfruttano le applicazioni web iniettando script dannosi che vengono eseguiti sui browser a cui accedono gli utenti, aggirando i controlli di sicurezza e accedendo a informazioni sensibili.
Gli attacchi XSS devono essere evitati perché possono causare fughe di dati, perdite finanziarie e danni alla reputazione. Inoltre, minano la fiducia degli utenti e possono potenzialmente diffondere malware o attacchi di phishing.
Le soluzioni e gli strumenti includono scanner di vulnerabilità, firewall per applicazioni web e sistemi avanzati di rilevamento delle minacce. Questi aiutano a rilevare le vulnerabilità e a bloccare l'esecuzione di script dannosi.
Sì. Un WAF può bloccare gli attacchi XSS filtrando il traffico e identificando gli script dannosi prima che possano interagire con l'applicazione.
Il test XSS utilizza scanner di vulnerabilità e strumenti di penetration testing per simulare attacchi e individuare potenziali punti di ingresso per script dannosi.
Per proteggersi dalle minacce in continua evoluzione, è necessario eseguire regolarmente scansioni di sicurezza per individuare vulnerabilità XSS, idealmente ogni tre mesi.
