RPC 运行时,续篇:发现新漏洞
执行摘要
Akamai 研究人员 Ben Barnea 在远程过程调用 (RPC) 运行时库中发现了一个重要的新漏洞: CVE-2022-22019, 基本评分为 8.8。
这个新漏洞利用了 Microsoft 先前已收到报告并于 2022 年 4 月修补的整数溢出漏洞。
Microsoft 在 5 月的周二补丁日修复了这个新漏洞。
我们建议结合使用 Microsoft 之前发布的缓解措施列表,快速安装补丁,并利用网络分段来限制利用这些漏洞实现横向移动的企图。
前言
2022 年 4 月 12 日,Microsoft 针对远程过程调用 (RPC) 运行时库 (rpcrt4.dll) 中的三个漏洞发布了补丁。为这些漏洞分配的 CVE 编号如下: CVE-2022-26809、 CVE-2022-24492 和 CVE-2022-24528。受影响的操作系统分别为 Windows 7、Windows 8、Windows 10 和 Windows 11,以及 Windows Servers 2008、Windows Servers 2012、Windows Servers 2019 和 Windows Servers 2022。
利用这些漏洞,未经身份验证的远程攻击者可以借助 RPC 服务的权限,在有漏洞的计算机上执行代码。此功能可同时用于入侵网络和执行横向移动,因此备受攻击者和勒索软件运营者青睐。Microsoft 则将这些漏洞标记为“可能被利用”。由于这些漏洞的严重性 (CVSS 9.8),我们决定深入研究已安装补丁的库,并根据我们的发现撰写了 有关该主题的上一篇博文。
我们发现,所有这三个漏洞均为整数溢出,补丁通过添加检查项来确定否发生了整数溢出。此修复方案使 Microsoft 能够防止攻击者利用这些特定的漏洞。然而,我们在调查过程中还发现了另一个漏洞,该漏洞利用了与之前发现的相同变量的整数溢出,而添加的检查项也并没有缓解该漏洞。
我们根据负责任的披露流程向 Microsoft 报告了这个新 RPC 漏洞,时至今日,我们可以简要对这个漏洞进行一番分析了。该漏洞是在 4 月的周二补丁日当天发现的,现已通过 5 月的补丁得到了修复。该漏洞同时存在于服务器和客户端代码中,为其分配的 CVE 编号为:
了解所发现的漏洞
要了解新发现的 RPC 漏洞,我们需要回顾一下 4 月份修复的漏洞。正如我们在 上一篇博文中所总结的那样,整数溢出漏洞存在于 RPC 运行时库代码中,被滥用后,可能会导致堆缓冲区溢出,在这种情况下,数据会被复制到因太小而无法填充的缓冲区。这进而会允许数据写入缓冲区边界之外的堆上。如果攻击者采用正确的方法加以利用,这可能会导致远程代码执行。
为了修复此漏洞,在 ProcessReceivedPdu 中添加了一个新的调用:
此调用可触发一个函数,用于准确检查整数参数是否溢出:
查看 OSF_SCALL::GetCoalescedBuffer(发生堆溢出的函数)时,我们也可以注意到添加的检查项:
GetCoalescedBuffer 负责合并已加入 ProcessReceivedPdu 队列的缓冲区的片段。在加入队列的片段总长度与当前接收缓冲区的长度相加时,就会发生原始整数溢出;这种相加运算会导致溢出。Microsoft 通过调用一个可检查溢出的函数,修复了最初的漏洞。
但是,该补丁并没有完全修复此漏洞。我们在研究中发现,就在为新的合并缓冲区分配内存之前,代码又向分配大小添加了 24 个字节(参见以上对 OSF_SCALL::TransGetBuffer 的调用)。这 24 个字节是作为缓冲区头的结构(名为 rpcconn_request_hdr_t)的大小。由于补丁会在添加头大小之前执行整数溢出检查,因此不会将此缓冲区头考虑在内,这可能会造成与补丁先前尝试缓解的整数溢出问题相同的问题。
新漏洞(可同时存在于客户端函数和服务器端函数中)现已得到缓解。新补丁添加了另一个调用,以验证所添加的这 24 个字节不会造成溢出。
缓解措施
应用 5 月的安全更新来缓解此漏洞。
阻止从企业防御层之外的设备到 TCP 端口 445 的流量。
通过仅在需要的机器(域控制器、打印服务器、文件服务器等)上允许传入 TCP 端口 445 来限制横向移动。
披露时间表
2022 年 4 月 13 日:报告发送至 Microsoft。
2022 年 4 月 13 日:状态已从“新增”更改为“审核/再现”
2022 年 4 月 22 日:状态已从“审核/再现”更改为“开发”
2022 年 5 月 10 日:补丁发布
结论
安装补丁被视为主要的基本安全措施之一;在发现漏洞后,相应厂商就会发布补丁,以缓解漏洞。虽然零日漏洞在媒体和业界获得了广泛关注,但作为从业者,我们知道主要漏洞来自与本文所述情况类似的情况。此示例很好地说明了为何有必要持续、重复地执行此流程。
作为一个社区,我们在搜寻漏洞时通常会关注原始代码,但专注于更新和补丁也呈现出漏洞搜寻的另一面,可以促进社区广泛开展合作,共同寻找解决方案并全面提升安全性。
这一情况也再次强调了独立安全研究人员的重要性。我们要鼓励其他安全研究人员继续分析此补丁及其他位置的其他漏洞补丁。
对我们的调查结果有任何疑问,或想讨论这些结果?请通过 @Akamai_Research 与我们联系,告诉我们您的想法。