Windows Print Spooler Remote Code Execution Vulnerability
Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.
Apply updates per vendor instructions.
Resumen
Falha de autorização (CWE-285) no serviço Print Spooler do Windows que permite a um atacante autenticado — remoto via RPC/SMB ou local sem privilégios — executar código arbitrário com privilégios de SYSTEM. É a vulnerabilidade que deu origem ao caso 'PrintNightmare': corrigida oficialmente em junho de 2021, mas pesquisadores publicaram PoC assumindo que ainda não havia patch, e o exploit resultante também atingia uma segunda falha distinta (CVE-2021-34527), corrigida só em julho. Está no catálogo KEV da CISA com exploração confirmada.
Detalle técnico
A função RPC RpcAddPrinterDriverEx(), exposta pelo Print Spooler (spoolsv.exe), instala drivers de impressora recebendo dois parâmetros relevantes: um objeto DRIVER_CONTAINER (informação sobre o driver a usar) e dwFileCopyFlags (como os arquivos de driver substitutos devem ser copiados). O serviço não restringe adequadamente quem pode chamar essa função nem valida corretamente a origem do arquivo de driver especificado — daí o CWE-285, Improper Authorization.
Qualquer usuário autenticado no domínio ou na máquina pode invocar RpcAddPrinterDriverEx() apontando para um driver hospedado em um servidor remoto controlado pelo atacante. O Spooler carrega e executa esse DLL com privilégios de SYSTEM, sem o prompt de segurança que normalmente acompanha instalação de drivers não assinados/não confiáveis via Point and Print.
Versões atualizadas do exploit trocaram RpcAddPrinterDriverEx() por RpcAsyncAddPrinterDriver() — função que atinge o mesmo efeito por um caminho de chamada assíncrono, contornando a correção aplicada apenas à primeira função. Isso é o que tecnicamente separa CVE-2021-1675 (fechada pela atualização de junho/2021, endereçando RpcAddPrinterDriverEx) de CVE-2021-34527 (a vulnerabilidade 'PrintNightmare' propriamente dita, corrigida em julho/2021), embora ambas compartilhem a mesma superfície funcional (AddPrinterDriverEx) e o mesmo vetor de exploração público.
Cómo se explota
Pré-requisito real: o atacante precisa de credenciais válidas no sistema alvo (usuário autenticado, sem necessidade de privilégios administrativos) — não é uma falha explorável por um atacante anônimo na internet. O vetor remoto passa por SMB (portas 139/445) e pelo Endpoint Mapper de RPC (porta 135); o vetor local não exige rede, apenas execução de código como usuário local não privilegiado na máquina vulnerável.
Na prática, o atacante hospeda um DLL malicioso em um compartilhamento acessível e chama RpcAddPrinterDriverEx() (ou RpcAsyncAddPrinterDriver()) apontando para esse caminho. O Spooler, executando como SYSTEM, carrega e executa o DLL — resultado final é execução de código arbitrário com privilégios de SYSTEM, viabilizando movimento lateral e escalação de privilégio completa em ambientes de domínio Windows.
A exploração é considerada de baixa complexidade técnica — PoC pública (PrintNightmare) e módulo Metasploit disponíveis desde 2021 tornaram o ataque trivial de reproduzir. A CISA confirma exploração ativa (entrada no KEV), com prazo de correção definido para 2021-11-17. É importante notar que boa parte da cobertura pública de 'PrintNightmare' mistura CVE-2021-1675 com CVE-2021-34527; exploits genéricos rotulados como 'PrintNightmare' frequentemente exploram a segunda falha, não esta.
Versiones
Cómo protegerse
A Microsoft resolveu CVE-2021-1675 especificamente na atualização de segurança de junho de 2021. Instalar essa atualização cumulativa é o remediation primário — mas o CERT/CC alerta explicitamente que essa correção NÃO protege contra os exploits públicos rotulados 'PrintNightmare', que dependem de CVE-2021-34527, corrigida apenas na atualização de julho de 2021. Ou seja: aplicar só o patch de junho dá falsa sensação de segurança; é necessário também o patch de julho para cobrir RpcAsyncAddPrinterDriver().
Quando patch imediato não é viável, os workarounds documentados pela Microsoft (e replicados pelo CERT/CC) são: (1) parar e desabilitar o serviço Spooler via PowerShell (Stop-Service -Name Spooler -Force; Set-Service -Name Spooler -StartupType Disabled) — elimina impressão local e remota, custo alto em ambientes que dependem de impressão; (2) desabilitar a política 'Allow Print Spooler to accept client connections' via GPO, que bloqueia o vetor remoto mas mantém impressão local direta — requer reiniciar o serviço; (3) bloquear as portas RPC Endpoint Mapper (135/tcp) e SMB (139/445 tcp) via firewall de host, com testes limitados de eficácia e risco de quebrar funcionalidades legítimas de servidor.
Mesmo após aplicar o patch de julho (CVE-2021-34527), sistemas com a chave de registro NoWarningNoElevationOnInstall configurada para valor diferente de 0 em HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint\ permanecem vulneráveis por design, segundo a própria Microsoft — é necessário garantir NoWarningNoElevationOnInstall e UpdatePromptSettings em 0, e considerar aplicar RestrictDriverInstallationToAdministrators (documentado em KB5005010) para restringir instalação de driver a administradores.
Cómo detectar
Monitorar chamadas RPC para RpcAddPrinterDriverEx() e RpcAsyncAddPrinterDriver() sobre SMB (portas 139/445) e RPC Endpoint Mapper (porta 135) direcionadas ao Print Spooler, especialmente instalações de driver originadas de compartilhamentos de rede não usuais ou controlados por usuários comuns. No host, procurar spoolsv.exe carregando DLLs de caminhos de rede ou de diretórios temporários, criação de arquivos em %SystemRoot%\System32\spool\drivers\ fora do processo normal de administração, e o Spooler gerando processos filhos inesperados (cmd.exe, powershell.exe) como SYSTEM. Crashes ou reinícios inesperados do serviço Spooler em torno de operações de instalação de driver também são indicativo de tentativa de exploração — não há assinatura de rede única e confiável, dado que o tráfego RPC/SMB de instalação de driver legítima é praticamente idêntico ao malicioso sem inspeção de payload.