Bypassing Same Origin Policy - Hacking-Lab · 2010. 9. 7. · Tel +41 55-214 41 60 Fax +41 55-214...

Post on 08-Sep-2020

0 views 0 download

Transcript of Bypassing Same Origin Policy - Hacking-Lab · 2010. 9. 7. · Tel +41 55-214 41 60 Fax +41 55-214...

Tel +41 55-214 41 60Fax +41 55-214 41 61team@csnc.ch www.csnc.ch

Compass Security AGGlärnischstrasse 7Postfach 1628CH-8640 Rapperswil

Bypassing Same Origin Policy

Simon Egli, IT Security Analyst

© Compass Security AG Slide 2www.csnc.ch

© Compass Security AG Slide 3www.csnc.ch

© Compass Security AG Slide 4www.csnc.ch

© Compass Security AG Slide 5www.csnc.ch

© Compass Security AG Slide 6www.csnc.ch

E-Banking

© Compass Security AG Slide 7www.csnc.ch

Why?Separated Content

Restricted DOM Access

Access to Cookies

© Compass Security AG Slide 8www.csnc.chSam

e O

rig

in P

olic

yS

am

e O

rig

in P

olicy

Same Origin Policy Same Origin Policy

© Compass Security AG Slide 9www.csnc.ch

19901st Web Server1st Web Site1st Web Browser

© Compass Security AG Slide 10www.csnc.ch

© Compass Security AG Slide 11www.csnc.ch

1995

© Compass Security AG Slide 12www.csnc.ch

1996JavaScriptSame Origin PolicyNetscape Navigator 2.0

© Compass Security AG Slide 13www.csnc.ch

2003Web 2.0

think Web 2.0 is of course a piece of jargon, nobody evenknows what it means Tim Berners-Lee

© Compass Security AG Slide 14www.csnc.ch

© Compass Security AG Slide 15www.csnc.ch

1996

1998

1999

2001

2004

2005

2006

© Compass Security AG Slide 16www.csnc.ch

Same Origin Policy

© Compass Security AG Slide 17www.csnc.ch

Same Origin Followers

Restricted access to Cookies / DOM for: Java Script

XMLHttpRequest (XHR)

Adobe Flash

Java Applet

Microsoft Silverlight

ActiveX

Browser Extensions & Plugins

© Compass Security AG Slide 18www.csnc.ch

© Compass Security AG Slide 19www.csnc.ch

XMLHttpRequest (XHR)

Background HTTP requests from JavaScript

Invented by Microsoft in 2000 (Internet Explorer 5)

IE 5/6: COM/ActiveX object Microsoft.XmlHttp

IE 7, Firefox, Opera, Safari and other browsers:Native JavaScript object XmlHttpRequest

© Compass Security AG Slide 20www.csnc.ch

XMLHttpRequest (XHR)

XMLHttpRequest

© Compass Security AG Slide 21www.csnc.ch

And AJAX / XMLHttpRequest?

Non-origin requests are

not supported with XHR

var xmlHttp = new XMLHttpRequest();

var url = 'http://www.other.com/res/pub-data/';

