中共天津市委网络安全和信息化委员会办公室

天津市互联网信息办公室

【漏洞预警】CVE-2019-0604 SharePoint 远程代码执行安全预警通告

360ESG CERT | 2019年04月03日 09:39

     尊敬的客户:

  微软官方修复了存在于SharePoint中的远程代码执行漏洞(CVE-2019-0604)。利用该漏洞,攻击者可在Windows服务器上远程执行代码。该漏洞可造成的危害非常严重,请及时进行修复。

  360安全监测与响应中心将持续关注该漏洞进展,并第一时间为您更新该漏洞信息。

  文档信息

  文档名称

  CVE-2019-0604SharePoint 远程代码执行安全预警通告

  关键字

  CVE-2019-0604、SharePoint、远程代码执行

  发布日期

  2019年03月28日

  分析团队

  360安全监测与响应中心

  漏洞描述

  SharePoint是微软的一款团队协作解决方案,用于团队间共享和管理内容和知识。它使用ASP.NET开发,后端数据库使用Microsoft SQL Server。

  成功利用漏洞CVE-2019-0604,可导致Windows系统服务器远程执行命令,有可能完全控制服务器。

  攻击者可将精心构造的请求通过ItemPicker WebForm控件传入后端EntityInstanceIdEncoder.DecodeEntityInstanceId(encodedId)方法中,因为方法没有对传入的encodedId进行任何处理,也没有对XmlSerializer构造函数的类型参数进行限制,可直接通过XmlSerializer反序列化,造成命令执行。

  要利用该漏洞,需要授权访问SharePoint提供的管理网页,授权账户可以是一个域账户。

  风险等级

  360安全监测与响应中心风险评级为:高危

  预警等级:蓝色预警(一般事件)

  影响范围

  Microsoft SharePoint Server 2019

  Microsoft SharePoint EnterpriseServer 2016

  Microsoft SharePoint Foundation2013 Service Pack 1

  Microsoft SharePoint Server 2010Service Pack 2

  处置建议

  目前官方已推出相应补丁:

  Microsoft SharePoint Enterprise Server 2016

  Security Update for Microsoft SharePoint Enterprise Server 2016(KB4462211)

  https://www.microsoft.com/en-us/download/details.aspx?id=58072

  Microsoft SharePoint Foundation 2013 Service Pack 1

  Security Update for Microsoft SharePoint Enterprise Server 2013(KB4462202)

  https://www.microsoft.com/en-us/download/details.aspx?id=58063

  Microsoft SharePoint Server 2010 Service Pack 2

  Security Update for 2010 Microsoft Business Productivity Servers(KB4462184)

  https://www.microsoft.com/en-us/download/details.aspx?id=58066

  Microsoft SharePoint Server 2019

  Security Update for Microsoft SharePoint Server 2019 Core(KB4462199)

  https://www.microsoft.com/en-us/download/details.aspx?id=58061

  技术分析

  利用条件:

  • 可授权访问SharePoint提供的管理网页,授权账户可以是一个域账户。

  环境搭建:

  • Windows server 2016

  • ASP.NET相关组件

  • Microsoft SQL Server

  • SharePoint Server

  安装SharePoint前可以先运行prerequisiteinstaller 安装SharePoint必备的组件,然后安装Microsoft SQL Server,配置好账户。如果在单机上搭建SharePoint需要在此时将服务器切换为域控服务器,然后再建立域账号安装和部署SharePoint。本地账号不符合SharePoint的部署要求。

  漏洞分析:

  漏洞入口在http://:/_layouts/15/Picker.aspx?PickerDialogType=,通过修改WebForm PostBack后携带参数ctl00%24PlaceHolderDialogBodySection%24ctl05%24hiddenSpanData的值来加载Payload。使用反编译工具ILSpy加载SharePoint.dll搜索入口ItemPickerDialog,通过分析它的构造函数,发现其调用了父类的构造函数,传参如下:

  进入父类PickerDialog中,看构造函数:

  其中EntityEditorWithPicker也是一个WebForm控件,说明在这里传入了一个EntityEditorWithPicker的子类ItemPicker,跟入ItemPicker可看到ItemPicker确实继承自EntityEditorWithPicker,EntityEditorWithPicker又继承自EntityEditor:

  EntityEditor实现了接口:IPostBackDataHandler和ICallbackEventHandler,根据WebForm控件的生命周期,在页面中有事件触发__doPostBack()后,先调用通过ICallbackEventHandler实现的RaiseCallbackEvent()方法和GetCallbackResult()方法得到表单内容,再调用通过IPostBackDataHandler实现的LoadPostData()方法。


  回到EntityEditor中看GetCallbackResult()方法中调用了InvokeCallbackEvent()方法,InvokeCallbackEvent()方法调用了ParseSpanData()方法:

  来到ParseSpanData()中可以看出这里把表单提交的数据进行了处理。此处逻辑非常复杂,我们只跟对HiddenSpanData的处理:

  可发现此方法将HiddenSpanData的值放入了PickerEntity的List中,在经过一些处理后分割成数组,遍历数组,新建PickerEntity对象pickerEntity2,将其值放入pickerEntity2.Key中,最终放入arrayList中并赋值给类成员变量m_listOrderTemp:

  回到LoadPostData()方法看对m_listOrderTemp成员变量的处理,可看到在这里遍历了m_listOrderTemp成员变量的值并将其加进m_listRevalidation成员变量中,然后迭代进行Validate()操作:

  在Validate()方法中,将m_listOrderTemp成员变量赋值给m_listOrder成员变量:

  然后遍历Entities的值调用ValidateEntity()方法:

  Entities的值来自于上面的一行很不起眼的Lambda表达式方法,此方法将返回m_listOrder成员变量的值:

  跟到ValidateEntity()方法发现是虚方法,因此去子类找方法的重写。

  来到EntityEditorWithPicker类中看到了ValidateEntity() 方法的重写,发现其将PickerEntity的key(pe.Key)传入了Microsoft.SharePoint.BusinessData.Infrastructure.EntityInstanceIdEncoder.DecodeEntityInstanceId()中。

  进入DecodeEntityInstanceId() 方法发现反序列化,并且XmlSerializer构造函数的类型参数可控。

  .NET中XmlSerializer反序列化漏洞触发原理不再赘述,可参考360云影实验室的文章:.NET高级代码审计(第一课)XmlSerializer反序列化漏洞。

  PoC:

  在漏洞分析时,我们在EntityInstanceIdEncoder类中看到另一个方法EncodeEntityInstanceId(),可以直接使用它生成Payload。

  构造XML:

  生成Payload:

  生成Payload时会弹出一次计算器,关掉即可。

  PoC:

  补丁分析:

  安装补丁KB4462211后再次反编译,对比DecodeEntityInstanceId()方法的源码,发现已经不再支持对象类型的反序列化。

  产品线解决方案

  360天眼产品的应急处置方案:

  针对SharePoint中的远程代码执行漏洞(CVE-2019-0604)攻击利用方法,360天眼新一代威胁感知系统的流量探针已经第一时间核实现有的规则,已有规则能覆盖。名称为:.NET框架XmlSerializer反序列化漏洞,规则编号为:0x100205E0; 请尽快将规则版本号升级到3.0.0328.10981或以上。

  升级方法:可以使用两种方法升级, 1)在线升级:如下图,选择“网络升级”即可; 2)离线升级:如果无法在线升级,可通过下载离线升级包的方式进行规则升级。首先,从传感器升级页面下载“小钥匙”文件。

  然后,到公有云上导入“小钥匙”,下载离线升级包。公有云地址:

  https://cloud.skyeye.360safe.com/home/device

  最后,在新一代威胁感知系统流量探针的规则升级页面,点击“本地升级”

  导入下载的规则升级包即可。

  360网站应用安全云防护系统已更新防护特征库:

  360网神网站应用安全云防护系统已全局更新所有云端防护节点的防护规则,支持对SharePoint (CVE-2019-0604)远程代码执行漏洞的防护。

  360网神天堤防火墙产品防护方案:

  360新一代智慧防火墙(NSG3000/5000/7000/9000系列)和下一代极速防火墙(NSG3500/5500/7500/9500系列)产品系列,已通过更新IPS特征库完成了对该远程代码执行漏洞的防护。建议用户尽快将IPS特征库升级至” 1903281800” 以上版本并启用规则ID: 4959进行检测。

  360网神网络数据传感器系统支持最新规则库检测:

  360网神网络数据传感器(ND3000/5000/9000系列)产品系列,已通过更新IPS特征库完成了对该远程代码执行漏洞的检测。建议用户尽快将IPS特征库升级至最新的特征库” 1903281800” 以上版本并启用规则ID: 4959进行检测。

  参考资料

  [1].https://www.thezdi.com/blog/2019/3/13/cve-2019-0604-details-of-a-microsoft-sharepoint-rce-vulnerability

  [2].https://www.anquanke.com/post/id/172316

  时间线

  [1].3月28日 360安全监测与响应中心发布预警.