【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)

admin 2021年11月23日06:55:03评论795 views字数 2205阅读7分21秒阅读模式

0x01  漏洞介绍



    2021年11月22日,关于微软Exchange Server的利用POC在互联网公开,该漏洞编号为CVE-2021-42321,漏洞等级为严重,CVSS评分为8.8分。

【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)

    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月的补丁进行区分。

【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)

    在使用 DnSpy 反编译并使用 Win Merge 进行比较后,可得知大约 275 个文件被更改。

【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)

    该补丁几乎是针对 Exchange 内部的 Deserialization Sink 进行修补的,因此我们可以确定这次是反序列化漏洞。

TypedBinaryFormatter 中有一个有趣的地方是当反序列化绑定器值没有正确传递给ExchangeBinaryFormatterFactory 时。正如我们已经知道的,SerializationBinder用于控制序列化和反序列化期间使用的实际类型。这可能是一个机制反序列化漏洞,但在TypedBinaryFormatter 中,我们有机会再次出现。

【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)

    如果没有将binder变量传递给ExchangeBinaryFormatterFactory.CreateBinaryFormatter(),ExchangeBinaryFormatterFactory将使用ChainedSerializationBinder作为SerializationBinder来验证 反序列化期间使用的实际类型。

【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)

    当从TypedBinaryFormatter.Deserialize()传递参数到ExchangeBinaryFormatterFactory.CreateBinaryFormatter()交换初始化ChainedSerializationBinder(实现 SerializationBinder) :

  • strictMode = false

  • allowList = System.DelegateSerializationHolder

  • allowedGenerics = null

    我们看一下ChainedSerializationBinder.BindToType(),它将验证反序列化类。

【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)


【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)

对于区块 1:

  • 如果 strictMode 为False并且我们的类不在允许列表中,并且在 blacklist 中,Exchange 将抛出InvalidOperationException

  • 在这个函数中,它只捕获BlockedDeserializationException所以不会捕获InvalidOperationException,所以如果通过InvalidOperationException交换我们的反序列化链将被破坏

对于区块 2:

  • 如果有一个BlockedDeserializationException而ValidateTypeToDeserialize()被抛出,将在catch块捕获,但交易所只抛出异常,当标志的值是真实的,但记住,传递给strictMode值ChainedSerializationBinder永远是假的!所以有 Exchange 会安全地捕获BlockedDeserializationException并且 Exchange 不会影响我们的 Deserialization 可以继续而不崩溃。

【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)

好,现在我们来看看ChainedSerializationBinder 黑名单。这是 Exchange 开发人员的一个大错误……

【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)

当反序列化 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)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年11月23日06:55:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【漏洞情报】Exchange Server远程代码执行漏洞(CVE-2021-42321)http://cn-sec.com/archives/645224.html

发表评论

匿名网友 填写信息