
CVE-2019-9729. Übertragen von https://github.com/DoubleLabyrinth/SdoKeyCrypt-sys-local-privilege-elevation
SdoKeyCrypt.sys ist ein Tastaturschutz-Treiber für ein MMORPG (Massively-Multiplayer-Online-Role-Playing-Game) namens MapleStory Online, das von der Shanda Group in China veröffentlicht wird.
Die offizielle Website des Spiels: http://mxd.sdo.com. (Sprache: Chinesisch)
Dieser Treiber wird beim ersten Ausführen des Spiels im Ordner C:\Windows\System32\ heruntergeladen und installiert. Da das Spiel sehr groß ist, etwa 13.11 GB, habe ich hier eine Sicherungskopie SdoKeyCrypt.sys für alle erstellt, die diesen Exploit reproduzieren möchten.
SdoKeyCrypt.sys ist definitiv OFFIZIELL und wurde von niemandem modifiziert.
Sie können eine gültige Digitalsignatur sehen, die von Shanda Computer (Shanghai) Co., Ltd. signiert wurde, was bestätigt, dass SdoKeyCrypt.sys tatsächlich von Shanda stammt.

In der IRP_MJ_DEVICE_CONTROL-Handler-Routine, wenn der IOCTL-Code (DWORD)(-0x7FFF3FFC + 0x18) = 0x8000c01c ist, verarbeitet der Treiber die aus dem Benutzerbereich übergebenen Daten nicht ordnungsgemäß, was dazu führt, dass ein Größewert negativ sein kann, sodass ein Heap-Unterlauf auftritt.
Mithilfe von Heap-Spraying, auch bekannt als Pool-Feng-Shui-Angriff, kann SMEP deaktiviert und beliebiger Shellcode im Kernelmodus ausgeführt werden, um eine lokale Berechtigungserhöhung zu erreichen.


Mit dem x64 Microsoft Visual C++-Compiler (der C++11 unterstützt)
$ cl poc.cpp /Fe:poc.exe /link /dynamicbase:no /fixed ntdll.lib
Getestet unter Visual Studio 2017 Community, im Folgenden ein Beispiel für die Ausgabe:
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
Stellen Sie dann sicher, dass SdoKeyCrypt.sys geladen ist, und führen Sie poc.exe direkt aus. Wenn alles in Ordnung ist, sollten Sie eine nt authority\system-Shell erhalten.
Der PoC-Code wurde getestet und funktioniert einwandfrei unter Win10 1709 und Win10 1803.
Es funktioniert jedoch nicht unter Win10 1809, das einen heapgestützten Pool verwendet, der Heap-Spray-Angriffe abschwächt. Es kann jedoch zu einem BSOD führen, sodass mindestens eine lokale Denial-of-Service-Sicherheitslücke besteht.
Das Folgende ist ein Testvideo unter Win10 1803 17134.619.
