1. Introduzione
Session Fixation è una tecnica che consente agli hacker di prendere il controllo della sessione di un utente. Questa tecnica sfrutta il fatto che il server non modifica il valore dell'ID di sessione ogni volta che l'utente accede, ma utilizza invece un ID di sessione preesistente. Il processo di attacco include l'ottenimento di un ID di sessione valido (possibilmente accedendo al sito Web ), quindi la ricerca di un modo in cui la vittima possa accedere al sito Web con questo ID di sessione e, infine, quando la vittima accede con successo, l'hacker navigherà il sito web con il suo account. Lo scenario specifico è il seguente:
Mallory trova un sito Web, ad esempio http://unsafe.example.com, che accetta qualsiasi ID di sessione dalla richiesta senza autenticazione.
Mallory invierà ad Alice un'e-mail contenente il collegamento http://unsafe.example.com/?SID=1234.
Alice va su http://unsafe.example.com/?SID=1234. Quindi accedi al sito web.
Mallory va semplicemente su http://unsafe.example.com/?SID=1234 e utilizza il sito Web con l'account di Alice.
Mallory può utilizzare i seguenti metodi per impostare i cookie per Alice:
Allega uno script per impostare i cookie
Invia pacchetto di risposta HTTP con valore del cookie MalloryInvia pacchetto di risposta HTTP con valore del cookie Mallory
Utilizza meta tag HTML:
2. Esempi
Esempio 1: scripting lato client
Similmente allo scenario sopra menzionato, però, anche in questo caso l'ID di sessione non viene trasmesso nell'URL ma nel cookie. Per modificare il valore dell'ID sessione nel cookie della vittima, l'hacker inserirà un pezzo di Javascript:
http://website.kom/document.cookie=”sessionid=abcd”;
Esempio 2: etichetta
Simile allo scripting lato client, ma questa volta l'hacker inserirà tag aggiuntivi:
http://sitoweb.kon/
Esempio 3: risposta dell'intestazione HTTP
L'inserimento dell'ID di sessione può essere effettuato anche intercettando i pacchetti scambiati tra il client e l'applicazione Web, quindi inserendo il campo Set-Cookie nell'intestazione.
3. Come prevenire
La causa di questo errore è perché il server non rigenera l'ID di sessione dopo ogni accesso riuscito. Pertanto, correggere questo errore non è difficile, dobbiamo solo modificare il valore dell'ID sessione e il gioco è fatto. In PHP, utilizziamo la funzione session_regenerate_id() per rigenerare la sessione.