CVE-2022-26809 - Windows核心组件(RPC)中的漏洞获得了9.8的CVSS评分,这并非没有原因,因为该攻击无需身份验证,可通过网络远程执行,并可能导致远程代码执行(RCE),权限为RPC服务权限,具体取决于托管RPC运行时的进程。这个严重漏洞,如果运气好的话,允许攻击者访问未打补丁的、运行SMB的Windows主机。该漏洞既可以从网络外部利用以突破边界,也可以在网络内的机器之间利用。
CVE指出漏洞存在于Windows RPC运行时中,该运行时实现在一个名为rpcrt4.dll的库中。这个运行时库被加载到使用RPC协议进行通信的客户端和服务器进程中。我们比较了版本10.0.22000.434(三月版)和10.0.22000.613(修补版),并筛选出了一系列变更。
函数OSF_SCALL::ProcessResponse和OSF_CCALL::ProcessReceivedPDU性质相似;两者都处理RPC数据包,但一个在服务器端运行,另一个在客户端运行(SCALL和CCALL)。通过对OSF_SCALL::ProcessReceivedPDU进行对比,我们注意到新版本中添加了两个代码块。


查看修补后的代码,我们发现QUEUE::PutOnQueue之后调用了一个新函数。检查这个新函数并深入其代码后,我们判断它用于检查整数溢出。换句话说,补丁中的新函数被添加用来验证一个整数变量是否保持在预期值范围内。

进一步深入OSF_SCALL::GetCoalescedBuffer中的漏洞代码,我们发现整数溢出漏洞可能导致堆缓冲区溢出,即数据被复制到一个大小不足以容纳它的缓冲区中。这反过来允许数据写入缓冲区边界之外的堆上。当被利用时,这个原语导致远程代码执行!
在其他函数中也添加了相同的整数溢出检查调用:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
整数溢出漏洞以及防止它的函数同时存在于客户端和服务器端的执行流程中。
仍在开发中,暂无预计发布时间。