Cross-site request forgery

Da Wikipedia, l'enciclopedia libera.

Il Cross-site request forgery, abbreviato CSRF o anche XSRF, è una vulnerabilità a cui sono esposti i siti web dinamici quando sono progettati per ricevere richieste da un client senza meccanismi per controllare se la richiesta è stata inviata intenzionalmente oppure no. Diversamente dal cross-site scripting (XSS), che sfrutta la fiducia di un utente in un particolare sito, il CSRF sfrutta la fiducia di un sito nel browser di un utente.

Possibile tecnica[modifica | modifica sorgente]

Un attaccante fa in modo che un utente vittima invii involontariamente una richiesta HTTP dal suo browser al sistema web dove è attualmente autenticato. Il sistema, vulnerabile al CSRF, avendo la certezza che la richiesta provenga dall'utente già precedentemente autenticato la esegue senza sapere che in realtà dietro la richiesta si cela un'azione pensata dall'attaccante come ad esempio un trasferimento di fondi, un acquisto di un oggetto, una richiesta di dati o qualsiasi altra funzione offerta dall'applicazione vulnerabile. Ci sono innumerevoli modi con i quali un utente può essere ingannato nell'inviare una richiesta pensata da un attaccante a un web server. Questo può essere fatto nascondendola ad esempio in un elemento HTML di un'immagine piuttosto che una XMLHttpRequest o un URL.

Esempio di attacco[modifica | modifica sorgente]

Supponiamo che l'utente A si sia autenticato al sito www.ilmiocontobancario.it per l'accesso alle operazioni sul suo conto bancario. Il sito www.ilmiocontobancario.it ha un form per i versamenti che, nel momento in cui invieremo i dati, richiederà una pagina del tipo www.ilmiocontobancario.it/versamento?importo=XXXX&destinatario=XXXX; l'utente B invia ad A un tag img html, per esempio attraverso la sua email, come il seguente: <IMG src='www.ilmiocontobancario.it/... versamento?importo=1000E&destinatario=B'>. Quando A tenterà di accedere all'immagine, il browser invierà di fatto una richiesta HTTP alla pagina web indicata cercando di caricare l'immagine. Il sito www.ilmiocontobancario.it rileverà, tramite il cookie, che la richiesta arriva effettivamente da A e perciò autorizzerà l'operazione.

Valutazione gravità[modifica | modifica sorgente]

Cross-site request forgery si piazza al dodicesimo posto nella lista dei 25 errori più comuni e pericolosi che riguardano il software redatta dal Mitre in collaborazione con il Sans Institute[1]. Secondo la lista, questa vulnerabilità è incontrata molto spesso nel codice, con la conseguenza che un eventuale exploit può permettere all'attaccante di eseguire del codice maligno oppure rubare, modificare e alterare dati sensibili. La correzione di questa vulnerabilità su codice già scritto e implementato è vasta, richiede cioè cambiamenti significativi e profondi nell'architettura del codice stesso. Un sistema può essere giornalmente esposto ad attacchi informatici che sfruttano questa debolezza facendo sì che la frequenza dell'attacco sia ritenuta alta nonostante una moderata difficoltà nel trovare un suo exploit.

Misure per la mitigazione del rischio[modifica | modifica sorgente]

La seguente lista rappresenta una serie di contromisure per mitigare il rischio di un attacco CSRF:

  • Usare frameworks, librerie, moduli e in generale codice fidato che permettano allo sviluppatore di evitare l'introduzione di questa vulnerabilità.
  • Nei form che permettono operazioni importanti inserire un campo hidden generato a caso ad ogni richiesta e autorizzare l'operazione nella pagina successiva solo se sia il cookie sia il parametro nascosto corrispondono.
  • Identificare quelle operazioni che possano risultare pericolose e quando un utente genera un'operazione di questo tipo inviare una richiesta addizionale di conferma all'utente, per esempio, la richiesta di una password, che deve essere verificata prima di eseguire l'operazione.
  • Non utilizzare il metodo GET per il passaggio di parametri da una pagina web all'altra soprattutto per quelle richieste che comportano un cambiamento di stato come ad esempio la modifica di dati e controllare il campo di intestazione HTTP referer per vedere se la richiesta è stata generata da una pagina valida.
  • Verificare che il sistema sia esente da vulnerabilità di tipo cross-site scripting poiché molte delle difese CSRF possono essere evitate usando vulnerabilità di questo tipo.
  • Dal lato utente è buona abitudine eseguire sempre il logout da siti web sensibili prima di visitare altre pagine web.

Note[modifica | modifica sorgente]

Sicurezza informatica Portale Sicurezza informatica: accedi alle voci di Wikipedia che trattano di Sicurezza informatica