Wednesday, September 26th, 2007
The whole concept of “Taking Ownership” of someone else’s content can be VERY dangerous. The reason taking ownership of content is so scary is because the ENTIRE trust model for the World Wide Web is basically built on ONE thing… the DOMAIN NAME.
This is why issues like XSS on sites like google.com are such a big deal… XSS basically allows an attacker to execute client side code in the context of the vulnerable domain. Malicious client side script is one thing… but malicious client side script executed in the context of a trusted domain is something entirely different… but I digress…
Google Documents basically allows you to upload your documents (aka content) to a Google server. Once you’ve uploaded the document, Google has essentially “taken ownership” of the document (content). There are ways to minimize the risks associated with taking ownership of content and it seems that Google has taken some measures to sanitize for XSS… but it seems that their focus on XSS may have caused them to miss a different type of cross domain exposure.
Flash Players (>126.96.36.199) support a new method for making cross domain requests. This method allows a user (or attacker) to specify where a crossdomain.xml file is located on a particular server. Essentially, if the flash player finds this crossdomain file (and the file is properly formatted) the flash player will allow cross domain requests to the domain that “owns” the crossdomain policy file, in this case… Google.com. We talked about issues like this at our DEFCON talk…. but I guess Google missed out.
So, the Proof of Concept works like this:
- NO XSS IS REQUIRED!
- Create a Google Docs Account and upload a properly formatted Crossdomain.xml file
- Once the file is uploaded, you publish the file, exposing the file to every authenticated Google.com user.
- Create a flash object on a malicious server, pointing the System.security.loadPolicyFile() to the document that you uploaded to Google Docs.
- Once the Flash object has read the contents of the crossdomain file from the Google server, it assumes that Google has allowed cross domain requests (I mean… who in their right mind would allow random people to upload random files to thier server and serve that content under the context of their trusted domain name?).
- Now, the flash object has full access to the google.com domain and can steal all your Google information.
Proof of Concept can be found here. The PoC just displays your contact list, but I have full access to the Google.com domain, so the sky is the limit (aka I can read all your email too)… I left out one key step needed to pull this off and the source for the Flash applet will not be published at this time in order to slow the kiddies.
If anyone from Google Security comes across this page, send me an email and we can go over the missing step as well as the Flash Source… I’d also like to talk to you about another hole in Google Docs that allows me to ACCESS ANY ARBITRARY USERS DOCUMENTS.