function callOtherDomain(){

if(xmlHttp) {

xmlHttp.open('GET', url, true);

xmlHttp.onreadystatechange = handler;

xmlHttp.send();

}

www.other.com www.origin.com

© Compass Security AG Slide 22www.csnc.ch

Use Script from 3rd Party

JavaScript from 3rd party site IS

GENERALLY DENIED to access

the origin cookie because of the

SAME ORIGIN POLICY

3rd party site Origin site

© Compass Security AG Slide 23www.csnc.ch

Origin Determination Rule

= Protokoll (http/https)

+ Host (www.csnc.ch)

+ Port (:80)

© Compass Security AG Slide 24www.csnc.ch

Origin Example

Referenz URL: http://www.csnc.ch/de/index.html

1. http://www.csnc.ch/en/index.html

2. https://www.csnc.ch/de/index.html

3. http://csnc.ch/de/index.html

4. http://v1.www.csnc.ch/de/index.html

s

v1

© Compass Security AG Slide 25www.csnc.ch

By-passing SOP?

© Compass Security AG Slide 26www.csnc.ch

Why by-passing SOP?

www.mashup.com

© Compass Security AG Slide 27www.csnc.ch

Why by-passing SOP?

www.mashup.com

© Compass Security AG Slide 28www.csnc.ch

Use Script from 3rd Party

JavaScript from 3rd party site

IS ALLOWED to access the

origin cookie, if the script is

loaded from the origin site

with <script src=>

<script src=http://3rdpartysite/m.js>

3rd party site Origin site

© Compass Security AG Slide 29www.csnc.ch

Example Google Analytics

Tel +41 55-214 41 60Fax +41 55-214 41 61team@csnc.ch www.csnc.ch

Compass Security AGGlärnischstrasse 7Postfach 1628CH-8640 Rapperswil

A New Solution is Required!

You will loose control andauthority of your domain if youuse <script src tags!

© Compass Security AG Slide 31www.csnc.ch

Cross-Origin Resource Sharing

CORS, a W3C Working Draft - 27 July 2010

© Compass Security AG Slide 32www.csnc.ch

CORS Compatibility

XMLHttpRequest (XHR) XDomainRequest (XDR)

v3.5

V4.0

v2.0V8.0

© Compass Security AG Slide 33www.csnc.ch

CORS Simple Request

var xmlHttp = new XMLHttpRequest();

var url = 'http://www.other.com/res/pub-data/';

function callOtherDomain(){

if(xmlHttp) {

xmlHttp.open('GET', url, true);

xmlHttp.onreadystatechange = handler;

xmlHttp.send();

}

www.other.com www.origin.com

© Compass Security AG Slide 34www.csnc.ch

Simple Request ExampleClient Request:GET /resources/public-data/ HTTP/1.1Host: bar.otherUser-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre)Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveReferer: http://foo.example/examples/access-control/simpleXSInvocation.htmlOrigin: http://foo.example

#1 Example Server Response:HTTP/1.1 200 OKDate: Mon, 01 Dec 2008 00:23:53 GMTServer: Apache/2.0.61 Access-Control-Allow-Origin: *Keep-Alive: timeout=2, max=100Connection: Keep-AliveTransfer-Encoding: chunkedContent-Type: application/xml

[XML Data]

#2 Example Server Response:HTTP/1.1 200 OKDate: Mon, 01 Dec 2008 00:23:53 GMTServer: Apache/2.0.61 Access-Control-Allow-Origin: http://foo.exampleKeep-Alive: timeout=2, max=100Connection: Keep-AliveTransfer-Encoding: chunkedContent-Type: application/xml

[XML Data]

© Compass Security AG Slide 35www.csnc.ch

CORS Preflighted Request Example

www.other.com www.origin.com

1.) OPTIONS Request2.) GET / POST Request3.) Server sends data

1.

2.3.

© Compass Security AG Slide 36www.csnc.ch

CORS Request with credentials

var xmlHttp = new XMLHttpRequest();

var url = 'http://www.other.com/res/pub-data/';

function callOtherDomain(){

if(xmlHttp) {

xmlHttp.open('GET', url, true);

xmlHttp.withCredentials = "true";

xmlHttp.onreadystatechange = handler;

xmlHttp.send();

}

www.other.com www.origin.com

© Compass Security AG Slide 37www.csnc.ch

Request with CredentialsClient Request:GET /resources/public-data/ HTTP/1.1Host: bar.otherUser-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre)Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveReferer: http://foo.example/examples/access-control/simpleXSInvocation.htmlOrigin: http://foo.exampleCookie: pageAccess=2

Server Response:HTTP/1.1 200 OKDate: Mon, 01 Dec 2008 00:23:53 GMTServer: Apache/2.0.61 Access-Control-Allow-Origin: http://foo.exampleAccess-Control-Allow-Credentials: trueKeep-Alive: timeout=2, max=100Connection: Keep-AliveContent-Type: application/xml

[XML Data]

© Compass Security AG Slide 38www.csnc.ch

Mitigation

© Compass Security AG Slide 39www.csnc.ch

Mitigation

CORS allowes to load cross-domain data from foreign domains

Server decides which origin is allowed to access the data

Separate critical / non-critical applications into different subdomains E.g. http://app1.mybank.com / http://app2.mybank.com

Host third-party scripts by yourself or trust the source

Load third-party scripts via local proxy

Cross origin resource sharing (CORS) Fully supported (XMLHttpRequest) by Firefox 3.5, Safari 4, Google Chrome 2

Proprietary implemented (XDomainRequest) by Internet Explorer 8

© Compass Security AG Slide 40www.csnc.ch

Q/A Session

© Compass Security AG Slide 41www.csnc.ch

Vielen Dank

© Compass Security AG Slide 42www.csnc.ch

References / Further Links

http://code.google.com/p/browsersec/w/list

http://www.w3.org/TR/cors/

https://developer.mozilla.org/En/HTTP_Access_Control

http://msdn.microsoft.com/en-us/library/cc709423(VS.85).aspx

http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

http://www.nczonline.net/blog/2008/04/27/cross-domain-xhr-removed-from-firefox-3/