Zero-Day Sicherheitslücke in Windows Aufgabenplanung

Eine kürzlich auf Twitter [1] bekanntgegebene Sicherheitslücke [2] in der Advanced Local Procedure Call (ALPC) Schnittstelle der Windows Aufgabenplanung ermöglicht lokalen Benutzern die Eskalation ihrer Benutzerrechte zum eingebauten SYSTEM-Account. Ein Zero-Day Exploit bzw. Proof-of-Concept-Code wurde bereits auf GitHub [3] veröffentlicht. Mit einer Behebung der Schwachstelle kann zeitnah beim nächsten Patch-Day am 11. September 2018 gerechnet werden.

Vorwort
Bei der ALPC Schnittstelle handelt es sich um einen im Windows NT Kernel implementierten, internen und somit undokumentierten Mechanismus zur Interprozesskommunikation auf dem lokalen System. Neben kritischen und geschützten Prozessen, wie dem Local Security Authority Subsystem Service (LSASS) und dem Session Manager (SSMS), macht auch die Windows Aufgabenplanung von dieser Technik Gebrauch.

Beschreibung
Die Windows Aufgabenplanung verfügt über einen ALPC Endpunkt, der eine Methode zum Schreiben von SIDs bereitstellt. Diese Funktion wird von der Aufgabenplanung dazu verwendet, die DACLs der Aufgaben unter C:\Windows\System32\Tasks zu setzen. Es überprüft auch auf das Vorhandensein einer .job-Datei unter C:\Windows\Tasks, um dort ebenfalls die DACL zu schreiben – in letzterem Falle ohne eine Impersonalisierung des Prozess-Tokens. Im Verzeichnis C:\Windows\Tasks haben Benutzer und sogar Gast-Accounts standardmäßig das Recht, Dateien zu erstellen.

Somit lässt sich dort vom Benutzer auch ein Hardlink anlegen, der auf eine beliebige Datei verweisen kann, für die der Benutzer Leserechte besitzt. Anschließend kann über die ALPC-Methode der Aufgabenplanung über den platzierten Hardlink die DACL beliebig beschrieben werden. Auf diese Weise lässt sich jede beliebige Datei, für welche der Benutzer Leserechte besitzt und der SYSTEM-Account DACLs schreiben darf, unter Kontrolle bringen und mit eigenem Inhalt überschreiben.

Exploit
Im Proof-of-Concept-Code wird auf diese Weise die PrintConfig.dll unter C:\Windows\System32\DriverStore\FileRepository\prnms003.inf_amd64_4592475aca2acf83\Amd64\ mit dem Inhalt einer eigenen Ressource (DLL) überschrieben, die beim Laden eine Kommandozeile ausführt. Anschließend wird ein Microsoft XPS Document Writer Job angestoßen, der bewirkt, dass die modifizierte PrintConfig.dll vom Print Spooler Service geladen wird. Da der Service unter dem SYSTEM-Account läuft, wird die durch die DLL gestartete Kommandozeile ebenfalls als SYSTEM ausgeführt.

[1] https://twitter.com/SandboxEscaper/status/1034125195148255235

[2] https://www.kb.cert.org/vuls/id/906424

[3] https://github.com/SandboxEscaper/randomrepo/blob/master/PoC-LPE.rar