0x01 漏洞介绍
2021年11月22日,关于微软Exchange Server的利用POC在互联网公开,该漏洞编号为CVE-2021-42321,漏洞等级为严重,CVSS评分为8.8分。
Microsoft Exchange Server 是个消息与协作系统。Exchange server可以被用来构架应用于企业、学校的邮件系统或免费邮件系统。它还是一个协作平台。你可以在此基础上开发工作流,知识管理系统,Web系统或者是其他消息系统。是一个主面的Internet协作应用服务器,适合有各种协作需求的用户使用。
0x02 漏洞编号
CVE-2021-42321
0x03 漏洞等级
漏洞等级:严重 | 8.8
0x04 漏洞影响范围
Exchange Server 2016、2019
0x05 漏洞细节说明
微软在天府杯之前发布了Exchange 2016、2019的补丁,并且在这个补丁之后Exchange就被破解了,所以我们需要对2021年10月和2021年11月的补丁进行区分。
在使用 DnSpy 反编译并使用 Win Merge 进行比较后,可得知大约 275 个文件被更改。
该补丁几乎是针对 Exchange 内部的 Deserialization Sink 进行修补的,因此我们可以确定这次是反序列化漏洞。
TypedBinaryFormatter 中有一个有趣的地方是当反序列化绑定器值没有正确传递给ExchangeBinaryFormatterFactory 时。正如我们已经知道的,SerializationBinder用于控制序列化和反序列化期间使用的实际类型。这可能是一个机制反序列化漏洞,但在TypedBinaryFormatter 中,我们有机会再次出现。
如果没有将binder变量传递给ExchangeBinaryFormatterFactory.CreateBinaryFormatter(),ExchangeBinaryFormatterFactory将使用ChainedSerializationBinder作为SerializationBinder来验证 反序列化期间使用的实际类型。
当从TypedBinaryFormatter.Deserialize()传递参数到ExchangeBinaryFormatterFactory.CreateBinaryFormatter()交换初始化ChainedSerializationBinder(实现 SerializationBinder) :
-
strictMode = false
-
allowList = System.DelegateSerializationHolder
-
allowedGenerics = null
我们看一下ChainedSerializationBinder.BindToType(),它将验证反序列化类。
对于区块 1:
-
如果 strictMode 为False并且我们的类不在允许列表中,并且在 blacklist 中,Exchange 将抛出InvalidOperationException
-
在这个函数中,它只捕获BlockedDeserializationException所以不会捕获InvalidOperationException,所以如果通过InvalidOperationException交换我们的反序列化链将被破坏
对于区块 2:
-
如果有一个BlockedDeserializationException而ValidateTypeToDeserialize()被抛出,将在catch块捕获,但交易所只抛出异常,当标志的值是真实的,但记住,传递给strictMode值ChainedSerializationBinder永远是假的!所以有 Exchange 会安全地捕获BlockedDeserializationException并且 Exchange 不会影响我们的 Deserialization 可以继续而不崩溃。
好,现在我们来看看ChainedSerializationBinder 黑名单。这是 Exchange 开发人员的一个大错误……
当反序列化 ClaimsPrincipal 时,它还会触发另一个 BinaryFormatter.Deserialize() 没有任何过滤器。这时候可以确定找到了这个CVE的Sink
System.Security.Claims.ClaimsPrincipal.OnDeserializedMethod()
System.Security.Claims.ClaimsPrincipal.DeserializeIdentities()
BinaryFormatter.Deserialize()
0x05 参考链接
https://peterjson.medium.com/some-notes-about-microsoft-exchange-deserialization-rce-cve-2021-42321-110d04e8852
https://github.com/DarkSprings/CVE-2021-42321/blob/main/CVE-2021-42321_poc.py
原文始发于微信公众号(锋刃科技):【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论