Sebbene tutti gli attacchi XSS superino le protezioni CSRF, questi richiedono uno sforzo diverso da parte dell'attaccante. Una semplice protezione come un token è facile per un attaccante ottenere tramite un attacco XSS, in quanto può semplicemente leggere il valore del token dal DOM e utilizzarlo in qualsiasi invio di moduli successivo. Un modulo sensibile che richiede la password o la riautenticazione OTP è più difficile da attaccare, in quanto è necessario progettare il proprio attacco per acquisire le credenziali dell'utente o l'OTP in qualche modo. Tuttavia, con il pieno controllo del DOM, potevano imitare la pagina di accesso per indurre l'utente a pensare di essere stato disconnesso e aspettare che l'utente inserisse le proprie credenziali ... in questo caso, probabilmente potevano accedere direttamente come vittima invece di eseguire solo un attacco CSRF. Questo attacco causa anche un'interruzione visibile del sito, il che significa che un utente esperto può sospettare che qualcosa non va e rifiutarsi di accedere al modulo dell'attaccante.
Con i sottodomini ci sono due rischi con i cookie double-submit. Un utente malintenzionato su un sottodominio che legge il valore del cookie. per esempio. se un cookie solo host è impostato su example.com
, un utente malintenzionato che controlla foo.example.com
sarà in grado di leggere il valore del cookie. L'impostazione dei cookie di solo host può contrastare questo attacco.
L'altro rischio in un utente malintenzionato che scrive cookie. La Stessa politica di origine è più lenta per i cookie di quanto non lo sia per il resto del DOM. Ciò significa che un utente malintenzionato che controlla foo.example.com
può impostare un cookie che verrà letto quando la vittima visita example.com
o bar.example.com
. Semplicemente impostano un non host solo al livello example.com
. Anche se il sito è sotto attacco, diciamo che bar.example.com
imposta i cookie solo host su HTTPS e imposta la bandiera protetta per evitare che trapelino su un semplice HTTP, un utente malintenzionato che imposta un semplice cookie HTTP sarà comunque in grado di impostare il cookie da leggere per bar.example.com
. Il motivo è che il server non può stabilire il dominio effettivo che lo ha impostato, né può interrogare il flag di sicurezza stesso.
I cookie di doppia invio sono anche vulnerabili a un attaccante di Man-In-The-Middle che può intercettare e cambiare qualsiasi cosa a parte Traffico HTTPS . Anche se il sito di destinazione, example.com
non ascolta su HTTP semplice (cioè la porta 443 è aperta solo per TLS), l'utente malintenzionato potrebbe reindirizzare qualsiasi richiesta HTTP semplice con HTTP 3xx (ad es. A http://example.com
) e quindi intercettare quella richiesta, inviare una risposta con il set di cookie CSRF avvelenato per example.com
. Il server prenderà quel valore, come ancora non ha modo di determinare che non è un cookie con il flag di sicurezza. Questo è di nuovo dovuto alla stessa politica di origine dei cookie.
La soluzione a tutto questo consiste nell'implementare Sicurezza del trasporto rigoroso HTTP e per controllare tutti i sottodomini. Nei browser supportati, ciò impedirà qualsiasi semplice connessione HTTP effettuata dal browser durante la vita del record HSTS (forse anni) e proteggerà i cookie dall'attacco di un utente malintenzionato. Le voci HSTS possono anche essere inviate ai fornitori di browser per l'inclusione nella compilazione, il che significa che gli utenti non devono visitare il sito almeno una volta per impostare il record HSTS. Vedi Precarico HSTS .