Hyper-V NT Kernel Integration VSP(vkrnlintvsp.sys)Paged Pool 堆溢出 → 本地提权(LPE)。
本目录为 lab 用 PoC 源码(基于 MrAle98/CVE-2025-21333-POC,含本机补丁)。
| 项 | 内容 |
|---|---|
| CVE | CVE-2025-21333 |
| 类型 | Heap-based Buffer Overflow |
| 影响 | 本地提权(EoP);曾标记野外利用 |
| 组件 | vkrnlintvsp.sys |
| 漏洞函数 | VkiRootAdjustSecurityDescriptorForVmwp |
| Pool Tag | ViRo |
| 补丁 | 2025-01-14;Win11 23H2 需 ≥ 22631.4751(KB5050021) |
VkiRootAdjustSecurityDescriptorForVmwp 中:
WORD 计算分配长度:AclSize + sid1 + sid2 + 16AclSize = 0xfff0 时总和 0x10040 → 截断为 0x40ExAllocatePool2(..., 0x40, 'ViRo')memmove(pool, dacl, AclSize) 仍按完整 0xfff0 拷贝核心不等式:allocatedBytes(0x40) < accessEnd(0xfff0)。
KD 动态确认:
ExAllocatePool2 → @rdx = 0x40memmove → @r8 = 0xfff0需开启 Windows Sandbox(及 Nested Virtualization),使相关 syscall 进入 vkrnlintvsp.sys:
PoC → NtCreateCrossVmEvent
→ VkiRootCalloutCreateEvent
→ VkiRootAdjustSecurityDescriptorForVmwp
| 项 | 值 |
|---|---|
| Guest OS | Windows 11 23H2 |
| Guest build | 10.0.22631.3447(< 4751,可复现) |
vkrnlintvsp.sys | 10.0.22621.2506;SHA256 015DD1211569B6F85CC0041269F249BA5935A3DA89B615B502DF59EAD5354BB8 |
已打补丁的 23H2(≥ 22631.4751)不可复现。需开启 Nested Virtualization + Windows Sandbox。
WNF_STATE_DATAAclSize=0xfff0,触发溢出,放大相邻 WNF DataSizeIrRB(I/O Ring RegBuffers)+ NpAt(PipeAttribute)IOP_MC_BUFFER_ENTRYPRIV_ESC_OK → 会话绑定可见 SYSTEM 壳期望布局:0x30 IrRB + 0x80 NpAt(需 found1=1 && found2=1)。
相对上游不可省略的合同:
| 主题 | 要点 |
|---|---|
| Dual-ACE | 单 ACE AceSize=0xf000 会被 SeCapture 改成约 0xf008 → 无溢出;必须双 ACE 保住内核 AclSize=0xfff0 |
| 返回码 | CrossVm 可能返回 STATUS_INVALID_ACL (0xC0000077),仍须继续扫 WNF |
| 时序 | free CCC → Submit IoRing → Sleep(5000) → free DDD → pipe spray |
| Sandbox | 确认 IrRB/NpAt 之后再杀 WindowsSandboxClient |
| ntos RVA | ExAllocatePool2=0xaac7a0,PsInitialSystemProcess=0xd1da60(上游偏移在 3447 上会得到 system EPROCESS: 0) |
| 可见壳 | CreateProcessAsUser + TokenSessionId + winsta0\Default → VISIBLE_SYSTEM_CMD_OK |
喷堆布局非确定性,提权非 100%;失败可重试。