Cross-site scripting: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m spazio indivisibile |
m apostrofo tipografico |
||
Riga 5:
==Origine e trasformazione del concetto==
La sicurezza nel web dipende da una varietà di meccanismi incluso il concetto di fiducia noto come [[Same origin policy]]. Questo afferma in sostanza che se al contenuto del primo sito viene concessa
Gli attacchi Cross-site scripting usano vulnerabilità note delle applicazioni web, nei loro server o dei plugin su cui si basano. Sfruttando una di queste vulnerabilità, gli aggressori iniettano contenuto malevolo nel contenuto che fornisce il sito compromesso. Quando il contenuto arriva nel [[Browser|web browser]] lato client risulta inviato dalla fonte attendibile, perciò opera sotto le autorizzazioni concesse a quel sistema. Trovando il modo di iniettare script malevoli,
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|accesso=21 maggio 2016}}</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}}</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}}</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=21 maggio 2016}}</ref>,
== Tipologie ==
Riga 18:
=== Reflected (non-persistent) ===
Le vulnerabilità cross-site scripting di tipo reflected sono sicuramente le più comuni. È possibile sfruttarle quando i dati forniti
Dato che i documenti HTML hanno uno struttura piatta in cui sono mescolate istruzioni di controllo, di formattazione e di contenuto effettivo, se tutti i dati forniti
Un attacco non persistente è tipicamente inviato via mail o da un sito web neutrale.
=== Persistent ===
Una vulnerabilità XSS persistente (o stored) è una variante più devastante di cross-site scripting: si verifica quando i dati forniti
Ad esempio, supponiamo che ci sia un sito di incontri in cui i membri visionano i profili degli altri membri per cercare interessi comuni. Per motivi di privacy, questo sito nasconde a tutti il vero nome e la mail degli utenti. Queste informazioni sono tenute segrete dal server.
Supponiamo che un attaccante si colleghi al sito e vuole capire i veri nomi delle persone che vede sul sito. Per fare ciò scrive uno script progettato per essere eseguito dal browser delle altre persone quando visitano il suo profilo. Lo script invia un breve messaggio al suo server che raccoglie queste informazioni.
Per fare questo, per il quesito “Descrivi il tuo primo appuntamento ideale”,
Le vulnerabilità XSS di tipo persistente possono essere molto più significative rispetto alle altre perché lo script dannoso
I metodi di iniezione possono variare tantissimo, in alcuni casi
=== Server-side vs vulnerabilità DOM-based ===
Storicamente le vulnerabilità XSS sono state trovate in applicazioni che svolgevano tutto il processamento dei dati lato server.
Mentre il codice JavaScript processa anche gli input
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=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=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=21 maggio 2016}}</ref>.
Riga 50:
# Alice visita spesso un particolare sito web, che è ospitato da Bob. Il sito web di Bob permette ad Alice di autenticarsi con username e password e di memorizzare dati sensibili (come i dati di fatturazione). Quando accede nel sistema, il browser mantiene un cookie di autenticazione, che si presenta come un insieme di caratteri illeggibili, in modo che entrambi i computer (client e server) si ricordino della sua autenticazione.
# Mallory nota che il sito di Bob contiene una vulnerabilità XSS di tipo reflected:
## Quando si visita la pagina di ricerca, si inserisce un termine nella casella di ricerca e si fa click sul tasto invio, se non ci sono risultati la pagina visualizzerà il termine cercato seguito dalle parole “non trovato”, e
## Con una normale query di ricerca, come la parola “cuccioli”, la pagina visualizzerà semplicemente “cuccioli non trovato” e
## Tuttavia, quando si invia una query anomala di ricerca, come <code><scripttype='text/javascript'>alert('xss');</script></code>,
### Viene visualizzato un box di avviso che dice “xss”
### La pagina visualizza "<code><scripttype='text/javascript'>alert('xss');</script></code> non trovato" insieme a un messaggio di errore con il testo “xss”
###
#Mallory crea un URL per sfruttare
##Crea
##Invia una mail ad alcuni ignari membri del sito di Bob, in cui scrive: “Controlla alcuni simpatici cuccioli”
#Alice riceve la mail, dato che ama i cuccioli apre il link. Andrà quindi sul sito di Bob per la ricerca, non trovando nulla visualizzerà “Cuccioli non trovato”, ma lo script di Mallory, authstealer.js, eseguirà, invisibile sullo schermo, scatenando
#Il programma authstealer.js esegue nel browser di Alice come se fosse stato inviato dal sito di Bob. Prende una copia del cookie di autenticazione di Alice e lo invia al server di Mallory, dove Mallory lo recupererà.
#Mallory adesso inserisce il cookie di autenticazione di Alice nel suo browser come se fosse il proprio. Va poi sul sito di Bob, adesso è autenticato come Alice.
Riga 65:
#Decide di fare un ulteriore passo avanti e invia un collegamento simile a Bob stesso, guadagnando così i privilegi di amministratore.
Affinché questo attacco non si verifichi oppure per ridurne gli effetti nel casi si verificasse si possono adottare ifferenti strategie:
#
# Il server web potrebbe essere impostato in modo da reindirizzare le richieste non valide.
# Il server web potrebbe rilevare un accesso simultaneo e invalidare le sessioni.
Riga 71:
# Il sito web potrebbe visualizzare solo le ultime cifre della carta di credito utilizzata in precedenza.
# Il sito web potrebbe richiedere agli utenti di inserire nuovamente la propria password prima di cambiare le informazioni di registrazione.
# Gli utenti potrebbero essere istruiti a non cliccare link
=== Attacco persistente ===
# Mallory crea un account sul sito di Bob.
# 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
# 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 name="thegeekstuff.com">{{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=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 name="thegeekstuff.com"/><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=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
== Come difendersi ==
=== Encoding
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=19 gennaio 2009|accesso=}}</ref>. Molte applicazioni web che non accettano rich data possono usare
=== Convalidare in modo sicuro
Molte operazioni di particolari applicazioni web (forum, webmail, ecc.) permettono agli utenti di utilizzare un sottoinsieme limitato di markup HTML. Quando si accetta
=== Sicurezza dei cookie ===
Oltre al filtraggio dei contenuti, sono comunemente usati altri metodi per mitigare il cross-site scripting.
Un esempio è
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|data=|accesso=}}</ref>.
=== Disabilitare gli script ===
Mentre le applicazioni [[web 2.0]] e [[AJAX|Ajax]] favoriscono
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
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|accesso=21 maggio 2016}}</ref>.
=== Tecnologie di difesa emergenti ===
Riga 106:
== 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
== 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
[[Cross-site request forgery]] (CSRF/XSRF) è quasi
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é
Infine, [[SQL injection]] sfrutta una vulnerabilità nel livello di database
== Note ==
|