Microsoft
Passport Account Hijack Attack
(Hacking hotmail and more)
- By Obscure^ obscure@eyeonsecurity.org
Web Applications
Web Applications are made to extend the usability
of the HTTP protocol, along with the efficiency
of HTML, JavaScript and so on. The big advantage
of Web Applications is that they are immediately
accessible, relatively easy to use and can be
centrally customised by the developer, at the
expense of security issues.
Security issues in Web Applications rise because
the HTTP protocol was not made to be extended
to Web Applications, and therefore many security
measures and extended authentication methods have
to be implemented into the Web App.
Authentication
In Web Applications, users have to be authenticated,
and will usually be assigned a profile, limited
hard disk space, the ability to send data and
communicate with other users on the same Web Application,
and maybe other Applications and protocols. Many
Web Mail Applications, such as HotMail, make use
of cookies to store authentication. For each session
at Hotmail, once a user is authenticated, he is
assigned a *random* cookie, which identifies him
from other authenticated users. This way the password
does not have to be sent each time he accesses
a different page while authenticated. This also
means that once the session has ended, the session
authentication should expire and therefore a new
cookie has to be assigned when the user authenticates
himself with HotMail and starts a new session.
All this is described well on the MS Passport
site:
Passport White Paper
From now on I will be focusing on HotMail only,
rather than just about any Web Application. However
one must understand that the same attacks described
here, can be easily adapted for other Web Applications
and Web Mail packages, which make use of html,
JavaScript and Cookie technology.
Microsoft Passport
Microsoft Passport: "A single name, password
and wallet for the web". This means that
using the same credentials you can access your
e-mail (Hotmail), instant messenger service (MSN
messenger), calendar (task manager, reminders
and so on), and loads of other useful services.
All these services are centralized and authenticate
with a central system called MS passport. Of course
as much as any authorised user can browse without
supplying a password from a service which makes
use of the Passport technology to another, a cracker
(malicious hacker) can do the same without much
problems once he gets to look like the authorized
user. This kind of service is intended for personal
use, so people certainly wouldnt like others
to read their e-mail, or view their daily schedule.
Implementation
Microsoft is trying to build everything around
their Network, using Passport authentication.
This is complaint with the .NET framework, which
allows everything to be seamlessly integrated
so that users can jump from one service to another
without any problems.
As currently implemented, users can authenticate
to Passport via a number of ways:
Hotmail and Passport sites
MSN messenger
MSN Explorer
Outlook Express
Other MS applications.
Outlook Express and MSN Explorer make use of Integrated
authentication. Hotmail and Passport sites use
SSL (HTTPS) to authenticate, and MSN messenger
makes use of MD5 security package.
Once a malicious user gets hold of the session
cookie, the above-mentioned authentication methods
are useless for services, which rely on the HTTP
protocol (such as Hotmail).
Flaws in the design
Previously many exploits inhibited the various
Web Browsers, which enabled users to steal cookies
from other websites. However this aspect of security
in the Passport authentication scheme is supposed
to be taken care of by the client user.
To steal the session cookie, the malicious user
must either:
· Take hold of the target
machine
· Fool the user into sending
the session cookie
· Fool the system into
sending the session cookie
In this paper I will discuss the 3rd option.
Fooling the system
JavaScript allows users to set and retrieve cookies.
This is very useful for normal HTTP sites as well
as Web Applications. However Web Applications
need a lot more control over normal websites.
This control is normally achieved through filtering
of possibly malicious code in the HTML.
Users do not need permission to send e-mails to
authenticated users, giving them the possibility
to post data to an authenticated users mailbox.
This is obvious to some extent, since we are talking
about e-mail. No one needs authentication to send
an e-mail to a Hotmail account. Therefore the
e-mail sent to the Hotmail user has to be treated
as non-trusted content.
Hotmail takes very good care to filter out JavaScript,
ActiveX and Java applets. Lately it also started
checking for images which link to outside the
Hotmail account. Having images linking to non-trusted
sites means that those sites can easily track
the status of the e-mail (if it was read or not).
So that a tag in an html mail such as:
<img src=http://spam.me.com/tracking.gif>
would get filtered by the Hotmail Filtering System.
To get around this filtering, one has to just
encode the http:// part like &x68;ttp://.
68 is the hex value h, and therefore the Web Browser
converts back the encoded value to its original
signifier. Of course, the Hotmail filtering system
is not working exactly like the Web Browser, and
this is where the flaw stands out.
However this is not the major
issue I am writing about in this document.
Cross Site Scripting
When a logged in user follows an non-trusted link,
the Hotmail credentials do not get sent to the
website. The Hotmail filtering system also takes
care to hide the URL of the users Hotmail
account to ensure his privacy (and maybe to prevent
other attacks).
On the other hand, when a user follows an MSN
(Passport and therefore trusted) site from a non-trusted
e-mail, the credentials get sent to the Passport
site, and no precautions are taken. This means
that the Passport authentication is not broken
and therefore the different services provided
by MS Passport operate seamlessly as described
earlier.
This also means that if an ASP script which resides
on any MS Passport enabled site allows the user
to customise the page (even if not intended) such
as inserting JavaScript code, the whole system
is flawed.
In my exploit, a user only needs to click on a
trusted link and he (or she) will be sending his
(or her) credentials to a remote server.
How is this achieved?
To further explain the issue, I will provide an
example of a flawed ASP script on an MS Passport
site: ErrorMsg.asp, which resides on http://auctions.msn.com/Scripts/
This ASP script can be passed 2 (or possibly more)
arguments:
· Source
· ErrMsg
Here we are concerned with ErrMsg argument. This
argument allows different scripts to generate
different errors and display them to the user
in some nice html.
ErrMsg will usually be filled in with something
like User is not authenticated. Now
what if it is filled with <b>This should
be bold</b>. To my astonishment (at the
time of writing this is not fixed yet), I got
the HTML tag to work, with no filtering from the
ASP script.
To further illustrate this, the url which is passed
is actually:
http://auctions.msn.com/Scripts/ErrorMsg.asp?Source=O&ErrMsg=<b>This%20should%20be%20bold</b>.
If no filtering is done for JavaScript, we
can very easily inject our own JavaScript code
to retrieve the session cookie stored in the Hotmail
users browser. Sadly, lately (during the
writing of this document), Microsoft seemed to
try to fix this by filtering JavaScript (and embedded
scripts) tags and entities. This means when the
ASP script is passed the following:
· <Script
· Alert
· JavaScript:
· And other commonly used
javascript methods
the ASP script simply ignores
the input, successfully filtering common Cross
Site Scripting attacks.
However Microsoft did not fully patch the issue,
so that if HTML encoding were used, the filtering
system would not detect the embedded script code,
and the code would still be executed.
This means that to produce an alert box to display
the session cookies, instead of simply using something
like:
http://auctions.msn.com/Scripts/ErrorMsg.asp?Source=O&ErrMsg=<IMG%20SRC='javascript:alert(document.cookie)'>
We have to encode the URL such as:
http://auctions.msn.com/Scripts/ErrorMsg.asp?Source=O&ErrMsg=<IMG%20SRC='%26%23x6a;avasc%26%23000010ript:a%26%23x6c;ert(document.%26%23x63;ookie)'>
To complete the exploit the malicious user
has to send a URL, which actually passes the Cookie
to a 3rd party CGI script (probably made by the
cracker exploiting this issue) instead of displaying
them to the Hotmail user in a Message box. The
end picture could look very similar to the one
below.
Once the target Hotmail user clicks on the mypic.jpg
link, he would have sent his credentials to the
attacker without asking, any alert or sign that
this has actually happened.
The End.
I do not claim that anything presented here is
correct. This paper is based upon trial and error,
which means that I do not have access to any source
code, and therefore cannot know the actual underlying
code that contains the flaw. By the time you read
this, Hotmail and MS Passport sites, should have
hopefully fixed the described issues.
http://www.eyeonsecurity.org
obscure@eyeonsecurity.org
|