New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Solarwinds Core Orion Service SQL injection (CVE-2014-9566) #4836
Conversation
| '__EVENTARGUMENT' => '', | ||
| '__VIEWSTATE' => viewstate, | ||
| 'ctl00$BodyContent$Username' => datastore['USERNAME'], | ||
| 'ctl00$BodyContent$Password' => datastore['PASSWORD'] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@brandonprry Can you provide some clarity here. The login function takes the username and password from datastore and authenticate. By default that is Guest with blank password. However, when the injection is done, you call login(username,'') which will call the method with the injected username and blank password however the login will still use the previous username (guest) and password in the datastore which won't prove anything.
On line 90, I inserted the statement:
datastore['username'] = usernamejust for demonstration and I got the response:
The module fail to login with the newly created account but in the current state it will still display success since it is using the datastore username and password.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be more like
def login (username = datastore['USERNAME'], password = datastore['PASSWORD'])
res = send_request_cgi({
'uri' => normalize_uri(target_uri.path, 'Orion', 'Login.aspx')
})
viewstate = $1 if res.body =~ /id="__VIEWSTATE" value="(.*)" \/>/
cookie = res.get_cookies
res = send_request_cgi({
'uri' => normalize_uri(target_uri.path, 'Orion', 'Login.aspx'),
'method' => 'POST',
'vars_post' => {
'__EVENTTARGET' => '',
'__EVENTARGUMENT' => '',
'__VIEWSTATE' => viewstate,
'ctl00$BodyContent$Username' => username,
'ctl00$BodyContent$Password' => password
},
'cookie' => cookie
})
if res.code == 200
fail_with("Authentication failed with username #{username}")
end
return cookie + ';' + res.get_cookies
endThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great catch, fixing now. Originally, the login code lived in run, and was moved out. Missed updating this part.
|
11.5 is the latest version and is patched. Versions prior to 11.5 are vulnerable. |
|
I currently have vulnerable versions of the following if needed: SolarWinds-NCM-v7 |
|
I'm sure this module works, do you mind just e-mailing a pcap instead? msfdev[at]metasploit.com The code looks good except I would probably do a |
|
I can, will have to be tomorrow though. :) Will also add the nil check. |
|
Thank you. |
|
Sent. |
|
Hmm, it may be that the SQL schema for the user table isn't the same in 10.7 as in 11.4, which is what I have been testing against for NPM. If you could get me an installer for 10.7, I wouldn't mind taking a look at the schema to verify. |
|
I have received the pcap so I am ready to land this. If you would like this to be landed now, I can do it. If you prefer to wait a little bit longer to double check on 10.7, I can do that too. Please let me know. Thanks. |
|
I am OK with merging it in the current state. I tested with the versions prior to the latest available that I posted above, but can make an updated PR if I can get a hold of 10.7. |
|
@brandonprry I will take a look at it in a day or two (actually out of office for a few days) and send you the required setup file. |
Ok, then I will merge it today. Thanks. |
|
Thanks a bunch dude! @void-in, feel free to hit me up on IRC if you can get the installer. On Mon, Mar 2, 2015 at 11:45 AM, sinn3r notifications@github.com wrote:
http://volatile-minds.blogspot.com -- blog |

This pull request adds support for exploiting an authenticated stacked SQL injection within the core Orion service of many Solarwinds products, specifically:
Network Performance Monitor -- < 11.5
NetFlow Traffic Analyzer -- < 4.1
Network Configuration Manager -- < 7.3.2
IP Address Manager -- < 4.3
User Device Tracker -- < 3.2
VoIP & Network Quality Manager -- < 4.2
Server & Application Monitor -- < 6.2
Web Performance Monitor -- < 2.2
Any user can be used to exploit this, including the default Guest account (which has no password by default, and is the default user in the module). IIRC Tod should have a vulnerable trial.
This vulnerability was reported to Solarwinds on Dec 8th, 2014 and was assigned the CVE identifier CVE-2014-9566. A coordinated disclosure date of Feb 24th, 2015 was chosen by both parties.
Example run: