uname1able/CVE-2025-21333

GitHub: uname1able/CVE-2025-21333

针对 Windows Hyper-V vkrnlintvsp.sys 分页池堆溢出漏洞(CVE-2025-21333)的本地提权 PoC 代码,包含根因分析、利用链构造及本机稳定化补丁。

Stars: 0 | Forks: 0

# CVE-2025-21333 Hyper-V NT Kernel Integration VSP(`vkrnlintvsp.sys`)Paged Pool 堆溢出 → 本地提权(LPE)。 本目录为 lab 用 PoC 源码(基于 [MrAle98/CVE-2025-21333-POC](https://github.com/MrAle98/CVE-2025-21333-POC),含本机补丁)。 ## 1. 漏洞摘要 | 项 | 内容 | |---|---| | CVE | CVE-2025-21333 | | 类型 | Heap-based Buffer Overflow | | 影响 | 本地提权(EoP);曾标记野外利用 | | 组件 | `vkrnlintvsp.sys` | | 漏洞函数 | `VkiRootAdjustSecurityDescriptorForVmwp` | | Pool Tag | `ViRo` | | 补丁 | 2025-01-14;Win11 23H2 需 ≥ **22631.4751**(KB5050021) | ### 根因 `VkiRootAdjustSecurityDescriptorForVmwp` 中: 1. 用 `WORD` 计算分配长度:`AclSize + sid1 + sid2 + 16` 2. `AclSize = 0xfff0` 时总和 `0x10040` → **截断为 `0x40`** 3. `ExAllocatePool2(..., 0x40, 'ViRo')` 4. `memmove(pool, dacl, AclSize)` 仍按完整 **`0xfff0`** 拷贝 核心不等式:`allocatedBytes(0x40) < accessEnd(0xfff0)`。 KD 动态确认: - `ExAllocatePool2` → `@rdx = 0x40` - `memmove` → `@r8 = 0xfff0` ### 触发路径 需开启 **Windows Sandbox**(及 Nested Virtualization),使相关 syscall 进入 `vkrnlintvsp.sys`: ``` PoC → NtCreateCrossVmEvent → VkiRootCalloutCreateEvent → VkiRootAdjustSecurityDescriptorForVmwp ``` ## 2. 复现系统版本 | 项 | 值 | |---|---| | 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。 ## 3. 利用链(简要) 1. Spray `WNF_STATE_DATA` 2. Dual-ACE 构造 `AclSize=0xfff0`,触发溢出,放大相邻 WNF `DataSize` 3. Free 两个洞,再分配:`IrRB`(I/O Ring RegBuffers)+ `NpAt`(PipeAttribute) 4. 覆写 RegBuffers 中一项 → 用户态伪造 `IOP_MC_BUFFER_ENTRY` 5. IoRing Read/Write → 内核任意读写 6. Token 替换 → `PRIV_ESC_OK` → 会话绑定可见 SYSTEM 壳 期望布局:`0x30 IrRB` + `0x80 NpAt`(需 `found1=1 && found2=1`)。 ## 4. 本机稳定化要点(22631.3447) 相对上游不可省略的合同: | 主题 | 要点 | |---|---| | 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%**;失败可重试。 ## 5. 参考链接 - MSRC: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-21333 - 上游分析: https://medium.com/@ale18109800/cve-2025-21333-windows-heap-based-buffer-overflow-analysis-d1b597ae4bae - 上游 PoC: https://github.com/MrAle98/CVE-2025-21333-POC - I/O Ring 原语: https://windows-internals.com/one-i-o-ring-to-rule-them-all-a-full-read-write-exploit-primitive-on-windows-11/
标签:Hyper-V, PoC, UML, Web报告查看器, Windows内核, 堆溢出, 暴力破解, 本地提权, 白帽子