SharePoint 远程代码执行缝隙安全公告

颁布功夫 2019-03-29

缝隙编号和级别


CVE编号:CVE-2019-0604,危险级别:高危, CVSS分值:7.8


影响版本:


Microsoft SharePoint Server 2019
Microsoft SharePoint Enterprise Server 2016
Microsoft SharePoint Foundation 2013 Service Pack 1
Microsoft SharePoint Server 2010 Service Pack 2


缝隙概述


SharePoint是微软的一款团队合作解决规划,用于团队间共享和治理内容和知识。它使用ASP.NET开发,后端数据库使用Microsoft SQL Server。
成功利用缝隙,可导致Windows系统服务器远程执行号令,有可能齐全节造服务器。
攻击者可将精心机关的要求通过ItemPicker WebForm控件传入后端EntityInstanceIdEncoder.DecodeEntityInstanceId(encodedId)步骤中,由于步骤没有对传入的encodedId进行任何处置,也没有对XmlSerializer机关函数的类型参数进行限度,可直接通过XmlSerializer反序列化,造成号令执行。
要利用该缝隙,必要授权接见SharePoint提供的治理网页,授权账户可所以一个域账户。


缝隙细节


利用前提:


可授权接见SharePoint提供的治理网页,授权账户可所以一个域账户。


环境搭建:


?    Windows server 2016
?    ASP.NET有关组件
?    Microsoft SQL Server
?    SharePoint Server
装置SharePoint前能够先运行prerequisiteinstaller 装置SharePoint必备的组件,而后装置Microsoft SQL Server,配置好账户。若是在单机上搭建SharePoint必要在此时将服务器切换为域控服务器,而后再成立域账号装置和部署SharePoint。本地账号不切合SharePoint的部署要求。


缝隙分析:


缝隙入口在http:// SharePointDomin Or IP>:/_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机关函数的类型参数可控。


宝运莱·(中国区)最新官方网站


补丁分析:


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


宝运莱·(中国区)最新官方网站


缝隙利用


在缝隙分析时,我们在EntityInstanceIdEncoder类中看到另一个步骤EncodeEntityInstanceId(),能够直接使用它天生Payload。
机关XML:


宝运莱·(中国区)最新官方网站


天生Payload:


宝运莱·(中国区)最新官方网站


天生Payload时会弹出一次推算器,关掉即可。
PoC:


宝运莱·(中国区)最新官方网站


建复建议


目前官方已推出相应补丁,请尽快升级进行建复。
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


参考链接


https://www.thezdi.com/blog/2019/3/13/cve-2019-0604-details-of-a-microsoft-sharepoint-rce-vulnerability
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-0604