In che modo l'invio di intestazioni HTTP del referrer protegge dagli attacchi CSRF?

8

In che modo l'invio di intestazioni HTTP di referrer protegge dagli attacchi CSRF?

Ho provato ad accedere a un sito HTTPS con Firefox network.http.sendRefererHeader impostato su 0 (cioè, completamente disabilitato, come misura contro il tracciamento), e ha detto:

Forbidden (403)

CSRF verification failed. Request aborted.

You are seeing this message because this HTTPS site requires a 'Referer header' to be sent by your Web browser, but none was sent. This header is required for security reasons, to ensure that your browser is not being hijacked by third parties.

If you have configured your browser to disable 'Referer' headers, please re-enable them, at least for this site, or for HTTPS connections, or for 'same-origin' requests.

In che modo ciò impedirebbe gli attacchi CRSF? L'autore dell'attacco non può semplicemente falsificare l'intestazione del referrer, rendendolo simile a quello che avrei inviato?

    
posta Geremia 02.09.2016 - 00:48
fonte

2 risposte

11

Per capire questo, è necessario prima capire che cos'è una contraffazione richiesta cross-site.

Un contraffazione di richiesta tra siti si verifica quando l'utente malintenzionato ha uno script o un supporto incorporato su un sito Web da essi controllato che fa sì che i visitatori di quel sito Web richiedano una risorsa da un sito diverso. Quella richiesta appare a quell'altro sito nel contesto dell'utente. Ad esempio, potrei aggiungere un'immagine con l'url https://othersite.example.com/delete_my_account.php?really=true al mio sito web. Quando visiti il mio sito e al momento sono collegato al tuo account su othersite.example.com , il tuo browser richiederà quell'URL, il che causerebbe la perdita di othersite.example.com del tuo account.

Ma c'è un problema: quando othersite.example.com può leggere il tuo referrer, può vedere che questa richiesta è causata da qualcuno che interagisce con un altro sito. Non c'è una buona ragione per cui un sito web abbia un link diretto a un URL che esegue un'azione. Quando l'altro sito rifiuta le richieste senza un referrer, quell'attacco diventa impossibile.

Riguardo allo spoofing dei referrer: tieni presente che il client che fa la richiesta non è l'attaccante. L'attaccante è un operatore del sito web. Il peggio che l'operatore può fare è far eseguire il tuo browser JavaScript nel contesto del loro sito web. Mentre ci sono diversi modi per fare richieste ad altri siti web usando Javascript, nessuna di queste API permette di falsificare il referrer.

    
risposta data 02.09.2016 - 01:05
fonte
7

Couldn't the attacker just spoof the referrer header

No, non possono.

Ovviamente non è possibile quando si invia un modulo (o i vari metodi GET come tag immagine o url nei CSS), e non è possibile tramite XMLHttpRequest, come per documentazione

.

Detto questo, suggerirei di utilizzare un token, in quanto la verifica del referente potrebbe essere aggirata se esiste una vulnerabilità di reindirizzamento aperta e l'applicazione non segue il riposante, o se consente il downgrade a GET e contiene vulnerabilità di reindirizzamento aperte, Vulnerabilità di injection HTML o vulnerabilità di injection CSS. Potrebbe anche causare problemi di usabilità (come nel tuo caso).

    
risposta data 02.09.2016 - 01:03
fonte

Leggi altre domande sui tag