CVE-2025-21333:Windows Hyper-V 堆缓冲区溢出漏洞

admin 2025年3月3日21:24:06评论100 views字数 2495阅读8分19秒阅读模式
CVE-2025-21333:Windows Hyper-V 堆缓冲区溢出漏洞

网址

  • 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上述大小时停止复制。SidSid

以下是用于测试 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 沙盒功能,以便有漏洞的系统调用由有漏洞的驱动程序处理。

CVE-2025-21333:Windows Hyper-V 堆缓冲区溢出漏洞

我设法获得了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 堆缓冲区溢出漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月3日21:24:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2025-21333:Windows Hyper-V 堆缓冲区溢出漏洞https://cn-sec.com/archives/3791398.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息