
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 |
| प्रकार | 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 = 0xfff0Windows Sandbox (और Nested Virtualization) सक्षम होना चाहिए ताकि संबंधित syscall vkrnlintvsp.sys में प्रवेश करें:
PoC → NtCreateCrossVmEvent
→ VkiRootCalloutCreateEvent
→ VkiRootAdjustSecurityDescriptorForVmwp
| मद | मान |
|---|---|
| Guest OS | Windows 11 23H2 |
पैच किया गया 23H2 (≥ 22631.4751) पुनरुत्पादित नहीं किया जा सकता। Nested Virtualization + Windows Sandbox सक्षम होना चाहिए।
WNF_STATE_DATA स्प्रे करेंAclSize=0xfff0, ओवरफ्लो ट्रिगर करता है, पड़ोसी WNF DataSize को बढ़ाता हैIrRB (I/O Ring RegBuffers) + NpAt (PipeAttribute)IOP_MC_BUFFER_ENTRYPRIV_ESC_OK → सत्र बाउंड दृश्य SYSTEM शेलअपेक्षित लेआउट: 0x30 IrRB + 0x80 NpAt (found1=1 && found2=1 आवश्यक)।
अपस्ट्रीम के सापेक्ष छोड़े नहीं जा सकने वाले अनुबंध:
हीप स्प्रे लेआउट अनियतात्मक है, विशेषाधिकार वृद्धि 100% नहीं; विफलता पर पुनः प्रयास किया जा सकता है।
| Guest build | 10.0.22631.3447 (< 4751, पुनरुत्पादित किया जा सकता है) |
vkrnlintvsp.sys | 10.0.22621.2506; SHA256 015DD1211569B6F85CC0041269F249BA5935A3DA89B615B502DF59EAD5354BB8 |
| विषय | बिंदु |
|---|
| Dual-ACE | एकल ACE AceSize=0xf000 को SeCapture द्वारा लगभग 0xf008 में बदल दिया जाता है → कोई ओवरफ्लो नहीं; कर्नेल में AclSize=0xfff0 बनाए रखने के लिए डबल ACE आवश्यक है |
| रिटर्न कोड | 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 |