Il Cross Site Request Forgery, chiamato anche CSRF, è una vulnerabilità che si verifica quando manca un adeguato controllobsulle richieste che non vengono inviate intenzionalmente, ma sono pensate da un utente malintenzionato che successivamente le farà eseguire alla vittima tramite un link che porta ad un pagina html, la quale invierà la richiesta senza che la vittima se ne accorga.Tramite CSRF è possibile effettuare azioni più o meno gravi, per questo motivo vanno classificati in base all'impatto e ai danni che possono causare ad ogni utente.

Basso Impatto

Questi tipi di CSRF non hanno un grande impatto sulla sicurezza se sfruttati, a parte causare qualche fastidio, non arrecano danni ingenti agli utenti di un sito web vulnerabile. Un esempio potrebbe essere un CSRF di logout, ovvero visitando una pagina contenente quel tipo di CSRF si verrà sloggati dal sito web in questione e bisognerà effettuare di nuovo il login.

Se ad esempio un utente è loggato sul sito 'testsite' ed io inserisco in una pagina html del mio sito (diverso da testsite) il seguente codice:

<img src="http://www.testsite.com/logout">

Ed infine mando il link di quella pagina all'utente, una volta che esso aprirà la pagina sarà sloggato dal sito 'testsite' e dovrà ripetere il login.

Un altro esempio potrebbe essere un CSRF che va a modificare le preferenze delle impostazioni di ricezione delle notifiche via email, dove se ad esempio era stato impostato di ricevere un email per ogni post che viene creato, visitando la pagina che contiene il CSRF non si riceverà più un email per ogni post. Basterà settare di nuovo le impostazioni per risolvere il problema.

CSRF01

Medio Impatto

I CSRF a medio impatto causano una moderata quantità di danni all'utente ma non compromettono del tutto l'utilizzo del profilo e del sito web.

Un esempio form vulnerabile a CSRF potrebbe essere:

<form action="http://www.testsite.com/Trasferisci.php" method="get">
<input type="text" name="username-destinatario" value="Nomeutente">
<input type="text" name="valuta" value="EURO">
<input type="text" name="importo" value="1000">
<input type="submit" value="Trasferisci">

</form>

Richiesta generata:

http://www.testsite.com/Trasferisci.php?username-destinatario=Nomeutente&valuta=EURO&importo=1000

Se inviato questo form genera una richiesta GET, che per usare lo stesso esempio di prima, viene inserita in una pagina html dentro ad il tag html img, la quale può essere sfruttata per trasferire 1000 euro dall'account della vittima all'account dell'utente malintenzionato senza che se ne accorga.

<img src="http://www.testsite.com/Trasferisci.php?username-destinatario=Nomeutente&valuta=EURO&importo=1000">


CSRF02

Alto Impatto

Questi tipi di CSRF se sfruttati causano grossi danni agli utenti che ne sono vittima. Fanno parte di questa categoria
quelli che permettono di cancellare l'account o modificare i dati d'accesso della vittima e darebbero possibilità ad un utente malintenzionato di prenderne il controllo.
Un form che permette di cambiare l'indirizzo email potrebbe essere vulnerabile a CSRF e se un utente malintenzionato sfruttasse questa vulnerabilità potrebbe cambiare l'indirizzo email di un account, semplicemente inviando un link alla vittima, che senza saperlo, sostituirà l'email che usa per accedere al sito con quella immessa dall'utente malintenzionato.
Il quale, pur non sapendo la password, potrebbe resettarla tramite la funzione 'password dimenticata' per poi entrare nell'account della vittima e prenderne il totale controllo. Se ciò accadesse il bersaglio non sarebbe più in grado di riprendere il controllo del suo account.

Esempio di Full Account Takeover- CSRF:

Se un'utente malintenzionato aggiunge al suo sito Web la richiesta riportata qua sotto e la manda alla vittima, l'email di quest'ultima viene cambiata con quella scelta dal malintenzionato.

A questo punto, l'utente malintenzionato non deve far altro che richiedere una nuova password per prendere il controllo dell'account.

<form action="http://www.testsite.com/ChangeEmail.php" method="post">
<input type="text" name="username" value="Nomeutente">
<input type="email" name="email" value="Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.">
<input type="submit" value="Aggiorna">

</form>

Le richieste di tipo POST, possono anch'esse essere vulnerabili a CSRF, ma per sfruttare tali richieste va ricostruito il form che genera la richiesta (o copiato direttamente dal sorgente pagina) e poi va reso "self-submit",
Ovvero, fare in modo che il form si invii da solo appena la pagina che lo contiene viene aperta. Per fare ciò basta
semplicemente assegnare un id al form e poi inserire seguente codice all'interno dei tag <body></body>:

<body on-load="document.[ID-form].submit();">

