Authenticated SSRF vulnerability in the heat dashboard (horizon dashboard)
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
| heat-dashboard |
New
|
Undecided
|
Unassigned |
Bug Description
Hello,
I found a SSRF vulnerability in the "Stack Preview" functionality. This functionality can be reached like this :
- on the left hand size menu (of the horizon dashboard) click
"
- then from the submenu select
"Stacks"
- then on the right of the screen the button
is present.
- then in the
"Template Source"
- it is possible to select "URL" and choose an arbitrary address including internal IP addresses. The result can be retrieved from "alert-danger" div tag class on the server response.
This makes it possible to perform GET request on arbitrary ports and IP (external or internal). The code that is being executed during the URL request is located here :
heat/
def get(url, allowed_
"""Get the data at the specified URL.
The URL must use the http: or https: schemes.
The file: scheme is also supported if you override
the allowed_schemes argument.
Raise an IOError if getting the data fails.
"""
LOG.
components = urllib.
if components.scheme not in allowed_schemes:
raise URLFetchError(
if components.scheme == 'file':
try:
return urllib.
except urllib.
raise URLFetchError(
available on the https:/
Possible results include :
http://
http://
http://
http://
Which gives the attacker a good idea of which ports are open and what IP addresses are reachable.
In the attachement you can find a simple exploitation script.
Best regards,
b (blogresponder) wrote : | #1 |
Jeremy Stanley (fungi) wrote : | #2 |
Zane Bitter (zaneb) wrote : | #3 |
Both heat and heat-dashboard have moved their bugs to storyboard.
IIUC this is not an issue with heat-dashboard, but with Heat itself (as you point out it's the code in heat/common/
In any event, this vulnerability has been known practically since the feature of fetching a template from a URL was implemented. I don't see any point continuing to keep the bug private. We'd like to get rid of the feature altogether, and have discussed it many, many times, but it would involve breaking backwards compatibility. For example, here's a discussion from 2013:
http://
Heat bugs have moved to storyboard.
information type: | Private Security → Public |
Jeremy Stanley (fungi) wrote : | #4 |
Thanks, Zane. Since this sounds like a known issue and you suggested switching it to public, I went ahead and did that.
As you indicated, Heat deliverables are using https:/
description: | updated |
description: | updated |
description: | updated |
While reports of suspected vulnerabilities for heat-dashboard are not normally coordinated by the OpenStack VMT, the reporter reached out to and subscribed us requesting some assistance as this has been sitting untriaged for over a month. I have in turn subscribed the Heat team's core security reviewers since I'm unsure who has initial visibility into private security bugs for heat-dashboard.
Given the probable low risk/impact from the described issue I'm inclined to recommend continuing discussion in public, but it's up to the Heat team and reporter to decide that.