网址
-
https://github.com/MrAle98/CVE-2025-21333-POC
目标
-
Windows < 2025 年 1 月累积更新
解释
由于堆缓冲区溢出,Windows Hyper-V NT 内核集成 VSP 组件中存在权限提升漏洞,现已发布概念验证 (PoC)。
该漏洞发生在与Windows 10 1903 中添加的CrossVmEvent 对象相关的系统调用中,NtCreateCrossVmEvent根据 MS 公告,受影响的 Windows 版本是 Windows 10 21H2 至 Windows 11 24H2。
必须启用 Windows Sandbox 功能才能触发此漏洞。
CrossVmEvent 是一个虚拟服务提供商相关对象,用于处理主机和客户机之间的有效资源管理和通信。
处理该系统调用的vkrnlintvsp.sys驱动程序VkiRootAdjustSecurityDescriptorForVmwp 在函数中修改对象的 DACL 字符串。
__int64 __fastcall VkiRootAdjustSecurityDescriptorForVmwp(void *a1, char a2)//...if ( ObjectSecurity >= 0 ) { ObjectSecurity = SeConvertStringSidToSid( L"S-1-15-3-1024-2268835264-3721307629-241982045-173645152-1490879176-104643441-2915960892-1612460704", &P);if ( ObjectSecurity >= 0 ) {// Patched Codeif ( (Feature_2878879035__private_IsEnabledDeviceUsage)(v6) ) { v7 = RtlLengthSid(Sid); v8 = RtlLengthSid(P) + 16 + v7; v9 = Dacl->AclSize + v8;if ( v9 < v8 ) { ObjectSecurity = 0xC0000095;goto LABEL_20; } }// Vulnable Codeelse { SidLength = RtlLengthSid(Sid) + RtlLengthSid(P); dwAclSize = Dacl->AclSize + SidLength + 16; } Pool2 = ExAllocatePool2(256i64, dwAclSize, 1867671894i64); v4 = Pool2;if ( Pool2 ) { memmove(Pool2, Dacl, Dacl->AclSize);//...
在将 SID 添加到用户可控制对象的 DACL 的过程中,修补前的代码在计算分配给池的大小时会导致整数溢出,但由于缺乏适当的边界检查,dwAclSize最终分配的量比预期的要小。
AclSize 因此,在 memmove 调用中,0xfff0可能会发生大小溢出,该调用将尽可能多的数据复制到分配的比预期小的池缓冲区中。
poc触发漏洞后利用I/O Ring Exploit技术。分配一个指向页面池_IOP_MC_BUFFER_ENTRY的指针数组,并IOP_MC_BUFFER_ENTRY利用漏洞在用户空间中分配虚假对象来覆盖它。之后BuildIoRingWriteFile()
,BuildIoRingReadFile()
我们使用并获得内核任意读/写访问权限来提升权限。
漏洞补丁包括当大小操作的结果小于AclSize上述大小时停止复制。Sid
Sid
以下是用于测试 POC 的 ntoskrnl.exe 和 vkrnlintvsp.sys 的哈希值。
PS C:WindowsSystem32drivers> get-filehash .vkrnlintvsp.sysAlgorithm Hash Path--------- ---- ----SHA256 28948C65EF108AA5B43E3D10EE7EA7602AEBA0245305796A84B4F9DBDEDDDF77 C:WindowsSystem32driversv...PS C:WindowsSystem32drivers>
PS C:WindowsSystem32> Get-FileHash ntoskrnl.exeAlgorithm Hash Path--------- ---- ----SHA256 999C51D12CDF17A57054068D909E88E1587A9A715F15E0DE9E32F4AA4875C473 C:WindowsSystem32ntoskrnl.exePS C:WindowsSystem32>
要求和限制
需要打开Windows 沙盒功能,以便有漏洞的系统调用由有漏洞的驱动程序处理。
我设法获得了0xfff0 字节的溢出。我没能使溢出长度完全可控。如果溢出大于子段,则会看到崩溃(这可能经常发生)。也许通过喷射更多对象可以最大限度地减少这种行为。
poc 释放 2 个 WNF 状态数据,以重新分配 regBuffer(指向与 IORING_OBJECT 关联的_IOP_MC_BUFFER_ENTRY 的指针数组)和 PipeAttribute。有时,在释放和重新分配之间,可能会发生另一个驱动程序在该位置分配另一个对象的情况。可以在 while 循环中使用其他损坏的 WNF 状态数据对象来执行多次重新分配尝试,并增加获得所需布局的可能性。
poc代码比较乱。
获取系统后最好退出系统shell并exit在控制台中输入,否则机器将崩溃。
项目地址:
https://github.com/MrAle98/CVE-2025-21333-POC
原文始发于微信公众号(Ots安全):CVE-2025-21333:Windows Hyper-V 堆缓冲区溢出漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论