El 29 de junio, Huntress tuvo conocimiento de CVE-2021-1675 (ahora denominada CVE-2021-34527), una vulnerabilidad crítica de ejecución remota de código y escalada de privilegios locales apodada “PrintNightmare.”
Microsoft lanzó un parche el 8 de junio considerando esta vulnerabilidad de baja gravedad. El 21 de junio, PrintNightmare se actualizó a gravedad crítica al descubrirse el potencial de ejecución remota de código. El parche de Microsoft del 8 de junio no resolvió con éxito el problema de CVE-2021-32547 PrintNightmare, pero sí resolvió CVE-2021-1675.
ACTUALIZACIÓN 07 de julio @ 12 p. m. hora del Este: El 6 de julio, Microsoft actualizó su aviso sobre CVE-2021-34527 y lanzó parches de emergencia, pero la eficacia de esta actualización de seguridad aún está bajo escrutinio.
Miembros de nuestro equipo de Huntress validaron el nuevo parche en Windows 21H1 Empresarial, y detuvo la escalada de privilegios local; sin embargo, esta escalada de privilegios aún tiene éxito en Windows Servers. Esta solución aparentemente parcial sí parece prevenir la ejecución remota de código, pero todavía no cubre la escalada de privilegios. Según las últimas actualizaciones de Microsoft del 6 de julio, "Aún no hay actualizaciones disponibles para Windows 10 versión 1607, Windows Server 2016 ni Windows Server 2012. Las actualizaciones de seguridad para estas versiones de Windows se lanzarán pronto."
Hasta ahora, no hemos visto un escenario de parche que abarque por completo (1) prevenir la escalada de privilegios local, (2) prevenir la ejecución remota de código y (3) permitir la impresión.
ACTUALIZACIÓN 08 de julio @ 10:18 a. m. hora del Este: Se han recibido solicitudes de la información técnica sobre la máquina en la que probamos el parche. En una VM con Windows 10 21H1 Empresarial, se detuvo la implementación de Mimikatz de escalada de privilegios local.
- Get-HotFix salida del cmdlet
- systeminfo salida del comando
- La ruta de registro HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint no estaba presente.
ACTUALIZACIÓN 02 de julio @ 8:48 a. m. hora del Este: Microsoft ahora ha denominado a PrintNightmare como CVE-2021-34527, lo que algunos de nosotros originalmente considerábamos como CVE-2021-1675. La amenaza sigue siendo real; solo hubo confusión en el nombre. Estrictamente, 1675 se abordó en las actualizaciones del 8 de junio, pero 34527/PrintNightmare todavía no tiene parche.
Esta publicación del blog busca crear conciencia sobre esta vulnerabilidad, ya que se trata de una falla de seguridad grave que afecta a una cantidad increíblemente grande de Windows Servers.
Nota: Esto todavía es una noticia de último momento y una amenaza emergente. Huntress continuará actualizando este blog con nuestras observaciones y cualquier indicador de compromiso tras la actividad posterior a la explotación, si se descubre.
A medida que esto evoluciona, puedes (y debes) mantenerte al día con los últimos avisos de seguridad, titulares e inteligencia de amenazas.
ACTUALIZACIÓN 30 de junio @ 5:24 p. m. hora del Este: Hemos compartido esto en r/msp en Reddit, revisa ese hilo para ver los aportes de la comunidad y otras perspectivas.
ACTUALIZACIÓN 30 de junio @ 5:28 p. m. hora del Este: Se agregó nueva información de detección para ImageLoad y la información previa de Microsoft que señala la necesidad de depurar las colas de impresión si el servicio Print Spooler está deshabilitado.
ACTUALIZACIÓN 30 de junio @ 9:01 p. m. hora del Este: Se incluyó otra opción para mitigación temporal sin obstaculizar la funcionalidad de impresión del servicio Print Spooler.
ACTUALIZACIÓN 01 de julio @ 9:14 a. m. hora del Este: Se actualizó para reflejar mejor la orientación de nuestra publicación en Reddit con nueva información.
ACTUALIZACIÓN 02 de julio @ 8:48 a. m. hora del Este: Se actualizó para incluir el nuevo aviso de Microsoft sobre CVE-2021-34527.
¿Qué hace PrintNightmare?
PrintNightmare afecta a un servicio nativo integrado de Windows llamado "Print Spooler", que está habilitado de forma predeterminada en las máquinas Windows. En el pasado, Print Spooler ha sido blanco de otros ataques y exploits, pero sigue estando presente en los sistemas operativos modernos. El propósito de Print Spooler es administrar impresoras o servidores de impresoras. Con frecuencia, no es un servicio crítico ni esencial para el negocio y se puede deshabilitar.
El impacto de este vector de ataque conduce a la escalada de privilegios local y la ejecución remota.
- La escalada de privilegios local significa que si un actor malintencionado ya tiene acceso a una máquina comprometida con una cuenta de usuario de bajos privilegios (a menudo usuarios de dominio), puede obtener fácil e inmediatamente derechos de administrador o de nivel SYSTEM para controlar por completo la máquina.
- La ejecución remota de código significa que este vector de ataque se puede usar como arma de forma externa, de una computadora a otra. Esto no solo ofrece una opción de acceso inicial, sino que también facilita el movimiento lateral hacia otros sistemas de alto valor (como un controlador de dominio).
Con estos efectos, los actores de amenazas con cualquier usuario y credencial sin privilegios de administrador (contraseña o hash NTLM) pueden obtener rápidamente acceso completo a un controlador de dominio y tomar control de todo un dominio.
Esta es una falla de seguridad grave que afecta a una cantidad increíblemente grande de servidores Windows. Se han publicado varios exploits de prueba de concepto (Python, C++) y hemos confirmado que esta vulnerabilidad es trivial de explotar.
Como esto afecta a tantos servidores Windows, te recomendamos encarecidamente que tomes medidas.
¿Qué deben hacer los MSP?
El parche del 8 de junio de Microsoft no soluciona este problema.
Actualmente, una solución temporal y parcial es deshabilitar el servicio Print Spooler.
Nota: Esto puede tener otras implicaciones no deseadas si tu organización imprime documentos en PDF antes de enviarlos por correo electrónico, por ejemplo, para fines de nómina u otros casos de uso.
Si deshabilitar el servicio Print Spooler es adecuado para tu organización, puedes hacerlo en una sola máquina con algunos comandos de PowerShell:
Stop-Service -Name Spooler -Force Set-Service -Name Spooler -StartupType Disabled
Con tu solución RMM o PSRemoting, esto se puede distribuir a varias máquinas.
Esto también se puede configurar mediante Directiva de grupo, en...
Policies/Windows Settings/Security Settings/System Services/Print Spooler
Te recomendamos monitorear las entradas de registro en Microsoft-Windows-PrintService/Admin para encontrar posibles evidencias de explotación. Las entradas con mensajes de error que indican fallas al cargar módulos DLL de complementos podrían ser un indicador, pero si un actor de amenazas empaquetó una DLL legítima que Print Spooler solicitaría, este error no se registra.
Para tener visibilidad de estos registros, asegúrate de tener habilitado el registro de Microsoft-Windows-PrintService/Operational.
ACTUALIZACIÓN del 29 de junio, 5:28 p. m. hora del Este: Es posible que algunas organizaciones no tengan habilitado el registro de operaciones de Print Service y tengan dificultades para habilitarlo en todo el sitio. Si no puedes habilitar fácilmente ese registro, otra opción es buscar el uso de ImageLoad (ID de evento 7) con el proceso `spoolsv.exe`. Los investigadores han compartido reglas Sigma para ayudar a detectar esto.
Microsoft ha compartido información previa sobre el servicio Print Spooler y explica que deshabilitarlo implica una compensación entre la seguridad y la capacidad de realizar la depuración de impresión. Su nota explica que “para mitigar los efectos secundarios de deshabilitar el servicio de impresión, puedes depurar los objetos obsoletos de la cola de impresión de forma manual o con un script automatizado”.
ACTUALIZACIÓN del 29 de junio @ 9:01 p. m. hora del Este: Deshabilitar el servicio Print Spooler y detener la impresión por completo sin duda resulta poco práctico para algunas empresas. Si bien es una opción como solución parcial deficiente, otra alternativa sin deshabilitar el servicio es restringir los controles de acceso (ACL) en el directorio que usa el exploit para colocar DLL maliciosas. Este método fue dado a conocer por el equipo de TrueSec, y nosotros, junto con la comunidad, les reconocemos y felicitamos por su esfuerzo.
Cambiar las ACL evita que el servicio de cola de impresión objetivo coloque DLL maliciosas y, a la vez, mantiene la funcionalidad del servicio. Nota: No podrás instalar, desinstalar ni hacer cambios en los controladores de tu impresora mientras esta ACL esté vigente, y algunos usuarios de Citrix han reportado problemas de impresión con este método.
A continuación, el código de PowerShell para restringir la ACL:
$Path = "C:\Windows\System32\spool\drivers"$ACL = Get-Acl $Path$NewRule = New-Object System.Security.AccessControl.FileSystemAccessRule("System", "Modify", "ContainerInherit, ObjectInherit", "None", "Deny")$ACL.AddAccessRule($NewRule)Set-Acl $Path $ACL
A continuación, un video de demostración de esta ACL en funcionamiento, que evita que la prueba de concepto coloque una DLL maliciosa.
Para eliminar la ACL mediante implementación con PowerShell (agradecimiento y reconocimiento al miembro de la comunidad u/bclimer en nuestro hilo de Reddit):
$Path = "C:\Windows\System32\spool\drivers"$ACL = Get-Acl $Path$NewRule = New-Object System.Security.AccessControl.FileSystemAccessRule("System", "Modify", "ContainerInherit, ObjectInherit", "None", "Deny")$ACL.RemoveAccessRule($NewRule)Set-Acl $Path $ACL
Para otros detalles técnicos:
- Sigue nuestro hilo de análisis forense en vivo en los comentarios de nuestro hilo de Reddit
- Revisa el blog explicativo detallado de Kevin Beaumont
- Considera la configuración de detección de Lares si usas Sysmon
Otros investigadores también han compartido reglas de detección y técnicas para tener mejor visibilidad sobre los ataques que explotan PrintNightmare.
¿Qué está haciendo Huntress?
Completamos nuestra primera revisión y las más de 34.000 redes se ven limpias hasta ahora. Seguiremos compartiendo información si vemos actividad de post-explotación. También estamos atentos a la posibilidad de crear rutas de payload con recorrido de directorios fuera de las carpetas mencionadas anteriormente (no parece eludir la técnica de ACL ni el KQL de Defender for Endpoints de Olaf Hartung)
Otros investigadores de seguridad, incluido el autor de Mimikatz, Benjamin Delpy, están observando un comportamiento extraño de la vulnerabilidad (algunos servidores totalmente parchados no son vulnerables hasta que se promueven a controlador de dominio). También notamos que, a veces, los intentos de explotación exitosos repetidos no siempre quedan registrados en Microsoft-Windows-PrintService/Admin. (¿Posible almacenamiento en caché?)
El agente de Huntress monitorea específicamente la actividad de hackers indicada por la presencia de persistencia y puntos de apoyo persistentes, como backdoors o implantes.
PrintNightmare por sí solo no crea un punto de apoyo persistente, pero con el impacto de la escalada de privilegios y la ejecución de código, ofrece la posibilidad de post-explotación y persistencia más adelante.
Se han publicado dos PoC públicas en GitHub (Python, C++). Nuestro equipo revisó el código fuente de ambas y confirmó que las dos explotan con éxito sistemas Server 2016 y Server 2019. No hemos probado en todos los sistemas operativos Windows, pero el anuncio de CVE de Microsoft indica que Windows 7, 8, 8.1, 10 y Server 2008, 2008 R2, 2012 y 2012 R2 se ven afectados.
Para quienes quieran seguir los detalles técnicos, nuestro equipo está analizando el comportamiento del exploit para ayudarnos a determinar si algún socio de Huntress se ha visto comprometido. Aquí hay una vista filtrada de spoolsv.exe en ProcMon.
Obteniendo la DLL maliciosa desde un recurso compartido SMB del atacante
PoC en Python intentando encontrar el destino temporal para la DLL maliciosa
Encuentra la DLL maliciosa (y la ejecuta)
A partir de este análisis rápido, aprendimos que hay un puñado de directorios que podemos monitorear en busca de payloads soltados:
- C:\Windows\System32\spool\drivers\x64\3\
- C:\Windows\System32\spool\drivers\x64\3\old
- C:\Windows\System32\spool\drivers\x64\3\new
Habilitar el registro de eventos Microsoft-Windows-PrintService/Operational (deshabilitado por defecto) y monitorear el ID de evento 316 da resultados sólidos de detección en nuestras pruebas de laboratorio, sin importar si el exploit tiene éxito. El investigador de seguridad Jake Williams ha visto el mismo resultado y recomendó el siguiente fragmento de PowerShell:
$logDeets = Get-LogProperties 'Microsoft-Windows-PrintService/Operational'$logDeets.Enabled = $trueSet-LogProperties -LogDetails $logDeets
Huelga decir que hay mucha caza de amenazas en marcha. 😉
Huntress seguirá atento a actualizaciones y otra inteligencia de amenazas a medida que surjan, y continuará actualizando este artículo.
Más información: investigación e inteligencia
La comunidad de seguridad de la información se apoya en hombros de gigantes. Eso significa que toda la industria trabaja en conjunto para compartir conocimiento, recursos y comprensión. Huntress no pretende ser tu único proveedor, ya que existe todo un mundo de información útil.
A medida que esta noticia evoluciona, te invitamos a seguir la investigación e inteligencia de otros actores de nuestra industria y de la comunidad de seguridad de la información. Se necesita de todos.