
CVE-2025-21333 的概念验证漏洞利用,这是 Hyper-V 的 vkrnlintvsp.sys 中基于堆的缓冲区溢出,通过 I/O Ring 和令牌替换导致本地权限提升。
Hyper-V NT Kernel Integration VSP (vkrnlintvsp.sys): переполнение кучи Paged Pool → локальное повышение привилегий (LPE).
Этот каталог содержит исходный код PoC для лаборатории (на основе MrAle98/CVE-2025-21333-POC, с локальными патчами).
| Поле | Содержание |
|---|---|
| CVE | CVE-2025-21333 |
| Тип | Переполнение буфера в куче |
| Воздействие | Локальное повышение привилегий (EoP); ранее отмечалась эксплуатация в дикой природе |
| Компонент | vkrnlintvsp.sys |
| Уязвимая функция | VkiRootAdjustSecurityDescriptorForVmwp |
| Тег пула | 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
| Поле | Значение |
|---|---|
| Гостевая ОС |
Запатченная 23H2 (≥ 22631.4751) не воспроизводится. Требуется включить Nested Virtualization + Windows Sandbox.
WNF_STATE_DATAAclSize=0xfff0, вызывая переполнение и увеличивая DataSize соседнего WNFIrRB (I/O Ring RegBuffers) + NpAt (PipeAttribute)IOP_MC_BUFFER_ENTRY в пользовательском режимеPRIV_ESC_OK → привязанная к сессии видимая оболочка SYSTEMОжидаемая раскладка: 0x30 IrRB + 0x80 NpAt (требуется found1=1 && found2=1).
Условия, которые нельзя опускать по сравнению с апстримом:
Раскладка при spray кучи недетерминирована, повышение привилегий не 100%; при неудаче можно повторить.
| Windows 11 23H2 |
| Сборка гостевой ОС | 10.0.22631.3447 (< 4751, воспроизводится) |
vkrnlintvsp.sys | 10.0.22621.2506; SHA256 015DD1211569B6F85CC0041269F249BA5935A3DA89B615B502DF59EAD5354BB8 |
| Тема | Суть |
|---|
| 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 | Убивать WindowsSandboxClient только после подтверждения IrRB/NpAt |
| ntos RVA | ExAllocatePool2=0xaac7a0, PsInitialSystemProcess=0xd1da60 (на сборке 3447 со смещениями из апстрима получится system EPROCESS: 0) |
| Видимая оболочка | CreateProcessAsUser + TokenSessionId + winsta0\Default → VISIBLE_SYSTEM_CMD_OK |