XSS – Cross Site Scripting

Transcription

XSS – Cross Site Scripting
XSS – Cross Site Scripting
Jörg Schwenk
Horst Görtz Institute
Ruhr-University Bochum
Dagstuhl 2009
http://en.wikipedia.org/wiki/Crosssite_scripting
• Cross-site scripting (XSS) is a type of computer security
vulnerability typically found in Web applications that enables
attackers to inject client-side script into Web pages viewed by other
users. A cross-site scripting vulnerability may be used by attackers
to bypass access controls such as the same origin policy. Cross-site
scripting carried out on websites accounted for roughly 80.5% of all
security vulnerabilities documented by Symantec as of 2007.[1] Their
effect may range from a petty nuisance to a significant security risk,
depending on the sensitivity of the data handled by the vulnerable
site and the nature of any security mitigation implemented by the
site's owner.
Overview
1.
2.
3.
4.
5.
6.
Web Origins, Browser DOM and the Same Origin Policy
Reflected XSS
Stored XSS
DOM XSS
Classical Countermeasures
JSAgents
DNS
AJAX engine
Real
Malware
PDF
Rendering
Javascript
Flash
Browser-based protocols
Internet
Webserver Application Database
Server
PKI
AJAX engine
Javascript
Rendering
Browser-based protocols
Internet
Webserver Application Database
Server
Browser-based protocols
AJAX engine
Javascript
Rendering
3
4: CSS
www.css-repos.com
1
2: HTML+JS
www.example.org
5
6: JS-Lib
library.js.net
Web Origins and Browser DOM
window
document
document.location
body
defines
HTML
JS
CSS
JS-Lib
loaded from
loaded from
loaded from
loaded from
www.example.org
www.example.org
www.css-repos.com
library.js.net
grants access
rights to origin
www.example.org
Browser-based Cryptographic protocols:
SOP (Same Origin Policy)
Document1
Cookies
Name
Schwenk
Document2
Form
Account
443232
Script1
Script1:
GetCookie
Amount
Script2:
Modify
Account
Script3:
Send/
Request
data
66,43
Origin: https://banking.bank.com:443
Access Denied
SOP
Origin: http://attacker.org:80
Overview
1.
2.
3.
4.
5.
6.
Web Origins, Browser DOM and the Same Origin Policy
Reflected XSS
Stored XSS
DOM XSS
Classical Countermeasures
JSAgents
Reflected XSS (non-persistent)
•
•
Angreifer übergibt
Skriptcode über
einen eigens
präparierten
Hyperlink an das
Opfer
Typisches
Angriffsziel:
Suchfunktionen in
Webseiten
Reflected XSS (non-persistent)
• Normale URL, die eine Suche auf der Webseite triggert:
http://example.com/?suche=Suchbegriff
• Resultat: <p>Sie suchten nach: Suchbegriff</p>
• Präparierte URL: http://example.com/?suche=<script
type="text/javascript">alert("XSS")</script>
• Resultat: <p>Sie suchten nach: <script
type="text/javascript">alert("XSS")</script></p>
Reflected XSS (non-persistent)
3: GET+
JS-XSS
AJAX engine
Javascript
Rendering
victim.com
4: HTML +
JS-XSS
(active)
1
2:
HTML +
JS-XSS
(inactive) attacker.org
Overview
1.
2.
3.
4.
5.
6.
Web Origins, Browser DOM and the Same Origin Policy
Reflected XSS
Stored XSS
DOM XSS
Classical Countermeasures
JSAgents
Stored XSS (persistent)
Beispiel eBay
Phisher erstellt Angebot
Bettet im Angebot „bösartigen“
Code ein
Code kompromittiert „BietenButton“
Benutzer wird zur Eingabe seiner
Zugangsdaten aufgefordert,
wobei diese Seite vom
Angreifer stammt
Benutzer gibt seine Zugangsdaten
preis
Quelle: http://www.heise.de/security/result.xhtml?url=/security/news/meldung/54272&words=eBay%20Scripting
Stored XSS (persistent)
2: GET
AJAX engine
Javascript
Rendering
victim.com
3: HTML +
JS-XSS
1:
HTML +
JS-XSS
1
attacker.org
Overview
1.
2.
3.
4.
5.
6.
Web Origins, Browser DOM and the Same Origin Policy
Reflected XSS
Stored XSS
DOM XSS
Classical Countermeasures
JSAgents
DOM based XSS (Local XSS)
Consider the following webpage located at
http://www.vulnerable.site/welcome.html
<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,
document.URL.length));
</SCRIPT>
<BR>
Welcome to our system
…
</HTML>
Amit Klein, http://www.webappsec.org/projects/articles/071105.shtml
DOM based XSS (Local XSS)
Typical use:
http://www.vulnerable.site/welcome.html?name=Joe
<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,
document.URL.length));
</SCRIPT>
<BR>
Welcome to our system
…
</HTML>
Amit Klein, http://www.webappsec.org/projects/articles/071105.shtml
DOM based XSS (Local XSS)
Result of:
http://www.vulnerable.site/welcome.html?name=Joe
<HTML>
<TITLE>Welcome!</TITLE>
Hi
Joe
<BR>
Welcome to our system
…
</HTML>
Amit Klein, http://www.webappsec.org/projects/articles/071105.shtml
DOM based XSS (Local XSS)
Result of:
http://www.vulnerable.site/welcome.html?name=
<script>alert(document.cookie)</script>
<HTML>
<TITLE>Welcome!</TITLE>
Hi
<script>alert(document.cookie)</script>
<BR>
Welcome to our system
…
</HTML>
Amit Klein, http://www.webappsec.org/projects/articles/071105.shtml
DOM based XSS (Local XSS)
Avoid detection by server side filtering:
http://www.vulnerable.site/welcome.html#name=
<script>alert(document.cookie)</script>
• # indicates that the string following this character is a fragment
identifier, i.e. it is only an indication to the browser which part of the
document to display
• The string following # is thus never sent to the server, but it is stored
in DOM-properties like document.location or document.URL
Amit Klein, http://www.webappsec.org/projects/articles/071105.shtml
DOM based XSS (Local XSS)
GET welcome.html
3: GET HTTP 1.1
host: www.vulnerable.site
AJAX engine
Javascript
Rendering
victim.com
4: HTML
5: XSS executed during
(local) rendering
1: GET
2:
HTML +
<a href=″http://www.vulnerable.site/welcome.html#
JS-XSS
name= <script>alert(document.cookie)</script>″>Klick
me!</a>
(inactive) attacker.org
Overview
1.
2.
3.
4.
5.
6.
Web Origins, Browser DOM and the Same Origin Policy
Reflected XSS
Stored XSS
DOM XSS
Classical Countermeasures
JSAgents
Server Side: Blocking
• If unsolicited content (e.g. Overlong cookies) is detected, processing
of the http request is blocked.
• Instead, e.g. A static webpage can be displayed.
• Can be misused to perform DoS attacks:
– Vela 2009: Overlong Google Analytics tracking code snippets
Server Side: Stripping and Replacing
• PHP strip_tags() removes potentially dangerous characters
from user input
• If this seems too rigid, $allowable_tags can be defined; this
may open doors for XSS in single web applications
• Stripping substrings is complex: e.g. Stripping „fromCharCode“
from „fromCfromCharCodeharCode“
• Character replacement is more reliable, but can nebertheless be
circumvented (Amazon AWS attack)
Server Side: Escaping
• Potentially dangerous characters like < are prepended with a
backslash character: \<
• Potential problems with unicode characters may lead to SQLi
• innerHTML and CSS attacks
Server Side: Encoding
• PHP htmlentities() and htmlspecialchars() encode
potentially dangerous characters
• May be bypassed with e.g. UTF7 encoding of attack vectors:
+Adw-script+AD4-alert(1)+Adw-/script+AD4-
Server Side: Rewriting
• HTMLPurifier for PHP, AntiSamy for Java, SafeHTML for Windows
Server environments
• Web application want to allow posting of harmless HTML
• Different approaches:
– Only regular expressions: broken
– HTMLPurifier: Build new DOM tree, match this tree aganinst
XHTML DTD, remove non-matching elements
– Google Caja: rewrites Javascript (+HTMl + CSS) code, may
result in code expansion (1 line -> 130 lines)
Client Side Filtering
• Server does not see complete code that is rendered by the browser
– innerHTML
– DOM XSS
– Flash Parameters
• Therefore, client side filtering is applied
Client Side: IE XSS Filter
• Checks for matches between
Request URL fragments and the
resulting HTML markup
• Problems with detecting
fragmented attack vectors
(because they are only
completed by the markup parser)
Markup Parser
Request URL
IE XSS Filter
HTML Markup
Network Stack
Client Side: Webkit/Google Chrome XSS
Auditor
• Works similar to IE XSS
Filter
• Different position
HTML
Parser
Webkit
XSS
Auditor
Network Stack
Javascript
Engine
Client Side: NoScript XSS Filter (Firefox)
• Rewrites URL parameters if
URL request goes to a trusted
site
• insecure.php?a="><img/
src= onerror=alert(1)
• Is changed to
• insecure.php?a=>
img%2Fsrc=
ONERROR=ALERT 1
#some_random_number
HTML Parser
Request URL to Trusted Site
NoScript
Rewritten URL to Trusted Site
Network Stack
Content Security Policy
https://wiki.mozilla.org/Security/CSP/Specification
• Example 2: Auction site wants to allow images from anywhere, plugin
content from a list of trusted media providers (including a content
distribution network), and scripts only from its server hosting sanitized
JavaScript:
X-Content-Security-Policy: allow 'self'; img-src *;
object-src media1.com media2.com *.cdn.com;
script-src trustedscripts.example.com
• Example 4: Online payments site wants to ensure that all of the
content in its pages is loaded over SSL to prevent attackers from
eavesdropping on requests for insecure content:
X-Content-Security-Policy: allow https://*:443
IFrame Sandboxing
Sandboxed Iframes: New feature in HTML5
• No script execution
• No plugin execution
• No top oder parent access
• No form submissions
• ... Only display static HTML
• ... But this can of course be relaxed ☺
Javascript Sandboxing
• JSReg: purely written in Javascript, uses regular expressions, often
broken.
• Dojo Sandbox: blocks access to sensitive DOM properties, broken in
2010 (e.g. Unicode escapes)
• Rhino and LiveConnect: Run Javascript inside an Java applet,
which has its own Javascript parser – should be safe, broken by
Heiderich et.al.
• JSAgents/IceShield: see below
Overview
1.
2.
3.
4.
5.
6.
Web Origins, Browser DOM and the Same Origin Policy
Reflected XSS
Stored XSS
DOM XSS
Classical Countermeasures
JSAgents
Ausblick: Cross Site Request Forgery
Schritt 2: Einloggen des Opfers bei
Hotmail.
1: Login auf NY Times Webseite
3: http-Link (z.B. in einem <img>-Tag)
enthält Query-String mit dem Befehl,
eine E-Mail an collect@attacker.org
zu senden.
Victim
38
nytimes.com
2: Anschauen der Webseite des Angreifers
http://www.freedom-totinker.com/blog/wzeller/popular-websitesvulnerable-cross-site-request-forgery-attacks
Microsoft Identity
Managment
Jörg Schwenk
Lehrstuhl für Netz- und
Datensicherheit
attacker.org
Ausblick: Cross Site Request Forgery
1. ING Direct (ingdirect.com)
– Status: Fixed
2. YouTube (youtube.com)
– Status: Fixed
3. MetaFilter (metafilter.com)
– Status: Fixed
4. The New York Times (nytimes.com)
– Status: Fixed.
39
http://www.freedom-totinker.com/blog/wzeller/popular-websitesvulnerable-cross-site-request-forgery-attacks
Microsoft Identity
Managment
Jörg Schwenk
Lehrstuhl für Netz- und
Datensicherheit

Similar documents