CVE-2019-0604:微软SHAREPOINT远程执行的脆弱性分析
字数 1966 2025-08-29 08:32:02
Microsoft SharePoint 远程代码执行漏洞(CVE-2019-0604)技术分析与利用教学
漏洞概述
CVE-2019-0604是Microsoft SharePoint中的一个严重远程代码执行(RCE)漏洞,允许攻击者在SharePoint应用和服务器账户中执行任意代码。该漏洞由Markus Wulftange发现并报告给ZDI计划。
漏洞原理
核心问题
漏洞的核心在于XmlSerializer(Type)构造函数的不安全使用。虽然XmlSerializer通常被认为是安全的序列化程序,但当攻击者能够控制预期的类型数据时,就可能被利用进行反序列化攻击。
漏洞位置
主要存在于以下两个程序集中的方法:
Microsoft.SharePoint.dll中的Microsoft.SharePoint.BusinessData.Infrastructure.EntityInstanceIdEncoder.DecodeEntityInstanceId(string)Microsoft.SharePoint.Portal.dll中的Microsoft.Office.Server.ApplicationRegistry.Infrastructure命名空间中的相同功能类型
技术分析
数据流分析
-
起点分析:
- 漏洞起点在
EntityInstanceIdEncoder.DecodeEntityInstanceId(string)方法 - 该方法接收一个
encodedId参数,用于指定期望类型(typeName)和反序列化数据
- 漏洞起点在
-
调用链分析:
ItemPicker.ValidateEntity(PickerEntity) → EntityEditor.Validate() → EntityEditor.LoadPostData(string, NameValueCollection) → System.Web.UI.IPostBackDataHandler.LoadPostData(string, NameValueCollection) -
关键控制点:
EntityEditor.Entities属性由私有字段m_listOrder决定m_listOrder从m_listOrderTemp获取值m_listOrderTemp的值来自EntityEditor.ParseSpanData方法ParseSpanData处理名为"hiddenSpanData"的HtmlInputHidden字段值
攻击面
攻击可通过以下页面实现:
/_layouts/15/Picker.aspx- 需要设置"PickerDialogType" URL参数为以下类型之一:
Microsoft.SharePoint.WebControls.ItemPickerDialog(在Microsoft.SharePoint.dll中)Microsoft.SharePoint.Portal.WebControls.ItemPickerDialog(在Microsoft.SharePoint.Portal.dll中)
漏洞利用
利用条件
- 能够访问SharePoint服务器
- 能够向
/_layouts/15/Picker.aspx发送POST请求 - 能够控制
hiddenSpanData字段的值
利用步骤
-
定位攻击点:
- 访问
/_layouts/15/Picker.aspx页面 - 设置"PickerDialogType"参数为ItemPickerDialog类型
- 访问
-
构造恶意请求:
- 构造POST请求,包含恶意构造的
ctl00$PlaceHolderDialogBodySection$ctl05$hiddenSpanData字段 - 该字段值应以特定结构开头(如"dummy")
- 构造POST请求,包含恶意构造的
-
触发漏洞:
- 提交表单,触发反序列化过程
- 恶意payload将被
EntityInstanceIdEncoder.DecodeEntityInstanceId处理
调试验证
使用dnSpy调试工具:
- 附加到IIS工作进程(w3wp.exe)
- 在
EntityInstanceIdEncoder.DecodeEntityInstanceId设置断点 - 观察调用栈和数据流
防御措施
-
官方补丁:
- 及时安装Microsoft发布的补丁
-
临时缓解措施:
- 限制对
/_layouts/15/Picker.aspx的访问 - 监控异常的反序列化请求
- 限制对
-
开发实践:
- 避免使用用户可控数据作为
XmlSerializer的类型参数 - 实施严格的数据验证
- 避免使用用户可控数据作为
工具与资源
-
分析工具:
- dnSpy:用于.NET应用程序的反编译和调试
-
参考资源:
- ZDI漏洞报告
- Alvaro Muñoz和Oleksandr Mirosh的JSON攻击研究
总结
CVE-2019-0604展示了即使是被认为安全的API(如XmlSerializer)在不正确使用时也会带来严重风险。该漏洞的关键在于攻击者能够控制反序列化的类型参数,从而执行任意代码。理解这类漏洞的数据流和控制流对于开发安全的应用程序至关重要。