Session Hijacking – I rischi delle vulnerabilità XSS

Session Hijacking - XSS

La scorsa settimana alcuni membri del nostro staff hanno partecipato alla CTF di HackTheBox “Cyber Santa is Coming to Town”, ovverosia una competizione di hacking (Capture The Flag), in questo caso a tema natalizio.

Le CTFs si sviluppano a “challenges”, ovverosia a sfide: ogni sfida viene classificata come risolta quando si riesce a “leggere” un file di testo, denominato, a seconda del caso, “flag.txt”, “user.txt” o “root.txt”. L’obiettivo è risolvere più sfide possibili nel minor tempo possibile.

Tra le varie challenges, vorremmo soffermarci su una in particolare per capire cos’è un XSS e, nello specifico, vedere quale potrebbe essere il suo potenziale impatto.

Partiamo con ordine, ecco l’estratto del codice della CTF che più c’interessa:

				
					const cookies = [{
	'name': 'flag',
	'value': 'HTB{f4k3_fl4g_f0r_t3st1ng}'
}];
				
			

Il cookie è denominato “flag” e ha come valore un valore fittizio utile, come chi partecipa a CTFs ben sa, allo sviluppo di exploits in locale. 

Ciò che importa, in ogni caso, è che da questa semplice informazione si capisce immediatamente qual è l’obiettivo della challenge: lo sviluppo di un payload XSS (Cross-Site Scripting) che ci consenta l’accesso al cookie di un altro utente (fittizio). Questa tipologia d’attacco ha come finalità il c.d. Session Hijacking ovverosia la presa di possesso di una sessione di un utente senza conoscere la sua credenziale d’accesso.

In termini più semplici, un sito web può mantenere “aperta” la nostra sessione anche quando chiudiamo la navigazione così che, la prossima volta che arriveremo al sito web, non dovremo reinserire le nostre credenziali (username e password) per accedere. Questa comodissima finalità, tuttavia, si rivela anche una sostanziale vulnerabilità: se io, attaccante, riuscissi a prendere possesso di quella sessione, sarei autenticato come l’utente legittimo senza conoscere nemmeno la password di quest’ultimo. Ciò viene eseguito, quindi, mediante il c.d. cookie stealing, letteralmente il furto di cookie di autenticazione. 

Nel nostro caso, ciò si esplica nel furto del cookie “flag”. Come si mette in atto una vulnerabilità XSS per rubare un cookie? Semplice.

Basta che il sito non filtri quello che un utente digita. Prima regola: mai fidarsi dell’input utente.

XSS Payload

Analizziamo le componenti del payload sopra inserito:

La prima parte è ‘ “> ‘, questo viene chiamato l’escaper. La sua finalità è manomettere il corretto funzionamento della funzione originale che doveva raccogliere il nostro input.

” < script > […] </ script > “, questo è il vero e proprio payload. Questo comunica ad un server provvisorio un parametro in GET: il cookie desiderato dell’utente. Se andiamo a vedere nei log, ecco che ci appare:

Flag

Semplicissimo, no? Ora, se fosse stato un sito web/applicazione esposta, avremmo ottenuto un accesso legittimo e avremmo potuto apportare modifiche alla configurazione, compromettere il server, estrarre dati e molto altro ancora.