Donnerstag, 8. Januar 2015

Save Your Cloud: Exploiting Eucalyptus 4.0.0 and 4.0.1

In a previous post of this series, we showed why a private cloud is not necessarily more secure than a public one and presented a vulnerability in OpenStack. This post focuses on XSS vulnerabilities we found in Eucalyptus, a well-known Cloud Management Platform. We also demonstrate an exploit for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se vulnerabilities.

The Infrastructure-as-a-Service platform Eucalyptus emerged from a research project at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 University of Santa Barbara and was commercialized in 2009 by Eucalyptus Systems Inc. Eucalyptus mimics Amazon Web Services (AWS), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore Eucalyptus can manage eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Amazon or Eucalyptus VMs.


VM instances can also be moved between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Amazon Elastic Compute Cloud and an Eucalyptus private cloud. Eucalyptus is being used by a wide range of commercial and academic clients, including defense contractors and institutions such as Raycá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365on and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 US Department of Defense. Only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 recent versions of Eucalyptus are fully open source (GPLv3); older versions used proprietary components such as support for certain hypervisors or network storage systems.

Architecturally, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 web interface of Eucalyptus (see Figure 1) is interesting as it employs most modern JavaScript Model View Controller libraries to render cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 content that is being sent to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's browser. This architectural aspect guarantees for a security model that is robust against XSS attacks as none of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user-controlled content is actually reflected but delivered from static data files and later being woven into static templates.

Figure 1: Eucalyptus Management Console with a VM and it's control options
Our security tests however showed, that this seemingly well-thought concept of rendering and securing user-controlled data was flawed because of a string reliance on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security promises cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AngularJS library gives. AngularJS applications often mix user-controlled content into so-called AngularJS expressions. Those expressions execute a limited and scoped subset of JavaScript and are thought to be secure from injections.

The security of AngularJS expressions is built upon cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AngularJS sandbox — a combination of a string-parser and several object checks that assure that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code to be executed does not violate any constraints and is considerably save to be evaluated. However, Eucalyptus 4.0.0 used an outdated and thus vulnerable version of AngularJS (v1.2.9). Based on a contribution by J. Horn, a bypass for this sandbox was tested against that AngularJS version. We found that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vulnerability of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AngularJS version in place was indeed exploitable. By injecting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following AngularJS expression an attacker can gain full control over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 client-side code that is executed:
{{'abc'.sub.call.call(({})['constructor'].getOwnPropertyDescriptor(('abc').sub.__proto__,'constructor').value,0,'location=name')()}}
The expression essentially bypasses two different checks installed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AngularJS sandbox and manages to get access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 JavaScript Function constructor — a function that in return accepts arbitrary strings to be executed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 global scope of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 loaded document. This is being done by taking an arbitrary string, accessing one of its methods and accessing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 call() method. Given cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 used parameters this returns cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mentioned Function constructor. By indirectly accessing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 constructor cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sandbox is being bypassed, as it does not check return values. The returned Function constructor is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n again called indirectly to avoid cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sandbox checks a second time. The length restrictions cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Eucalyptus platform imposes can be bypassed by using window.name to store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 payload.

VM-Control & Privilege Escalation in Eucalyptus 4.0.0

Since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above sandbox bypass is a persistent XSS that has to be deployed manually, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack is not applicable to a private cloud. However, if Eucalyptus is used to build a public cloud, attacks are possible. Once cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker can execute arbitrary JavaScript code, it is possible to create new VMs as well as start or stop existing ones. Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore, a rogue user may inject cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code in a data field that can also be read by an administrative user. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user lures an administrator into opening a prepared page, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 payload could add an admin policy to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's account turning it into an administrative account as well. This way, a non-administrative user can illegitimately gain access to elevated privileges.

Steal Data from an Eucalyptus VM

Eucalyptus offers a feature to read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 console output of a VM for debugging. One cannot send commands to a VM this way, but if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VM outputs sensitive information (e.g. content from config files or default login credentials) to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 console, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can be stolen. We implemented a proof of concept exploit that demonstrates cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack. A video of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack can be seen here:


There is a security advisory for this bug. It was filed under CVE-2013-4770. It has been fixed with Eucalyptus 4.0.1.

Expression Injection in Eucalyptus 4.0.1

With Eucalyptus 4.0.1, AngularJS has been updated to version 1.2.20. As an additional protection, '{{' in user input is replaced by '{ {' which defuses AngularJS expressions. However, we found out that this does not happen platform-wide. Some input field such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name of a keypair remained unprotected. Using an AngularJS sandbox bypass discovered by Mathias Karlsson, we were again able to execute code in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 context of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Management Console to e.g. perform cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack shown above. Since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name of a keypair is also used in URLs (like https://server/keypairs/[keyname]) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XSS can be used in a reflected way so that a private cloud setup could be attacked with it.

This vulnerability also has a corresponding security advisory and was filed under CVE-2014-5039. It has been fixed with Eucalyptus 4.0.2.

This result is a collaborative work togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r with Mario Heiderich.

Beliebte Posts