Aunque parecía que el protagonista de julio, en ciberseguridad, sería Kaseya, ahora parece que tendrá que compartir espacio con PrintNightmare, una vulnerabilidad crítica localizada en la cola de impresión de Windows. La CISA (Cybersecurity & Infrastructure Security Agency) estadounidense emitió un comunicado en el que informaba sobre la misma, y desde entonces no ha dejado de circular información al respecto. Informaciones que, en alguna ocasión, han podido incluso parecer contradictorias entre sí.
Y esto es normal, claro, puesto que a lo largo de los días se han ido sucediendo nuevas averiguaciones, que han hecho que la valoración de la peligrosidad de PrintNightmare se haya incrementado considerablemente, al punto que incluso hemos visto como, tras la asignación de un CVE inicial, se ha tenido que emplear un segundo identificador que amplia la definición de esta amenaza, lo que a muchos usuarios les ha generado todavía más confusión. Vamos a intentar, pues, aportar un poco de orden a un asunto que merece toda nuestra atención.
Cronología de PrintNightmare
A principios de junio, el día 8, Microsoft publicó el CVE-2021-1675, titulado «Windows Print Spooler Remote Code Execution Vulnerability«, es decir, Vulnerabilidad de ejecución remota de código en el administrador de impresión de Windows. Nada hizo pensar, en su momento, que su trascendencia fuera a escalar hasta el punto actual. En aquel momento parecía una amenaza menor, que se había identificado antes de ser explotada y que se podía solucionar fácilmente. No había, pues, razón para preocuparse.
Todo cambia, sin embargo, con el cambio de mes. Como ya indiqué antes, las principales agencias de seguridad del mundo empezaron a emitir comunicados en los que alertaba sobre una actualización importante de CVE-2021-1675. Mensajes que urgían a usuarios y organizaciones públicas y privadas a adoptar, de inmediato, medidas para protegerse de esta amenaza. En ese mismo espacio temporal, Microsoft publicaba la vulnerabilidad CVE-2021-34527, que es a la que le corresponde el sobrenombre de PrintNightmare.
Microsoft has assigned CVE-2021-34527 to the remote code execution vulnerability that affects Windows Print Spooler. Get more info here: https://t.co/OarPvNCX7O
— Microsoft Security Intelligence (@MsftSecIntel) July 2, 2021
A diferencia de CVE-2021-1675, que recibió una calificación de riesgo alto, PrintNightmare se ganó, desde un primer momento, la calificación de vulnerabilidad crítica, pues permite la ejecución de código de manera remota. Desde ese momento se han producido varias actualizaciones, y Microsoft no ha dejado de trabajar día y noche en este problema. Mientras tanto, y a la espera de una solución definitiva, también hemos podido leer varias recomendaciones para mitigar sus riesgos.
¿En qué consiste PrintNightmare?
El problema radica en una función de la cola de impresión de Windows, concretamente en RpAddPrinterDriverEx() que, como su propio nombre indica, permite la instalación de una nueva impresora en el sistema. Y es que, pese a que debería hacerlo, el gestor de impresión no restringe el acceso a la misma, por lo que cualquier usuario autenticado, ya sea local o remotamente, puede emplearla.
¿Y cuál es el problema de que un usuario pueda instalar remotamente una impresora? ¿Qué hace que PrintNightmare sea tan peligroso? Seguro que ya lo has deducido: cuando hablo de instalar una impresora me refiero a su controlador, que un administrador puede instalar aunque no esté firmado y que, como ya puedes imaginar puede contener cualquier función maliciosa. De este modo, un atacante que logra acceso a un sistema y emplea RpAddPrinterDriverEx() para ejecutar código malicioso puede escalar privilegios, enviar cargas útiles al sistema comprometido e incluso tomar el control completo del mismo.
El administrador de impresión es un componente presente en todas las versiones de Windows, por lo que Microsoft indica que cualquier instalación de su sistema operativo es susceptible de ser atacada empleando PrintNightmare. Por lo tanto, sea la que sea tu versión de Windows, en principio tu sistema está expuesto a PrintNightmare y, por lo tanto, debes tomar medidas para protegerte. El problema es que no es tan sencillo como debería.
¿Cómo protegerse de PrintNightmare?
Aquí llegamos a la madre del cordero, y es que no es tan sencillo ni tan directo como cabría esperar. Y sí, puede que hayas leído que ya hay un parche de Microsoft para solucionarlo, pero lo cierto es que no es efectivo.
Pero antes de entrar en esto hay que recordar lo que comentaba al principio, y distinguir entre la CVE-2021-1675 y la CVE-2021-34527. Para la primera, Microsoft ya publicó soluciones que mitigaban los riesgos concretos de dicha vulnerabilidad. Sin embargo, esos parches no solucionan el problema asociado a CVE-2021-34527.
Por otra parte, ayer mismo Microsoft publicó parches para PrintNightmare para distintas versiones de Windows, incluidas algunas que oficialmente ya no cuentan con soporte técnico. Son los siguientes:
- KB5004945: Windows 10 20H1, 20H2 y 21H
- KB5004946: Windows 10 versión 1909
- KB5004947: Windows 10 versión 1809 y Windows Server 2019
- KB5004949: Windows 10 versión 1803
- KB5004950: Windows 10 versión 1507
- KB5004951:Windows 7 SP1 y Windows Server 2008 R2 SP1
- KB5004958: Windows 8.1 y Windows Server 2012
- KB5004959: Windows Server 2008 SP2
La mala noticia es que, a poco de su publicación, las redes empezaron a poblarse de mensajes en los que se afirmaba que el parche oficial está incompleto y que, por lo tanto, PrintNightmare persiste tras su aplicación. Con el riesgo adicional de la falsa sensación de seguridad, claro, puesto que muchos usuarios podrían considerar que ya están protegidos, cuando en realidad aún están expuestos.
Peor aún, oPatch había publicado un parche no oficial que sí que se había mostrado efectivo frente a PrintNightmare, pero la aplicación del parche oficial de Microsoft mitiga el efecto del desarrollado por 0patch, por lo que el sistema vuelve a ser vulnerable a un ataque basado en este problema de seguridad:
If you’re using 0patch against PrintNightmare, DO NOT apply the July 6 Windows Update! Not only does it not fix the local attack vector but it also doesn’t fix the remote vector. However, it changes localspl.dll, which makes our patches that DO fix the problem stop applying. https://t.co/osoaxDVCoB
— 0patch (@0patch) July 7, 2021
Microsoft ha afirmado que está estudiando los mensajes sobre el problema del parche, por lo que entendemos que próximamente se producirá la publicación de una nueva versión del mismo, en la que se subsanen las deficiencias encontradas en la primera versión.
Mientras tanto, las recomendaciones pasan por no permitir la actualización automática de Windows si se está empleando el parche de opatch, pues con la protección que ofrece éste ya es suficiente. Otra posibilidad es desactivar los servicios de impresión que no necesites en cada sistema. Por ejemplo, los servidores, salvo que lo sean de impresión, por seguridad deberían tener dichos servicios desactivados. Y en cuanto a los endpoints, pues exactamente igual, reducir al mínimo los servicios activos relacionados con la impresión, especialmente si hablamos de sistemas desde los que no se imprime nunca.
Para comprobar el estado actual del servicio de cola de impresión, tendremos que abrir una consola de PowerShell y escribir Get-Service -Name Spooler en la línea de comando. Como resultado obtendremos el estado actual de la misma. En caso de que el servicio se muestre apagado o deshabilitado no tendremos que preocuparnos, puesto que la puerta de PrintNightmare permanece cerrada en ese sistema. En caso de que el servicio se encuentre activo son dos las posibilidades, siempre y cuando no estemos hablando de un servidor de impresión, en cuyo caso estas medidas no podrán aplicarse, puesto que el servicio dejará de funcionar.
La primera es, sin duda, la más drástica, y solo podremos emplearla si no imprimimos nunca desde ese sistema. En la misma consola de Powershell que empleamos para comprobar el estado del servicio, tendremos que escribir los siguientes comandos:
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
El primero detendrá de inmediato el servicio de impresión de Windows, mientras que el segundo modificará su configuración para que no se cargue de nuevo tras reiniciar el sistema. Cuando Microsoft publiqué un parche que solucione definitivamente PrintNightmare podrás reactivarlo con este comando;
Set-Service -Name Spooler -StartupType Enabled
De este modo, tras reiniciar el sistema, podrás volver a imprimir con normalidad desde ese sistema.
El segundo método es desactivar solo la función de servidor de impresión del sistema. De este modo seguirá siendo posible imprimir desde el mismo, pero éste dejará de contar con la función de servidor de impresión para otros equipos y dispositivos de la red. Para tal fin tendrás que acceder al Editor de directivas de grupo local y, en el mismo, navegar hasta Directiva equipo local > Configuración del equipo > Plantillas administrativas > Impresoras, y buscar allí la entrada Permitir que el administrador de trabajos de impresión acepte conexiones cliente.
Haz entonces doble click en la misma y comprueba su estado, que debe ser Deshabilitada para prevenir los riesgos de PrintNightmare. Así, si se encuentra en No configurada o habilitada, cambia esta valor y reinicia el sistema.
Ya he instalado el parche de Microsoft para PrintNightmare
Es posible que, cuando leas esto, ya hayas instalado el parche oficial de Microsoft, o incluso cabe la posibilidad de que esta acción se haya llevado a cabo automáticamente. El problema es que, per se, no resuelve el problema de PrintNightmare. En tal caso tendrás que llevar a cabo un cambio en el registro de configuraciones de Windows. La manera más rápida de hacerlo es abrir una consola (Símbolo del sistema) y escribir el siguiente comando:
«HKEY_LOCAL_MACHINE \ Software \ Policies \ Microsoft \ Windows NT \ Printers \ PointAndPrint» / v RestrictDriverInstallationToAdministrators / t REG_DWORD / d 1 / f
Transcríbelo exactamente tal y como se muestra, comillas incluidas o, si vas a hacerlo en el equipo en el que estás leyendo esto, puedes hacer copy&paste. Ten en cuenta que, aunque por su longitud se muestre partido, se trata de un único comando. De esta manera, evitarás que se puedan instalar controladores de impresora no firmados incluso por parte cuentas con privilegios de administrador de sistema, que es precisamente de lo que se aprovecha PrintNightmare.
¿Con esto ya estaré seguro?
En principio estas medidas ya deberían ofrecer el nivel de seguridad necesario, si bien es cierto que todavía habrá que esperar a que Microsoft publique una solución definitiva, ya sea como parche independiente o dentro del patch tuesday de la semana que viene. Adicionalmente, y muy importante, hay que tener en cuenta que estas soluciones evitan ataques desde su aplicación, pero no resuelven problemas que se hayan podido producir anteriormente, por lo que tras parchear PrintNightmare, procede realizar un chequeo de seguridad a los sistemas que hayan podido verse afectados, es decir, prácticamente cualquier sistema con Windows.
La entrada PrintNightmare: ¿qué está pasando? ¿Qué debes hacer? es original de MuySeguridad. Seguridad informática.