Sto scrivendo un'app Web che già utilizza connessioni crittografate TLS (HTTPS), cookie di sessione Secure; HttpOnly
, token CSRF HMAC-SHA1, richiede un'intestazione Referer
corretta per evitare Login CSRF e cambia ID di sessione durante l'accesso per evitare attacchi di fissazione di sessione di base.
Tuttavia, non posso utilizzare HSTS perché lo stesso dominio deve servire alcuni contenuti HTTP per ragioni storiche.
Non riesco a capire come evitare l'attacco MitM che esegue in pratica la fissazione della sessione:
- L'attaccante naviga verso
https://example.com/login
e riceve un nuovo cookie anonimosession-id
e il corrispondente HMAC-SHA1csrf-token
incorporato nel modulo di accesso. - L'attaccante completa l'accesso e il server sovrascrive il cookie
session-id
per il nuovo id utente. - L'attaccante salva il valore di
session-id
cookie. - La vittima passa a
example.com
utilizzando HTTP e l'attaccante avvia l'attacco MitM che modifica la risposta in modo che abbiaSet-Cookie: session-id=<value-from-attacker-session>
eLocation: https://example.com/whatever
. - Il browser di Victim ora completa l'handshake TLS completo con
example.com
e faGET /whatever
conCookie: session-id=<value-from-attacker-session>
. In pratica, questo è un completamento dell'attacco di fissazione della sessione poiché Victim sta ora eseguendo la sessione condivisa con l'Attacker.
Certo, questo non è un attacco facile perché richiede un attacco MitM attivo e Victim deve utilizzare la connessione HTTP iniziale a example.com
. Inoltre, questo consente solo la fissazione della sessione, non il dirottamento di sessione.
- L'HSTS è l'unico modo per evitare questo attacco?
- C'è un modo per evitare che i cookie impostati tramite la connessione HTTP siano visibili su una connessione HTTPS identica a
Secure; HttpOnly
cookie?
Aggiornamento 2014-09-04
Sto assumendo che le seguenti affermazioni siano vere:
- La connessione TLS è sicura e l'UA ha un elenco sano di CA affidabili.
- L'utente finale può evitare gli attacchi
sslstrip
-like in cui il browser chrome contiene URL non corretti. -
example.com
non è presente nell'elenco HSTS precaricato.
Il cookie di guardia suggerito da Steffen Ullrich risolverebbe il problema a parte il fatto che non è in grado di rilevare se l'attacco viene eseguito durante la connessione iniziale. L'implementazione del cookie di guardia eviterebbe comunque l'attacco cambiando la sessione al volo. Attualmente MitM Attacker può sovrascrivere il cookie Secure; HttpOnly
originale chiamato session-id
con un normale cookie HTTP in qualsiasi momento in futuro, in modo che possa accedere all'UR da qualsiasi URL HTTP per lo stesso dominio. (Questo può essere piuttosto facile perché l'Attacker può reindirizzare qualsiasi connessione HTTP dalla stessa sessione del browser.)
Ancora non riesco a vedere alcun modo per risolvere il problema senza assistenza da parte di UA. Se gli UA avessero solo un modo per dire quali cookie sono stati impostati tramite la connessione TLS invece del semplice vecchio HTTP ...
(Come parte non devo dire che tutti i suggerimenti per rilevare% attacchi di tiposslstrip
dal lato server come descritto nella risposta collegata da Steffern Ullrich sembrano vani perché tutti i suggerimenti richiedono l'invio di JavaScript i file che eseguono il rilevamento e sslstrip
riguardano strettamente MitM attacker in grado di modificare i file al volo. Pertanto, l'attaccante può facilmente rendere qualsiasi rilevamento JavaScript per restituire sempre "ok".)
Link correlati: 1. Forzare i cookie 2. Accedi CSRF