[English]Im Print-Spooler von Windows gibt es die Schwachstelle CVE-2020-1048, mit der sich Schadsoftware erhöhte Privilegien verschaffen könnte. Patchen ist nun angesagt, da ein Exploit öffentlich ist, der mit nur einem PowerShell-Befehl eine Backdoor in Windows implementieren kann. Hier eine grobe Übersicht samt Einschätzung, wie kritisch das Ganze ist, denn es sind einige Voraussetzungen zur Ausnutzung des Exploits erforderlich.
Anzeige
Windows Print-Spooler Schwachstelle CVE-2020-1048
Bei der Schwachstelle CVE-2020-1048 handelt es sich um eine Privilege Escalation-Lücke im Windows-Druckspooler-Dienst, die ein willkürliches Schreiben in das Dateisystem zulässt. Ein Angreifer, der diese Schwachstelle erfolgreich ausnutzt, könnte beliebigen Code mit erhöhten Systemprivilegien ausführen. Ein Angreifer könnte dann Programme installieren, Daten anzeigen, ändern oder löschen oder neue Konten mit vollen Benutzerrechten erstellen.
Um diese Schwachstelle auszunutzen, müsste sich ein Angreifer sich allerdings bei einem betroffenen System anmelden und ein speziell erstelltes Skript oder eine Anwendung ausführen. Die Ausnutzung dieser Schwachstelle wird von Microsoft zwar als wenig wahrscheinlich angesehen. Das Unternehmen hat aber zum Patchday 12. Mai 2020 Sicherheitsupdates für Windows 7 bis Windows 10 sowie die Server Pendants herausgebracht, die die Schwachstelle beseitigen sollen. Die Liste der Updates lässt sich dieser Seite entnehmen. Zudem sind die Windows-Sicherheitsupdates zum Mai 2020-Patchday in meinen Artikeln am Ende dieses Beitrags aufgeführt.
Exploit für CVE-2020-1048
Ich bin bereits gestern auf Twitter über nachfolgenden Tweet von Alex Ionescu auf das Thema gestoßen.
Attackers can exploit CVE-2020-1048 with a single PowerShell command:
Add-PrinterPort -Name c:\windows\system32\ualapi.dll
On an unpatched system, this will install a persistent backdoor, that won't go away *even after you patch*.
See https://t.co/9yMSWNM8VG for more details.
— Alex Ionescu (@aionescu) May 13, 2020
Anzeige
Es reicht ein PowerShell-Befehl, um eine DLL als PrinterPort zu registrieren. Eine manipulierte ualapi.dll würde dann mit Systemprivilegien laufen und können beliebige Dateien manipulieren. Eine so eingerichtete 'Backdoor' würde auch nicht mehr durch nachträgliches patchen beseitigt – das ist ein hilfreicher Hinweis. Auf windows-internals.com hat Alex Ionescu die Details beschrieben. Die Nacht hat Woody Leonhard das Ganze hier ebenfalls aufgegriffen. Aber so ganz kommentarlos möchte ich das Thema nicht lassen.
Ein paar Anmerkungen dazu
Da Sicherheitsupdates verfügbar sind, kann diese Schwachstelle von Nutzern leicht geschlossen werden. Aber es gibt noch mehr anzumerken. Ionescu schreibt, dass die Schwachstelle auch in uralten Windows-Versionen vorhanden sei. Faktisch sind aber nur noch Windows 7-Systeme, die im Januar 2020 aus dem erweiterten Support gefallen sind, im Einsatz und werden von Microsoft über das ESU-Programm gepatcht.
Standardmäßig ist die Ausführung von PowerShell-Befehlen unter Windows deaktiviert (siehe mein Artikel PowerShell-Skripte lassen sich nicht ausführen). Um den obigen PowerShell-Befehl auszuführen, müsste dies also vom Administrator zugelassen worden sein – für Normalnutzer, die nie die PowerShell genutzt haben, hält sich die Gefahr in Grenzen.
I was wondering the same. These seem to have been added with Windows 8. I suppose the attacker would have to use their own tool for creating the port on Windows 7.
— Mitja Kolsek (@mkolsek) May 13, 2020
Der Diskussion zwischen VessOnSecurity und Mitja Kolsek (0patch) entnehme ich, dass die obigen PowerShell-Verben erst in Windows 8 eingeführt wurden. Verhindert natürlich nicht, dass Angreifer ihre eigenen Methoden zur Ausnutzung einsetzen. In allen Fällen muss ein Angreifer meinem Verständnis nach aber bereits ein Administrator auf dem System sein, um Print-Spooler DLLs registrieren zu können. Die DLL erhält dann aber die Berechtigungen von SYSTEM.
Ergänzung: Mitja Kolsek hat mir eben eine private Nachricht geschickt. Bei ACROS Security hat man den PoC-Exploit getestet. Der funktioniert, laut Kolsek, auch unter Windows 7 und benötigt keine Admin-Berechtigungen. Ich denke, es dürfte bald eine Micro-Fix von 0patch geben.
Abschließend: Es ist gut, dass das Thema von Alex Ionescu detaillierter beleuchtet wurde. Aber die Ausnutzung erfordert eine m. E. Administratorberechtigungen. Zudem gibt es einen Patch für die aktuell von Microsoft noch unterstützten Betriebssysteme. Jeder Administrator kann (und sollte wegen der oben erwähnten Gründe) die Schwachstelle also per Update schließen und gut ist. Oder habe ich was übersehen?
Ähnliche Artikel:
Microsoft Office Patchday (5. Mai 2020)
Microsoft Security Update Summary (12. Mai 2020)
Patchday: Windows 10-Updates (12. Mai 2020)
Patchday: Updates für Windows 7/8.1/Server (12. Mai 2020)
Patchday Microsoft Office Updates (12. Mai 2020)
PowerShell als Einfallstor für Malware/Ransomware
Anzeige
Das ist auch ein Beweis dafür, dass Windows 10 keine Neuentwicklung ist, denn es enthält offensichtlich die selben Fehler, die auch Windows 7 schon hatte.
Solche Fehler sind auch nicht einfache Bugs, sondern Design- oder System-Fehler.
wie würdest Du das *unter den gegebenen Randbedingungen* anders designen?
Immerhin muss(!) ein Druckertreiber ja (ggf. indirekt – hier: über den Printerport) direkt auf Hardware zugreifen können und dieser muss ja auch irgendwie installiert werden können.
Sogar wenn eine als Printerport zu registrierende DLL (oder allgemeiner: Sammlung an Funktionen) bestimmte Funktionsnamen exportiert haben muss, um als ein solcher registriert werden zu können: wer sagt, dass diese Funktionen wirklich (nur) das machen, was sie durch ihren Namen versprechen?
Irgendwann muss man dem Hersteller/Lieferanten einfach glauben…
(und ja: das wäre bei OpenSource einfacher – aber wer als Linux-Root noch nie von einem Hersteller gelieferte Pakete "einfach schnell" installiert hat (also ohne detaillierte Analyse) der werfe den ersten Stein)
Man kann auch über cmd-Skripte Befehle direkt an die PowerShell übergeben ohne explizit ein Powershell Skript zu verwenden, meine ich. Das würde die Ausführungsrichtlinie umgehen. Außerdem benötigt man eh Adminrechte um Dateien im Windowsordner zu manipulieren, oder?
Umgeht eine PowerShell-Anweisung in einem Script wirklich die Ausführungsrichtlinie für die PowerShell?
Admin-Rechte für Dateien braucht es dagegen nicht, da die registrierte DLL System-Rechte erhält und quasi alles darf.
Aber es ist noch komplexer. Mitja Kolsek hat mir eben eine private Nachricht geschickt, nach dem der Exploit auch unter Windows 7 und ohne Admin-Berechtigungen funktioniert.
Sorry kaum geschlafen, deshalb war der Kommentar etwas unausführlich =)
Ick kann es leider nicht 100%ig sagen, weil ich an sämtlichen Rechnern an den ExecutionPolicies rumgefummelt habe, aber bei mir gibt der Befehl [powershell.exe -command "& { Get-Process }"] aus einer User-CMD heraus immer ein Ergebnis und ich bin auch ziemlich sicher, dass das auch so im Auslieferungszustand funktioniert. Man kann das auch relativ einfach mit einem Batch Skript testen:
::PowerShellExecutionPolicyTest.bat
powershell.exe -command "& { Get-Process }"
pause
Ich habe mal irgendwo gelesen (heise Kommentar?), dass die Policies nur dazu da sind, um nicht aus Versehen Skripte auszuführen.
Das mit den Adminrechten war von meiner Seite aus so gemeint, dass man eine manipulierte Datei direkt nach "C:\Windows\System32" schiebt und dann den Befehl ausführt. Ob das dann auch gehen würde weiß ich aber nicht ich bin aber auch kein Sicherheitsforscher und rate nur ins Blaue rein ;)
so ist es!1! (versehen)
AUTSCH!
1. Die Ausführungsrichtlinie gilt für PoserShell-Skripts, nicht für die PowerShell selbst (inklusive all ihrer eingebauten Kommandos/Cmdlets).
2. CVE-2020-1048 besteht aus ZWEI Schwachstellen: die erste erlaubt einem UNPRIVILEGIERTEN Benutzer Dateien in für ihn sonst NICHT-schreibbaren Orten anzulegen oder zu überschreiben, die zweite lässt ihn eine im "System"-Verzeichnis vorhandene DLL vom SPOOLER-Prozess laden, OHNE Impersonation.
sc config spooler start= disabled
oder
reg add "HKLM\System\CurrentControlSet\Services\spooler" /v "Start" /t REG_DWORD /d "4" /f
da ich keinen drucker habe, ist genannter befehl bei mir standard, wegen stuxnet (und flame)!
das tool (selbst geschrieben) welches ich dafür nutze zeigt in der titelleiste "powershell" unter win8. die ausführungsrichtlinie lässt sich umgehen, sie ist aber auch ein schutz für administratoren und kein sicherheitsfeature für welches es manche halten..
microsoft verdient geld mit dem offenhalten von lücken, das ist seit.. 1993 (meine ich) so. nicht schön aber ist so.