
CVE-2019-9729. تم النقل من https://github.com/DoubleLabyrinth/SdoKeyCrypt-sys-local-privilege-elevation
SdoKeyCrypt.sys هو برنامج تشغيل لحماية لوحة المفاتيح للعبة MMORPG، وهي لعبة تقمص أدوار متعددة اللاعبين عبر الإنترنت، تدعى MapleStory Online والتي تنشرها Shanda Group في الصين.
الموقع الرسمي للعبة: http://mxd.sdo.com. (اللغة: الصينية)
سيتم تنزيل برنامج التشغيل هذا وتثبيته في مجلد C:\Windows\System32\ عند تشغيل اللعبة لأول مرة. نظرًا لأن اللعبة كبيرة جدًا، حوالي 13.11 جيجابايت، فقد قمت هنا بعمل نسخة احتياطية SdoKeyCrypt.sys لأي شخص يريد إعادة إنتاج هذا الاستغلال.
SdoKeyCrypt.sys هو بالتأكيد رسمي ولم يتم تعديله من قبل أي شخص.
يمكنك رؤية توقيع ملخص صحيح موقع من قبل Shanda Computer (Shanghai) Co., Ltd. مما يؤكد أن SdoKeyCrypt.sys مصنوع بالفعل بواسطة Shanda.

في روتين معالجة IRP_MJ_DEVICE_CONTROL، عندما يكون كود IOCTL هو (DWORD)(-0x7FFF3FFC + 0x18) = 0x8000c01c، لا يقوم برنامج التشغيل بمعالجة البيانات الممررة من مساحة المستخدم بشكل صحيح، مما يتسبب في أن تكون قيمة الحجم سالبة بحيث يحدث underflow في الكومة.
بمساعدة رش الكومة (heap spraying) والمعروف أيضًا بهجوم pool-Feng-Shui، يمكن تعطيل SMEP وتشغيل أي shellcode في وضع kernel لتحقيق رفع الامتيازات المحلية.


باستخدام مترجم Microsoft Visual C++ x64 (الذي يدعم c++11)
$ cl poc.cpp /Fe:poc.exe /link /dynamicbase:no /fixed ntdll.lib
تم الاختبار على Visual Studio 2017 Community، وفيما يلي مثال على المخرجات:
C:\Github\SdoKeyCrypt-sys-local-privilege-elevation>cl poc.cpp /Fe:poc.exe /link /dynamicbase:no /fixed ntdll.lib
Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27027.1 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
poc.cpp
Microsoft (R) Incremental Linker Version 14.16.27027.1
Copyright (C) Microsoft Corporation. All rights reserved.
/out:poc.exe
/dynamicbase:no
/fixed
ntdll.lib
poc.obj
ثم تأكد من تحميل SdoKeyCrypt.sys وتشغيل poc.exe مباشرة. إذا لم يكن هناك خطأ، يجب أن تحصل على شل nt authority\system.
تم اختبار كود PoC ويعمل بشكل جيد على Win10 1709 و Win10 1803.
ومع ذلك، فهو لا يعمل على Win10 1809 الذي يستخدم تجمعًا مدعومًا بالكومة (heap-backed pool) يخفف من هجوم رش الكومة. لكنه يمكن أن يتسبب في BSOD، لذلك هناك ثغرة رفض الخدمة المحلية على الأقل.
فيما يلي فيديو اختبار على Win10 1803 17134.619.
