CVE-2021-34527: ¿Cómo identificar y neutralizar la vulnerabilidad PrintNightmare?

PrintNightmare, nueva vulnerabilidad del servicio de cola de impresión de Windows

El jueves 1 de julio de 2021, Microsoft publicó una alerta de seguridad sobre la vulnerabilidad CVE-2021-34527, denominada «Windows Print Spooler Remote Code Execution Vulnerability» y conocida como «PrintNightmare» (boletín oficial de Microsoft disponible aquí). Esta vulnerabilidad afecta al servicio de cola de impresión de Windows y permite la ejecución remota de código arbitrario con privilegios SYSTEM mediante una cuenta de dominio.

¿Qué es el servicio de cola de impresión de Windows?

El servicio de cola de impresión es un archivo ejecutable (spoolsv.exe) que se inicia de forma predeterminada al arrancar el sistema operativo. Este servicio permite implementar las funciones de cliente y servidor del sistema de impresión. Es el responsable de gestionar las tareas de impresión y de convertirlas al formato específico de cada impresora.

Este servicio utiliza:

  • el puerto RPC (Remote Procedure Call) 135 (TCP);
  • los puertos dinámicos RPC, comprendidos entre 49152 y 65535 (TCP), para registrar los puntos de conexión RPC de los protocolos de impresión MS-PAR (Print System Asynchronous Remote Protocol), MS-RPRN (Print System Remote Protocol), MS-PAN (Print System Asynchronous Notification Protocol) (servidor) y llamar a las funciones de estos protocolos de impresión (cliente);
  • el puerto 80 para el soporte de los protocolos IPP (Internet Printing Protocol) y MS-WPRN (Web Point-and-Print Protocol) si se ha configurado para admitir IPP;
  • los puertos SMB 139, 445 para compartir archivos o si no se admiten los protocolos mencionados anteriormente.

¿En qué consiste la vulnerabilidad PrintNightmare CVE-2021-34527?

La vulnerabilidad PrintNightmare CVE-2021-34527 está relacionada con la funcionalidad de añadir controladores en un servidor de impresión dentro del protocolo MS-RPRN.

Al añadir un controlador en un servidor de impresión, el cliente sigue estos pasos:

  • El cliente verifica que puede llamar a la función mediante RPC RpcAddPrinterDriver ;
  • El cliente se asegura de que los archivos del controlador sean accesibles por el servidor de impresión;
  • El cliente crea un objeto que contiene la información relativa al controlador que se va a instalar, incluyendo las rutas «pDriverPath», «pDataFile» y «pConfigFile»;
  • El cliente llama a la función RpcAddPrinterDriver utilizando como argumento el nombre del servidor de impresión y el objeto creado en el paso anterior.

La función RpcAddPrinterDriver copia los archivos especificados en «pDriverPath», «pDataFile» y «pConfigFile» en el directorio C:\Windows\System32\spool\drivers\x64\3\new, y luego en el directorio C:\Windows\System32\spool\drivers\x64\3. A continuación, se cargan los archivos correspondientes a «pDriverPath» y «pConfigFile».

En su última versión, el servicio Cola de impresión verifica que las rutas especificadas en las variables «pDriverPath» y «pConfigFile» no tengan formato UNC (Universal Naming Convention). Esto impide, por ejemplo, proporcionar rutas de red compartidas. Sin embargo, esta verificación no se realiza en la variable «pDataFile».

El primer paso del ataque consiste en subir una biblioteca dinámica maliciosa al directorio C:\Windows\System32\spool\drivers\x64\3, con la ayuda de la función RpcAddPrinterDriver. Basta con proporcionar una ruta en formato UNC (ejemplo: \\IP_Atacante\share\Evil.dll) en la variable «pDataFile» accesible por la máquina objetivo.

En ese momento, la biblioteca maliciosa aún no ha sido cargada por el servicio.