Una vulnerabilità molto simile al CSRF è detta Insecure Direct Object Reference, anche detta IDOR, che a differenza del CSRF non richiede un'interazione da parte della vittima per essere sfruttata, ma all'utente malintenzionato basta solamente conoscere l'ID dell'account della vittima per cambiarne i dati, oppure cancellare l'intero account.
Questo tipo di vulnerabilità si verifica quando un applicazione fornisce accesso diretto agli oggetti in base all'input fornito dall'utente.
Tramite ciò un utente malintenzionato può accedere a risorse protette come database o file semplicemente modificando il valore di un parametro inviato in una richiesta, il tutto è possibile poichè non sono presenti nella richiesta sufficienti controlli d'autorizzazione. Ad esempio se la seguente richiesta corrisponde al tasto "Elimina Account" per l'utente con "ID account = 3". Se non ci sono abbastanza controlli sull'autorizzazione, l'utente con ID=3 potrà eliminare l'account dell'utente con ID=2 semplicemente inviando la seguente richiesta (cosa che non dovrebbe essere in grado di fare) eliminando dal database del sito tutti i dati dell'utente con ID=2:

http://testsite.com/user-id/2/delete

Come difendersi:

Per difendersi da questo tipo di vulnerabilità si possono scegliere diverse strade: La più comune è quella di implementare
un csrf_token o xsrf_token, ovvero un [codice-generato-random-dal-server] per ogni form che trasmette informazioni sensibili che causerebbero danni in caso fossero vulnerabili. Se proprio non si vuole utilizzare un csrf_token per proteggersi da questa vulnerabilità è possibile richiedere una conferma aggiuntiva (ad esempio chiedendo la password corrente dell'account dal quale si cerca di mandare la richiesta) ai form che trattano informazioni sensibili.

Form con CSRF-Token:

<form action="http://www.testsite.com/ChangeEmail.php" method="post">
<input type="text" name="username" value="Nomeutente">
<input type="email" name="email" value="Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.">
<input type="hidden" name="csrf_token" value="random-string">
<input type="submit" value="Aggiorna">

</form>

Il valore di Token verrà generato casualmente e quindi verificato dal Server.
Nel caso in cui il esso non coincida con quello fornito, comparirà un messaggio di errore, rendendo impossibile per un utente malintenzionato conoscerne il valore e evitando che la vulnerabilità venga sfruttata.

CSRF031

Altri articoli dello stesso autore

banner5

fb icon evo twitter icon evo

Parola del giorno

Don't be Evil è uno slogan interno di Google, ideato da due dipendenti Paul Buccheit e Amit Patel, nell'ottica di...

>

ZOPE è l'acronimo di Z Object Publishing Environment e indica un Web Server open source sviluppato in Python, che permette agli...

>

Il termine Bezel descrive l'involucro esterno (o scocca) di un computer, monitor o di un qualsiasi dispositivo di calcolo. La valutazione...

>

Il termine Random Forest è un costrutto utilizzato nell'ambito della Intelligenza Artificiale e al machine learning. Nello specifico si tratta di...

>

La cifratura (o crittografia) RSA è una tecnica di cifratura dati detta "a chiave pubblica" e sviluppata dalla RSA Data...

>
Leggi anche le altre...

Download del giorno

DiskMon

DiskMon è un utile strumento per monitorare e registrare tutte le attività di I/O sul disco di sistemi Windows...

>

Disk2vhd

Disk2vhd è una utiliy gratuita per la migrazione P2V (phisical to virtual) in ambiente virtuale Hyper-V. Permette di convertire...

>

CurrPorts

CurrPorts è un'utility in grado di mostrare in tempo reale tutte le porte TCP/UDP aperte sulla macchina dove...

>

MailPass View

Lo strumento MailPass View di Nirsoft permette di recuperare e mostrare le password salvate nei principali client di...

>

WebBrowserPass Tool

Lo strumento WebBrowserPass Tool di Nirsoft è un semplice software in grado di mostrare in chiaro le password...

>
Tutti i Download del giorno...

Archivio numeri

  • GURU advisor: numero 16 - ottobre 2017

  • GURU advisor: numero 15 - luglio 2017

    GURU advisor: numero 15 - luglio 2017

  • GURU advisor: numero 14 - maggio 2017

    GURU advisor: numero 14 - maggio 2017

  • GURU advisor: numero 13 -  marzo 2017

    GURU advisor: numero 13 - marzo 2017

  • GURU advisor: numero 12 -  gennaio 2017

    GURU advisor: numero 12 - gennaio 2017

  • GURU advisor: numero 11 -  ottobre 2016

    GURU advisor: numero 11 - ottobre 2016

  • GURU advisor: numero 10 - 8 agosto 2016

    GURU advisor: numero 10 - 8 agosto 2016

  • GURU advisor: numero 9 - 29 Giugno 2016

    GURU advisor: numero 9 - 29 Giugno 2016

  • 1
  • 2
  • 3
  • Teslacrypt: rilasciata la chiave

    Gli sviluppatori del temuto ransomware TeslaCrypt hanno deciso di terminare il progetto di diffusione e sviluppo e consegnare al pubblico la chiave universale per decifrare i file. Read More
  • Proxmox 4.1 sfida vSphere

    Proxmox VE (da qui in avanti semplicemente Proxmox) è basato sul sistema operativo Debian e porta con sé vantaggi e svantaggi di questa nota distribuzione Linux: un sistema operativo stabile, sicuro, diffuso e ben collaudato. Read More
  • Malware: risvolti legali

    tutti i virus e in particolare i più recenti Ransomware, che rubano i vostri dati e vi chiedono un riscatto, violano la legge. Vediamo insieme come comportarsi, per capire anche se e quando bisogna sporgere denuncia. Read More
  • 1