SharePointBDC服务反序列化代码执行漏洞的分析(CVE-2019-1257)

2019年11月4日00:03:53 发表评论
AD1 AD2 AD3 AD4

漏洞详情

由于自定义BDC模型定义中的任意方法参数类型,Microsoft SharePoint 2016中的业务数据连接(BDC)服务容易受到XmlSerializer数据流的反序列化的攻击。如AlvaroMuñoz和Oleksandr Mirosh在其Black Hat 2017 演讲中所示,对XmlSerializer数据流进行反序列化可以导致任意代码执行。

SharePoint允许使用业务数据连接模型文件格式(MS-BDCMFFS)数据格式来指定自定义BDC模型。该规范的一部分是方法和参数的定义,这是Microsoft提供的示例代码:

SharePointBDC服务反序列化代码执行漏洞的分析(CVE-2019-1257)

定义了一个名为GetCustomer的方法,该方法包装了一个名为sp_GetCustomer(请参阅RdbCommandText属性)的存储过程。输入参数(Direction="In")和返回参数(Direction="Return")都使用各自的类型描述进行定义。

在上面显示的示例中,输入参数的原始类型为System.Int32,这是安全的。如果定义了具有type参数的BDC模型,则会出现Microsoft.BusinessData.Runtime.DynamicType问题。这样做是为了允许调用者灵活地为该参数传递许多不同类型的值。结果就导致XmlSerializer调用者提供的任意数据流可以反序列化。

漏洞利用

已在安装了KB4464594的Microsoft SharePoint Server 2016上测试了此漏洞,在Windows Server 2016更新14393.3025的64位版本上运行。

为了演示利用,需要执行以下步骤:

1:管理员必须定义一个自定义BDC模型,其中包括带有类型为参数的Microsoft.BusinessData.Runtime.DynamicType方法。对于定制的BDC模型,将数据库模型示例用作模板并进行简化:

SharePointBDC服务反序列化代码执行漏洞的分析(CVE-2019-1257)

2:然后,管理员必须通过SharePoint管理中心|服务器上传BDC模型。应用管理| 管理服务应用程序| 业务数据连接服务。另外,这也可以通过PowerShell完成。

3:然后,攻击者可以调用方法,并在参数中传递payload。

SharePointBDC服务反序列化代码执行漏洞的分析(CVE-2019-1257)

在SharePoint服务器上,会发现已经生成了两个cmd.exe和一个win32calc.exe,它们作为SharePoint应用程序池的标识运行。

若要查看代码的路径,请将调试器附加到SharePoint应用程序的w3wp.exe。在处设置一个断点System.Web.dll!System.Web.UI.ObjectStateFormatter.Deserialize将显示以下调用堆栈:

SharePointBDC服务反序列化代码执行漏洞的分析(CVE-2019-1257)

结论

成功利用此漏洞不会获得管理员权限,但是它使攻击者可以在SharePoint应用程序池和SharePoint服务器帐户的上下文中执行其代码。根据Microsoft的说法,他们通过更正SharePoint如何检查应用程序包的源标记的方式在9月补丁中发布了此漏洞。

9月发行版还包括一个补丁程序,用于修复Azure DevOps(ADO)和Team Foundation Server(TFS)中的漏洞,该漏洞可能允许攻击者在TFS或ADO服务帐户的上下文中在服务器上执行代码。我们将在不久的将来提供该漏洞的其他详细信息。

发表评论

后发表评论