
إثبات مفهوم بسيط لـ CVE-2026-29923، وهي ثغرة أمنية في برنامج تشغيل النواة pstrip64.sys
(EnTech Taiwan PowerStrip ≤ 3.90.736) تسمح لعملية غير مميزة في وضع المستخدم
بتصعيد صلاحياتها إلى NT AUTHORITY\SYSTEM.
يعرض pstrip64.sys استدعاء IOCTL (0x80002008) يقبل عنوانًا فيزيائيًا يقدمه المستخدم
ويربطه مباشرة بمساحة العناوين الافتراضية للعملية المستدعية عبر فتح
\Device\PhysicalMemory واستدعاء ZwMapViewOfSection بمقبض العملية الحالية.
لا يوجد أي فحص للصلاحيات، ولا أي تحقق من العنوان سوى ما يفرضه
HalTranslateBusAddress، ولا أي تحكم في الوصول على الرابط الرمزي
\\.\PSTRIP64.
النتيجة هي أولية قراءة/كتابة غير مقيدة للذاكرة الفيزيائية من عملية غير مميزة.
مع توفر قراءة/كتابة فيزيائية عشوائية، يتبع الاستغلال أربع خطوات.
1. فحص بنى EPROCESS
يتم فحص الذاكرة الفيزيائية في أجزاء بحجم 2 ميغابايت. ويُفحص كل جزء بحثًا عن
وسم تجمع النواة Proc (0x636F7250)، الذي يحدد تخصيص التجمع الذي يحتوي على
بنية _EPROCESS الخاصة بالعملية. ويتم التحقق من النتائج المرشحة بثلاث
استدلالات خفيفة قبل الوثوق بمعرّف العملية PID:
PriorityClass == 0x2 — جميع العمليات النشطة تعمل بأولوية عاديةProcessLock == 0x0 — حقل القفل يكون مصفّرًا في عملية مستقرةImageFileName[0] حرف ASCII قابل للطباعة — نادرًا ما تحقق الذاكرة العشوائية هذا الشرط2. تحديد مؤشري الرمز (Token)
يلزم هدفان:
Token الخاص بعمليتنا داخل _EPROCESS_EPROCESS لعملية النظام (PID 4)3. استبدال الرمز الخاص بنا
يتم تعيين صفحة 4 كيلوبايت التي تحتوي على حقل Token الخاص بنا ويُستبدل
الحقل بقيمة رمز النظام. من هذه النقطة، تتعامل نواة Windows مع عمليتنا
باعتبارها NT AUTHORITY\SYSTEM.
4. إطلاق شل
يتم تشغيل cmd.exe عبر CreateProcessA. ولأن العمليات الفرعية ترث
رمز العملية الأم، فإن الشل الناتج يعمل بصلاحيات SYSTEM.
نافذة العناوين الفيزيائية من 3 جيجابايت إلى 4 جيجابايت محجوزة لـ MMIO على أنظمة x86.
محاولة تعيين صفحات في هذا النطاق تجعل برنامج التشغيل يرجع خطأ 74
(فشل HalTranslateBusAddress). يتخطى الفحص هذه النافذة ويستأنف عند
0x100000000 لالتقاط بنى النواة التي يضعها Windows فوق علامة 4 جيجابايت.
يكتب معالج التعيين في برنامج التشغيل العنوان الافتراضي المرتجع في حقل DWORD
(LowPart)، مما يقتطع العنوان الافتراضي 64-بت إلى 32-بت. يتلقى الإصدار المترجم
لـ 64-بت مؤشرًا تالفًا ويتعطل فورًا. قم بالترجمة كـ x86.
| البرنامج | الإصدارات |
|---|---|
| EnTech Taiwan PowerStrip | ≤ 3.90.736 |
تجزئة برنامج التشغيل (SHA-256):
ab01485bb7c8bc1a9c86096eeea6d31d8fad557bf4d44072b46373d2203faa6e
تستهدف الإزاحات المضمّنة في الكود Windows 10 22H2 x64. تتطلب الإصدارات
الأخرى قيمًا محدّثة — استخدم dt nt!_EPROCESS في WinDbg للتأكد.
افتح موجه أوامر مطور Visual Studio x86 (Developer Command Prompt) وشغّل:
cl /EHsc /O2 exploit.c /Fe:poc.exe
أو اضبط هدف النظام الأساسي على x86 في Visual Studio وابنِ المشروع في وضع Release. لا يتطلب الملف الثنائي أي تبعيات خارجية تتجاوز Windows SDK.
حمّل pstrip64.sys أولًا (يلزم امتلاك صلاحيات مسؤول لتحميل برنامج التشغيل،
وليس لتشغيل الاستغلال نفسه بعد تحميله)، ثم:
poc.exe
ستُفتح نافذة cmd.exe جديدة تعمل بصلاحيات NT AUTHORITY\SYSTEM.
منع تحميل برنامج التشغيل (مُفضّل)
اكتشاف الاستغلال أثناء التنفيذ
SYSTEMNT AUTHORITY\SYSTEM خارج حدث مصادقة مشروعيُنشر هذا الكود لأغراض تعليمية وبحثية دفاعية فقط. استخدمه فقط على الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها. المؤلف غير مسؤول عن أي إساءة استخدام.
| الحقل | الإزاحة |
|---|
PriorityClass | 0x5B7 |
ProcessLock | 0x438 |
UniqueProcessId | 0x440 |
ImageFileName | 0x5A8 |
Token | 0x4B8 |