
إثبات مفهوم يستغل واجهات IOCTL للقراءة/الكتابة في سجل MSR عبر AMD AmdTools64.sys لكتابة فوق IA32_LSTAR، وتجاوز SMEP والارتقاء من مسؤول إلى SYSTEM على Windows 10 x64.
مرحبًا أيها الهاكرز.
AmdTools64.sys هو برنامج تشغيل Special Tools الموقّع الذي يأتي مع AMD uProf. لا يوجد تجاوز لـ UAC، ولا حاجز للمستخدم العادي. بمجرد حصولك على المقبض (handle) لا توجد قائمة بيضاء على فهرس MSR، لذا يمكنك قراءة وكتابة أي MSR تريده.
جانب القراءة يكسر KASLR بمفرده بالفعل. اقرأ IA32_LSTAR (0xC0000082) وسيمنحك برنامج التشغيل ntoskrnl!KiSystemCall64 مجانًا. جانب الكتابة هو المشكلة الحقيقية. IA32_LSTAR هو العنوان الذي تقفز إليه وحدة المعالجة المركزية عند كل استدعاء نظام (syscall)، وبرنامج التشغيل يسمح لمستخدم عادي بالكتابة فوقه. وجّهه إلى كود تتحكم فيه وسيُنفّذ استدعاء النظام التالي كودك عند مستوى CPL0. SMEP هو الشيء الوحيد الذي يقف في الطريق، لذا يقرأ الاستغلال IA32_LSTAR أولًا للعثور على ntoskrnl، ويحلّل دليل الاستيراد (import directory) من القرص، ويجد بضعة gadgets لتعطيل SMEP باستخدام mov cr4, rax، ويشغّل shellcode صغيرًا ينسخ رمز SYSTEM إلى العملية الحالية، ويعيد IA32_LSTAR عند الخروج حتى تستمر الآلة في العمل.
هناك اثنان من IOCTLs وهذه هي القصة كاملة. 0xFFF02804 يقرأ MSR و0xFFF02808 يكتب واحدًا، وكلاهما بمخزن مؤقت (buffer) بحجم 20 بايت ودون التحقق من الفهرس. الموزّع (dispatcher) يتحقق فقط من أطوال المخزن المؤقت. هناك أيضًا قراءة/كتابة للذاكرة الفيزيائية وخريطة فيزيائية لوضع المستخدم (0xFFF0281C، 0xFFF02820، 0xFFF028A4)، لكن مسار الخريطة يمكن أن يُطلق PFN_LIST_CORRUPT على ذاكرة RAM عشوائية، لذا فإن مسار MSR هو المستخدم هنا.
اختبرت هذا على Windows 10 x64 22H2 (build 19045.6456) مع AMD uProf 5.3.521.0. إصدار برنامج التشغيل هو 1.7.16.218. لا يوجد سباق (race) ولا تهيئة للـ heap، وقد نجح في كل مرة شغّلته فيها. يأتي برنامج التشغيل مع uProf ويُثبَّت على الكثير من أجهزة AMD، لذا فهو محمّل بالفعل لديك. لقطة الشاشة هي جهاز Win10: whoami هو subhan\windows10 قبل، وnt authority\system بعد.

على Windows 11 26300 تمكنت من تثبيت برنامج التشغيل وقراءة IA32_LSTAR، لكن wrmsr إلى LSTAR يفشل عندما تكون Memory Integrity مفعّلة، إذ يعترضه VBS/HVCI. تخطيط EPROCESS المعروف في Win11 هو UniqueProcessId 0x1D0، ActiveProcessLinks 0x1D8، Token 0x248، ImageFileName 0x338، وقد تم التحقق منه مقابل PsGetProcessId وPsReferenceProcessToken وPsGetProcessImageFileName في ذلك البناء.
القيمة هي برنامج التشغيل الموقّع والبدائية (primitive) على مستوى النواة: يمكن للمسؤول تحميل برنامج تشغيل AMD والحصول على تنفيذ كود في الحلقة 0 (ring-0). سلسلة LSTAR-to-SYSTEM هنا هي جزء الاستغلال، وليست اكتشافًا جديدًا لبرنامج تشغيل.
أبلغت AMD PSIRT في 2026-08-17. ومع ذلك، فعلوا كل ما في وسعهم لتجنّب الاعتراف بهذه الثغرة، حتى أنهم حظروني على Gmail حتى لا أتمكن من إرسال رسائل بريد إلكتروني إليهم من عنواني الخاص بعد الآن. هذه مجرد البداية؛ ومن الآن فصاعدًا، لن أشارك نتائجي المتعلقة بمنتجات AMD معهم مباشرة أو عبر قنواتهم الأخرى. سأستمر في مشاركة كل شيء هنا مباشرة. ترقّبوا، وواصلوا الاختراق!