
استغلال إثبات المفهوم لـ CVE-2025-21333، تجاوز سعة مخزن مؤقت قائم على الكومة في vkrnlintvsp.sys الخاص بـ Hyper-V يؤدي إلى تصعيد الامتيازات المحلية عبر I/O Ring واستبدال الرمز المميز.
تجاوز سعة في كومة Paged Pool لمكوّن Hyper-V NT Kernel Integration VSP (vkrnlintvsp.sys) → رفع صلاحيات محلي (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 = 0xfff0يلزم تفعيل Windows Sandbox (إلى جانب Nested Virtualization) حتى تدخل استدعاءات النظام (syscalls) المعنية إلى vkrnlintvsp.sys:
PoC → NtCreateCrossVmEvent
→ VkiRootCalloutCreateEvent
→ VkiRootAdjustSecurityDescriptorForVmwp
| البند | القيمة |
|---|---|
| Guest OS | Windows 11 23H2 |
إصدار 23H2 المُصحَّح (≥ 22631.4751) غير قابل لإعادة الإنتاج. يلزم تفعيل Nested Virtualization + Windows Sandbox.
WNF_STATE_DATAAclSize=0xfff0 عبر Dual-ACE لإطلاق تجاوز السعة وتضخيم DataSize لعنصر WNF المجاورIrRB (I/O Ring RegBuffers) + NpAt (PipeAttribute)IOP_MC_BUFFER_ENTRY في وضع المستخدمPRIV_ESC_OK → قشرة SYSTEM مرئية مرتبطة بالجلسةالتخطيط المتوقع: 0x30 IrRB + 0x80 NpAt (يلزم found1=1 && found2=1).
اشتراطات لا يجوز إهمالها مقارنةً بالمصدر الأصلي (upstream):
تخطيط رشّ الكومة غير حتمي، ورفع الصلاحيات ليس 100%؛ عند الفشل يمكن إعادة المحاولة.
| Guest build | 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 |