
CVE-2019-9729. Trasferito da https://github.com/DoubleLabyrinth/SdoKeyCrypt-sys-local-privilege-elevation
SdoKeyCrypt.sys è un driver di protezione della tastiera per un MMORPG, ovvero un Massively-Multiplayer-Online-Role-Playing-Game, chiamato MapleStory Online pubblicato da Shanda Group in Cina.
Il sito ufficiale del gioco: http://mxd.sdo.com. (Lingua: cinese)
Questo driver viene scaricato e installato nella cartella C:\Windows\System32\ quando il gioco viene eseguito per la prima volta. Poiché il gioco è molto grande, circa 13,11 GB, ho creato un backup SdoKeyCrypt.sys per chiunque voglia riprodurre questo exploit.
SdoKeyCrypt.sys è sicuramente UFFICIALE e NON è stato modificato da nessuno.
Puoi vedere che c'è una firma di digest valida firmata da Shanda Computer (Shanghai) Co., Ltd. che conferma che SdoKeyCrypt.sys è effettivamente prodotto da Shanda.

Nella routine di gestione IRP_MJ_DEVICE_CONTROL, quando il codice IOCTL è (DWORD)(-0x7FFF3FFC + 0x18) = 0x8000c01c, il driver non gestisce correttamente i dati passati dallo spazio utente, causando la possibilità che un valore di dimensione possa diventare negativo, provocando un heap underflow.
Con l'aiuto dell'heap spraying, noto anche come attacco pool-Feng-Shui, è possibile disabilitare SMEP ed eseguire qualsiasi shellcode in modalità kernel per ottenere l'elevazione dei privilegi locali.


Con il compilatore Microsoft Visual C++ x64 (che supporta C++11)
$ cl poc.cpp /Fe:poc.exe /link /dynamicbase:no /fixed ntdll.lib
Testato su Visual Studio 2017 Community, di seguito un esempio di output:
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
Assicurati quindi che SdoKeyCrypt.sys sia caricato ed esegui direttamente poc.exe. Se non ci sono problemi, dovresti ottenere una shell nt authority\system.
Il codice PoC è stato testato e funziona correttamente su Win10 1709 e Win10 1803.
Tuttavia non funziona su Win10 1809 che utilizza un pool basato su heap che mitiga l'attacco heap-spray. Ma può causare BSOD, quindi almeno esiste una vulnerabilità locale di denial-of-service.
Di seguito un video di test su Win10 1803 17134.619.
