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