
Hyper-V NT Kernel Integration VSP (vkrnlintvsp.sys) Paged-Pool-Heapüberlauf → lokale Rechteausweitung (LPE).
Dieses Verzeichnis enthält den PoC-Quellcode für das Labor (basiert auf MrAle98/CVE-2025-21333-POC, inklusive lokalem Patch).
| Eigenschaft | Inhalt |
|---|---|
| CVE | CVE-2025-21333 |
| Typ | Heap-based Buffer Overflow |
| Auswirkung | Lokale Rechteausweitung (EoP); als in freier Wildbahn ausgenutzt markiert |
| Komponente | vkrnlintvsp.sys |
| Verwundbare Funktion | VkiRootAdjustSecurityDescriptorForVmwp |
| Pool Tag | ViRo |
| Patch | 2025-01-14; für Win11 23H2 ist ≥ 22631.4751 erforderlich (KB5050021) |
In VkiRootAdjustSecurityDescriptorForVmwp:
WORD berechnet: AclSize + sid1 + sid2 + 16AclSize = 0xfff0 ergibt die Summe 0x10040 → abgeschnitten auf 0x40ExAllocatePool2(..., 0x40, 'ViRo')memmove(pool, dacl, AclSize) kopiert weiterhin mit voller 0xfff0-LängeKernungleichung: allocatedBytes(0x40) < accessEnd(0xfff0).
Dynamische Bestätigung per KD:
ExAllocatePool2 → @rdx = 0x40memmove → @r8 = 0xfff0Windows Sandbox (sowie verschachtelte Virtualisierung) muss aktiviert sein, damit die betreffenden Syscalls in vkrnlintvsp.sys gelangen:
PoC → NtCreateCrossVmEvent
→ VkiRootCalloutCreateEvent
→ VkiRootAdjustSecurityDescriptorForVmwp
| Eigenschaft | Wert |
|---|---|
| Guest OS | Windows 11 23H2 |
Gepatchtes 23H2 (≥ 22631.4751) ist nicht reproduzierbar. Nested Virtualization + Windows Sandbox müssen aktiviert sein.
WNF_STATE_DATA sprayenAclSize=0xfff0, löst den Überlauf aus und vergrößert das DataSize des benachbarten WNFIrRB (I/O Ring RegBuffers) + NpAt (PipeAttribute)IOP_MC_BUFFER_ENTRYPRIV_ESC_OK → sitzungsgebundene sichtbare SYSTEM-ShellErwartetes Layout: 0x30 IrRB + 0x80 NpAt (found1=1 && found2=1 erforderlich).
Unverzichtbare Bedingungen gegenüber dem Upstream:
Das Heap-Spray-Layout ist nicht deterministisch; die Rechteausweitung ist nicht 100%. Bei Fehlschlag kann erneut versucht werden.
| Guest build | 10.0.22631.3447 (< 4751, reproduzierbar) |
vkrnlintvsp.sys | 10.0.22621.2506; SHA256 015DD1211569B6F85CC0041269F249BA5935A3DA89B615B502DF59EAD5354BB8 |
| Thema | Kernpunkt |
|---|
| Dual-ACE | Ein einzelner ACE mit AceSize=0xf000 wird von SeCapture auf etwa 0xf008 geändert → kein Überlauf; daher müssen Dual-ACEs verwendet werden, um die Kernel-AclSize=0xfff0 zu erhalten |
| Rückgabecode | CrossVm kann STATUS_INVALID_ACL (0xC0000077) zurückgeben; der WNF-Scan muss trotzdem fortgesetzt werden |
| Timing | free CCC → Submit IoRing → Sleep(5000) → free DDD → pipe spray |
| Sandbox | Erst nach der Bestätigung von IrRB/NpAt WindowsSandboxClient beenden |
| ntos RVA | ExAllocatePool2=0xaac7a0, PsInitialSystemProcess=0xd1da60 (die Upstream-Offsets liefern auf 3447 system EPROCESS: 0) |
| Sichtbare Shell | CreateProcessAsUser + TokenSessionId + winsta0\Default → VISIBLE_SYSTEM_CMD_OK |