
إثبات مفهوم لتصعيد الامتيازات المحلية يستغل Gigabyte gdrv3.sys IOCTLs لكتابة رمز SYSTEM في عملية مستخدم عبر قراءة ذاكرة فيزيائية غير مُتحقَّق منها.
مرحبًا أيها الهاكرز.
gdrv3.sys هو برنامج تشغيل نواة موقّع يأتي مع Gigabyte App Center وEasyTune. ينشئ \.\GIOV3 بدون واصف أمان، لذا يمكن لأي مستخدم محلي فتحه دون صلاحيات مدير، ودون UAC. اثنان من IOCTLs الخاصة به هما القصة كاملة.
الأول (0xC3502019) يقول إنه يقرأ الذاكرة الفيزيائية. تعطيه عنوانًا فيزيائيًا وطولًا ومؤشر إخراج، فينسخ البايتات إلى هناك. مؤشر الإخراج هو المشكلة: برنامج التشغيل لا يتحقق أبدًا من أنه في مساحة المستخدم. لا ProbeForWrite، ولا فحص حدود، ولا شيء. لذا فإن "القراءة" هي في الحقيقة كتابة-أينما-تشاء، أنت فقط تختار أين تستقر النتيجة. اقرأ رمز عملية SYSTEM من الذاكرة الفيزيائية، ثم وجّه الإخراج مباشرة إلى حقل رمز EPROCESS الخاص بك. يكتب برنامج التشغيل رمز SYSTEM داخل عمليتك نيابة عنك.
هذا هو الاستغلال بأكمله. لا تلف في الذاكرة، ولا شيفرة صدفة في وضع النواة. لا تدخل SMEP وSMAP وKVAS وCET وCFG في الصورة أبدًا لأنه لا شيء يعمل عند CPL0 بشكل غير مقصود. إنها بيانات فقط، وقد نجحت في كل تشغيل. زوج IOCTL الثاني (0xC3502584 قراءة، 0xC3502580 كتابة) هو الكلاسيكي. MSR عشوائي، بدون قائمة بيضاء للفهارس. قراءة IA32_LSTAR تكسر KASLR بمفردها بالفعل، وكتابتها تختطف مدخل استدعاء النظام. يحتاج إلى عمل SMEP/SMAP لذا أبقيته كمسار ثانوي، لكنه حتى بمفرده سيئ.
البناء والتشغيل من حساب مستخدم عادي:
gcc -O2 -o poc.exe poc.c -lpsapi
poc.exe
تم اختباره على Windows 10 x64 22H2 (build 19045). يأتي برنامج التشغيل مع Gigabyte App Center، لذا على الكثير من لوحات Gigabyte يكون محمّلًا بالفعل.
أبلغت Gigabyte عنه في يونيو 2026 وقاموا بإصلاحه. تضع الإصدارات الأحدث SDDL على الجهاز يقصره على المدراء، وتضيف قائمة بيضاء على كتابة MSR. لم يعد gdrv3 الحالي قابلًا للاستغلال بهذه الطريقة.