La segunda etapa del ataque consiste en llamar de nuevo a la función RpcAddPrinterDriver, esta vez proporcionando la ruta de la biblioteca dinámica maliciosa (C:\Windows\System32\spool\drivers\x64\3\Evil.dll), cargada previamente, en la variable «pConfigFile». El resultado esperado de esta segunda llamada es la carga de la biblioteca dinámica maliciosa.

Desafortunadamente para el atacante en esta fase, este no es el resultado obtenido directamente: debido a conflictos de archivos (algunos de los archivos que se deben copiar ya existen en ese directorio), se produce un error durante la copia de los archivos y la función RpcAddPrinterDriver no permite continuar con este escenario.

Sin embargo, existe un método similar a RpcAddPrinterDriver, llamado RpcAddPrinterDriverEx (documentación disponible aquí), que permite degradar o actualizar un controlador en un servidor de impresión. Esta función toma como entrada los dos mismos primeros argumentos, así como una lista de opciones, «dwFileCopyFlags», que permite especificar cómo gestionar las copias de los archivos del controlador que se van a reemplazar.

La opción «APD_COPY_ALL_FILES» permite forzar la copia de los archivos sin tener en cuenta su marca de tiempo. Esta es la opción que se utiliza para el ataque. Las etapas del ataque son entonces idénticas a lo que se ha visto anteriormente con la función RpcAddPrinterDriver.

La sutileza del ataque consiste en eludir la verificación de autorización implementada en la función RpcAddPrinterDriverEx. De hecho, la llamada a este método requiere el privilegio «SeLoadDriverPrivilege» según la documentación de Microsoft. Esta verificación puede eludirse proporcionando a la función RpcAddPrinterDriverEx valores inesperados en «dwFileCopyFlags».

Según el código fuente del PoC, la combinación de las tres opciones «APD_COPY_ALL_FILES», «APD_COPY_FROM_DIRECTORY» y «APD_INSTALL_WARNED_DRIVER» permite eludir la verificación de autorización.

La verificación «ValidateObjectAccess» comprueba a continuación si el usuario tiene acceso al servicio de Cola de impresión. Sin embargo, los usuarios de dominio estándar (no administradores) tienen acceso a este servicio si el grupo «Authenticated Users» forma parte del grupo «Pre-Windows 2000 Compatible Access», lo cual es el caso por defecto. Por lo tanto, sigue siendo necesario disponer de una cuenta de dominio válida para llevar a cabo el ataque.

¿Qué activos se ven afectados por la vulnerabilidad CVE-2021-34527?

Todas las versiones de Windows contienen el código vulnerable y, por tanto, son vulnerables. Sin embargo, deben cumplirse ciertas condiciones para permitir la explotación de la vulnerabilidad.

Dado que este ataque se realiza a través de la Cola de impresión, las máquinas no son vulnerables si este servicio está desactivado.

En consecuencia, Cyberwatch recomienda identificar las máquinas que tienen un servicio de Cola de impresión activo dentro del sistema de información: si estas máquinas no cuentan con las actualizaciones de seguridad de Microsoft (KB5004945, KB5004946, KB5004947, KB5004950, KB5004951, KB5004953, KB5004954, KB5004955, KB5004958, KB5004959), deben considerarse vulnerables a la CVE-2021-34527.

La plataforma Cyberwatch le permite identificar muy fácilmente los activos afectados de varias maneras:

  • Utilice nuestro escáner de vulnerabilidades para identificar los activos afectados por la CVE-2021-34527;
  • Utilice la consulta service:Spooler:Auto para mostrar los activos con el servicio de cola de impresión activado por defecto en su sistema de información;
  • Utilice la regla de cumplimiento MSDefender-Spooler-Disable para identificar los activos que tienen el servicio de cola de impresión iniciado o activado por defecto en su sistema de información;
  • Utilice nuestros informes sobre el estado de los servicios del sistema para visualizar los activos con el servicio de cola de impresión activado por defecto.

Puede solicitar hoy mismo una demostración de nuestra plataforma y buscar esta vulnerabilidad a través de nuestro formulario de contacto.

