Perché la vulnerabilità XSS dal sito che lancia l'attacco CSRF rende il Pattern token di sincronizzazione non sicuro?

5

Stavo leggendo la domanda sull'uso del Synchronizer Token Pattern per la protezione da CSRF ed i commenti della risposta mi hanno incuriosito. Naturalmente, come dice l'ultimo commento, se il tuo sito ha una vulnerabilità XSS, allora CSRF non è la tua più grande preoccupazione. Ma cosa succede se l'altro sito come vulnerabilità XSS?

Permettimi di preparare il terreno.

  • fakebank.com = la tua banca che ha una pagina di trasferimento di fondi che richiede l'utilizzo di un token univoco che si ottiene su una pagina get che deve essere inclusa in un post. Al momento sei loggato.
  • insecurefun.com = un sito che stai visitando. Ha numerosi problemi, tra cui la vulnerabilità XSS.
  • malicioussite.com = un sito spiacevole che non vorresti mai visitare, ma a quanto pare ha pubblicato qualche aggiunta su insecurefun.com.

Quindi caricate insecurefun.com e vi capita di ottenere un'aggiunta da malicioussite.com. L'aggiunta consente di reindirizzare a fakebank.com utilizzando i dati della sessione, facendo sì che fakebank.com invii al browser la pagina di conferma della conferma che include il token univoco. Quindi, l'aggiunta sfrutta la vulnerabilità XSS di insecurefun.com per eseguire javascript per ottenere il token e, infine, eseguire un post, causando il trasferimento di fondi da parte della tua banca.

Ora, sono abbastanza sicuro che questo non possa funzionare, perché se il Synchronizer Token Pattern potrebbe essere sfruttato così facilmente, non sarebbe raccomandato come protezione contro gli attacchi CSRF. Ma quello che non capisco è perché questo non può essere sfruttato.

La mia unica ipotesi è che lo script dannoso non possa ottenere una sospensione del token univoco per usarlo a causa dello stesso criterio di dominio. Ma se fai qualcosa come questo , sembra che lo script dannoso possa avviare il GET avere l'HTML restituito come stringa, analizzare i dati per il token univoco e quindi avviare il POST senza che l'utente sia informato. Cosa mi manca che impedirebbe che funzioni?

    
posta Lawtonfogle 08.10.2013 - 19:09
fonte

3 risposte

1

Then, the add exploits the XSS vulnerability of insecurefun.com to run javascript to get the token and finally performs a post with, causing your bank to transfer funds.

No. Le vulnerabilità XSS funzionano dall'altra parte. Se insecurefun.com ha una vulnerabilità XSS, insecurefun.com (e tutti i siti che hanno insecurefun.com nella loro Access-Control-Allow-Origin ) sono aperti a un attacco CSRF. Tuttavia, la vulnerabilità XSS di insecurefun.com non consente a nessun utente malintenzionato di toccare fakebank.com.

Una vulnerabilità XSS in un sito significa che quel sito è vulnerabile agli attacchi di terzi; non quel codice su quel sito ha libero sfogo sul tuo browser. Se fakebank.com avesse una vulnerabilità XSS, allora ci sarebbe un problema. Altrimenti no.

Pensaci; se avere una vulnerabilità XSS era tutto ciò che era necessario per eseguire CSRF, gli hacker introdurranno vulnerabilità XSS intenzionali nelle loro pagine, consentendo loro di attaccare altri siti.

    
risposta data 08.10.2013 - 20:31
fonte
1

The add redirects a get to fakebank.com using your session data, causing fakebank.com to send your browser the confirm transfer page which happens to include the unique token.

Questo non può accadere se fakebank.com utilizza correttamente un token CSRF.

Un attacco CSRF sta semplicemente facendo una richiesta a un sito di destinazione da un sito malevolo. Lo scopo del token CSRF è di richiedere che tutte le richieste fatte al sito includano questo token segreto. Il sito dannoso non ha modo di sapere che cos'è questo token purché la protezione CSRF sia impostata correttamente.

Quindi, senza un token CSRF richiesto, una richiesta poteva semplicemente fare un post con il "trasferimento all'account" e l'importo. Quando è richiesto un token CSRF, la richiesta deve includere anche un token CSRF che un sito dannoso non conoscerà.

Ho provato il metodo descritto nel link che hai fornito e non sembra funzionare contro un sito configurato correttamente.

Se eri in grado di estrarre la pagina di un utente autenticato da un dominio che non controlli (come suggerisce il collegamento) e quella pagina conteneva il token CSRF, allora sì, potresti bypassare la protezione fornita da un Token CSRF.

Se fakebank.com ha una vulnerabilità XSS, tutte le scommesse sono disattivate.

    
risposta data 08.10.2013 - 19:37
fonte
0

Beh, non è possibile accedere ai contenuti di iframe cross domain (di default) usando js (è così che immagino che sia l'add a essere visualizzato). Altrimenti l'intero concetto di usare un nonce pseudo casuale (in particolare quei metodi di mitigazione CSRF che si basano sulla riscrittura statica delle pagine) sarebbe un fallimento completo.

Chrome, ad esempio, mostra il seguente errore, quando tenti di accedere al contenuto di iframe usando js:

Supponiamo anche che questo sia possibile, una possibile opzione sarebbe quella di utilizzare i metodi di mitigazione CSRF che allegano i token al momento della spedizione delle richieste, come in OWASP CSRF Protector!

    
risposta data 13.12.2014 - 19:22
fonte

Leggi altre domande sui tag