Alla fine di giugno è stata scoperta una nuova vulnerabilità relativa al Print Spooler di Windows (CVE-2021-1675) che permetteva l’esecuzione arbitraria di codice con privilegi amministrativi (Local Privilege Escalation). Il giorno 1 Luglio 2021, a seguito di alcune pubblicazioni da parte di due team di ricercatori, Microsoft ha rilasciato un avviso sulla vulnerabilità CVE-2021-34527, attraverso la quale è possibile non solo eseguire codice con privilegi amministrativi, ma anche eseguire codice da remoto (Remote Code Execution).
La nuova vulnerabilità è stata chiamata PrintNightmare e affligge tutti i sistemi Windows (Server e PC) aventi il servizio Print Spooler attivo.
Dettagli sulla Minaccia
Per poter sfruttare la vulnerabilità è necessario essere in possesso di credenziali valide di un account o essere già autenticati.
La vulnerabilità coinvolge l’utilizzo della funzione RpcAddPrinterDriverEx
da parte de servizio di Windows Print Spooler, il quale non riesce a limitare l’accesso alle sole utenze amministrative.
La funzione RpcAddPrinterDriverEx
viene usata per installare un driver di stampa in un sistema. Uno dei parametri della funzione è l’oggetto DRIVER_CONTAINER
, che contiene informazioni su quale driver deve essere usato dalla stampante aggiunta. L’altro argomento è dwFileCopyFlags
e specifica come dovranno essere copiati i nuovi file sostitutivi del driver di stampa. Un attaccante può sfruttare la possibilità che ha ogni utente autenticato di chiamare la funzione RpcAddPrinterDriverEx
e specificare un file che risiede in un server remoto. In questo modo il servizio del Print Spooler, spoolsv.exe, eseguirà il codice presente in un file DLL arbitrario con privilegi SYSTEM.
Mitigazione
Microsoft ha già rilasciato delle linee guida per mitigare gli effetti di questa nuova vulnerabilità al link.
In ogni caso, è altamente consigliato disabilitare il servizio Print Spooler, in attesa di una patch da parte di Microsoft.
Disabilitazione del servizio
Determine if the Print Spooler service is running
Run the following:
Get-Service -Name Spooler
If the Print Spooler is running or if the service is not set to disabled, select one of the following options to either disable the Print Spooler service, or to Disable inbound remote printing through Group Policy:
Option 1 – Disable the Print Spooler service
If disabling the Print Spooler service is appropriate for your enterprise, use the following PowerShell commands:
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
Impact of workaround Disabling the Print Spooler service disables the ability to print both locally and remotely.
Option 2 – Disable inbound remote printing through Group Policy
You can also configure the settings via Group Policy as follows:
Computer Configuration / Administrative Templates / Printers
Disable the “Allow Print Spooler to accept client connections:” policy to block remote attacks.
You must restart the Print Spooler service for the group policy to take effect.
Impact of workaround This policy will block the remote attack vector by preventing inbound remote printing operations. The system will no longer function as a print server, but local printing to a directly attached device will still be possible.