这个补丁摞补丁的RPC漏洞到底是怎么回事?

原创
2023/12/13 12:22
阅读数 24

前段时间,微软Windows系统曝出的远程过程调用(RPC)漏洞可谓影响深远,Windows 7与后续的Windows客户端系统,以及Windows Server 2008与后续的Windows服务器系统均被波及。

但在微软发布补丁后,Akamai安全研究人员Ben Barnea发现同一组件依然存在未修补的类似漏洞。报告给微软后,微软也迅速响应,第一时间公开了相关信息并发布了补丁程序。

除了第一时间安装补丁程序修补该漏洞,又该如何限制该漏洞在自己内网中横向移动?Akamai将通过本文向大家介绍此漏洞的相关细节。


延伸阅读,了解 Akamai cloud-computing
 

 

一、背景

2022年4月12日,微软针对远程过程调用(RPC)运行时库(rpcrt4.dll)中的三个漏洞发布了补丁程序。这些漏洞的CVE分别为:CVE-2022-26809CVE-2022-24492以及CVE-2022-24528。受影响操作系统包括Windows 7、8、10和11,以及Windows Server 2008、2012、2019和2022。

借助这些漏洞,未经授权的远程攻击者将可以借助RPC服务的权限在受影响计算机上直接执行代码。这种能力既可以用于突破网络防御,也可以用于横向移动,因此不可避免会被攻击者和勒索软件操作者所利用。微软将这些漏洞分类为“可被利用”的漏洞。由于严重性极高(CVSS 9.8),Akamai决定深入研究修补后的库文件,并分享我们的发现。

我们发现,其中两个漏洞与整数溢出有关,作为应对,补丁程序增加了一个验证是否发生整数溢出的检查,借此即可防止利用此漏洞。然而在调查中我们又发现了另一个漏洞,该漏洞利用了之前发现的同一个变量的整数溢出,但已发布补丁所进行的检查并未涵盖该漏洞,也就是说,补丁程序并不能缓解这个新发现的漏洞。

在将相关情况告知微软后,我们现在可以概括谈谈这个新RPC漏洞的细节了。该漏洞是在四月补丁日(照惯例,微软一般会在每月的第二个周二定期发布系统更新,即“补丁日”)发现的,五月补丁日发布的新补丁已成功修复了Akamai发现的新漏洞(CVE-2022-22019)。该漏洞同时存在于服务器和客户端版Windows中。

二、这个漏洞到底是怎么回事?

为了理解新发现的RPC漏洞,首先需要看看四月修补过的老漏洞。该漏洞源自RPC运行时库中存在的整数溢出Bug,被滥用后可能导致堆缓冲区溢出,也就是说,数据会被复制到缓冲区中,但缓冲区太小,无法容纳完整数据。这种情况会导致数据被写入到堆缓冲区边界范围之外,如果精心安排写入的数据,可能导致远程代码执行问题。

为了修复该漏洞,微软在ProcessReceivedPdu中新增加了一个调用:

该调用会触发一个函数来检查整数参数是否溢出:

查看OSF_SCALL::GetCoalescedBuffer(发生堆溢出的函数)就能看到新增加的检查:

GetCoalescedBuffer负责合并在ProcessReceivedPdu中排队的缓冲区片段。当已排队的片段总长度与当前接收的缓冲区长度相加后,就会出现最初的整数溢出,这种相加导致了溢出的发生。微软通过调用一个函数来检查溢出,修复了最初发现的漏洞。

然而该补丁只在部分程度上解决了这个漏洞。Akamai在研究中发现,在为合并后的新缓冲区分配内存之前,代码在分配大小上又额外增加了24字节(参见上文对OSF_SCALL::TransGetBuffer的调用)。这24字节恰巧是一个名为rpcconn_request_hdr_t的结构的大小,该结构充当了缓冲区的头部。由于原先的补丁是在添加头结构大小之前进行整数溢出检查的,因此没能考虑到这个头结构,这可能导致补丁试图缓解的整数溢出问题再次发生。

目前,新发现的漏洞(一个位于客户端函数中,一个位于服务器端函数中)已被成功缓解。新补丁添加了另一个调用,借此可验证额外增加的24字节不会溢出。

三、缓解措施

  1. 立即安装五月发布的安全更新,修补该漏洞。
  2. 阻止来自企业边界之外的设备通过TCP端口445进行的通信。
  3. 为了限制横向移动,可以只在需要的计算机(域控制器、打印服务器、文件服务器等)上允许TCP端口445的传入通信。

四、披露时间线

  • 2022年4月13日:报告给微软
  • 2022年4月13日:漏洞状态由“新增”改为“审查/重现”
  • 2022年4月22日:漏洞状态由“审查/重现”改为“开发”
  • 2022年5月10日:补丁发布

五、总结

打补丁是最基础的安全措施之一:发现一个漏洞,发布相应的补丁,漏洞被成功缓解。虽然零日漏洞在媒体和安全社区中获得了广泛关注,但作为从业者,我们深知最大的漏洞其实都和本文所介绍的情况差不多。而上文介绍的事件也很好地证明了为什么说打补丁的过程应该是持续并且不断重复的。

作为社区成员,我们在寻找漏洞时,经常需要关注源代码,但专门针对更新和补丁程序进行分析也为寻找漏洞提供了一种新的途径,当然,在寻找解决方案并促进大可能提高安全性方面,密切的合作也是不可或缺的。

这种情况也在很大程度上体现了独立安全研究人员的重要性。我们希望能有越来越多的安全研究人员继续通过分析这些补丁程序来深挖可能存在的漏洞。


这篇文章的内容感觉还行吧?有没有想要立即在 Linode 平台上亲自尝试一下?别忘了,现在注册可以免费获得价值 100 美元的使用额度,快点自己动手体验本文介绍的功能和服务吧↓↓↓
 

欢迎关注Akamai,第一时间了解Akamai在安全性方面的最新发现和成果。当然,也欢迎通过评论与我们开展进一步讨论。

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部