Los controladores de dominio son un objetivo principal de este ataque, ya que siguen siendo vulnerables incluso después de aplicar el parche del 8 de junio de 2021, que corrige, entre otras, la vulnerabilidad CVE-2021-1675.

¿Cuál es el impacto de la vulnerabilidad PrintNightmare / CVE-2021-34527?

La vulnerabilidad PrintNightmare permite a un atacante que haya comprometido una cuenta de dominio elevar sus privilegios y tomar el control total y remoto de un controlador de dominio, o ejecutar código arbitrario.

¿Qué tan fácil es ejecutar el ataque PrintNightmare / CVE-2021-34527?

Varios exploits están disponibles de forma gratuita y pública en internet. Sin embargo, el ataque requiere disponer previamente de una cuenta de dominio.

¿Cómo neutralizar PrintNightmare / CVE-2021-34527?

Microsoft anunció una serie de parches de seguridad «fuera de banda» (fuera del ciclo Patch Tuesday) el 6 de julio de 2021 a las 23:12.

Estos parches están disponibles bajo las siguientes referencias:

  • KB5004945 para Windows Server 20H2, Windows Server 2004, Windows 10 20H2, Windows 10 2004, Windows 10 21H1;
  • KB5004946 para Windows 10 1909;
  • KB5004947 para Windows Server 2019, Windows 10 1809;
  • KB5004950 para Windows 10;
  • KB5004948 para Windows Server 2016 y Windows 10 1607;
  • KB5004951 y KB5004953 para Windows Server 2008 R2 y Windows 7;
  • KB5004956 y KB5004960 para Windows Server 2012;
  • KB5004954 y KB5004958 para Windows Server 2012 R2 y Windows 8.1;
  • KB5004955 y KB5004959 para Windows Server 2008 SP2.

Esta información proviene del boletín oficial de Microsoft, que recomienda además desactivar el servicio Cola de impresión en los equipos que no necesiten gestionar impresiones.

Para desactivar el servicio Cola de impresión, puede utilizar los siguientes comandos en PowerShell en su controlador de dominio:

Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled

También es posible limitar la superficie de ataque eliminando el grupo «Authenticated Users» del grupo «Pre-Windows 2000 Compatible Access».

Cyberwatch recomienda además consultar el boletín de la Agencia Nacional de Seguridad de los Sistemas de Información CERTFR-2021-ALE-014 y realizar una búsqueda de la vulnerabilidad en su sistema de información lo antes posible, centrándose al menos en los controladores de dominio.

Microsoft también pone a disposición reglas de detección de compromiso .

Si a pesar de las recomendaciones oficiales no puede desactivar la Cola de impresión en los equipos más sensibles, Microsoft indica que, además de instalar las actualizaciones de seguridad, debe verificar la presencia de las siguientes claves de registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint
NoWarningNoElevationOnInstall
NoWarningNoElevationOnUpdate

Si estas claves de registro existen, su valor debe establecerse obligatoriamente en 0. Si no existen, no es necesario realizar ninguna acción adicional tras la instalación de las actualizaciones de seguridad.

Microsoft ofrece también una segunda solución alternativa, que consiste en configurar el parámetro «Permitir que el administrador de trabajos de impresión acepte conexiones de clientes» en «Deshabilitado» mediante una directiva de grupo (GPO). Sin embargo, aplicar únicamente este parámetro permite atacar localmente el sistema vulnerable bajo ciertas condiciones.

En este contexto, Cyberwatch recomienda priorizar la desactivación del administrador de trabajos de impresión siempre que sea posible, para evitar errores de configuración que dejen la vulnerabilidad expuesta, y esperar a la publicación de los parches de seguridad para reactivar este servicio.

Cyberwatch recomienda aplicar las actualizaciones de seguridad disponibles lo antes posible, priorizando los controladores de dominio.

De acuerdo con las recomendaciones de endurecimiento de la ANSSI, Cyberwatch recomienda también desactivar el servicio de administrador de trabajos de impresión en las máquinas que no lo necesiten, especialmente en los controladores de dominio.

Gracias por enviar el formulario.