Bypass UAC en Windows 10 con variable windir: escalada de privilegios desde sesión estándar

PowerShell elevado tras ejecutar bypass UAC con sdclt.exe

Durante una práctica del máster en ciberseguridad, se nos propuso un reto: ejecutar un proceso con privilegios de administrador desde una cuenta estándar, sin explotar vulnerabilidades ni usar credenciales elevadas. Ya había realizado un ejercicio similar sobre bypass AMSI que puedes consultar aquí: Bypass AMSI en PowerShell.

El objetivo: conseguir un bypass UAC (User Account Control) sin alertas, sin exploits, y sin trucos sucios. Pero como pronto descubrí, esta técnica ya no es válida en versiones recientes de Windows.

¿Qué es el bypass UAC y por qué es tan importante?

El UAC es el sistema de Windows que evita que programas se ejecuten con privilegios elevados sin aprobación explícita del usuario. Evadirlo significa ejecutar código con nivel de integridad alto sin que aparezca el típico aviso de UAC, una ventaja clara tanto para pentesters como para atacantes… y una amenaza para defenders.

No es un exploit per se, sino una técnica que explota comportamientos legítimos del sistema operativo. Una especie de ingeniería social al sistema operativo.

Montaje del entorno de pruebas para el bypass UAC

  • Máquina virtual con Windows 10 build 10240 de julio de 2015.
  • PowerShell 5.1
  • Usuario con pertenencia al grupo de administradores (sin sesión elevada)
  • Microsoft Defender activo y sin modificaciones

Este entorno me permitió comprobar hasta qué punto técnicas ya documentadas siguen siendo funcionales en sistemas no actualizados.

Paso a paso real: bypass UAC con la variable windir

Esta técnica se basa en engañar al sistema con una variable de entorno manipulada que redirige la ejecución de una tarea programada hacia un proceso arbitrario. La idea fue documentada por Chema Alonso y otros investigadores.

1. Comprobación en Windows 10 actualizado

Inicialmente, ejecuté la técnica en una máquina virtual con Windows 10 versión 22H2. Desde PowerShell sin elevar privilegios, probé lanzar la tarea programada vulnerable:

schtasks /Run /TN \Microsoft\Windows\DiskCleanup\SilentCleanup /I

Obtuve un error: la tarea no se ejecutó.

Esto indica que la técnica ya ha sido parcheada en las versiones modernas de Windows, como la 22H2. Aunque la tarea SilentCleanup está programada para ejecutarse con privilegios elevados, el sistema ya no permite su ejecución desde una sesión sin privilegios incluso si el usuario pertenece al grupo de administradores. La elevación silenciosa ha sido bloqueada por Microsoft en estas versiones más recientes.

“Esta técnica ya no es funcional en versiones recientes. En las últimas builds de Windows 10 y 11, Microsoft ha parcheado este comportamiento.”

Una lección práctica sobre cómo Windows ha ido cerrando vías de escalada silenciosa.

2. Preparación en Windows 10 build 10240

Tras confirmar que la técnica estaba parcheada en Windows 10 versión 22H2, decidí validar el bypass en un entorno vulnerable. Para ello, desplegué una máquina virtual con Windows 10 build 10240, correspondiente a la versión inicial lanzada en julio de 2015, donde se documentó originalmente esta técnica.

Una vez instalada la VM, accedí con el usuario creado por defecto, que pertenece al grupo de administradores pero sin elevación activa. En este contexto, preparé el entorno para ejecutar el bypass UAC mediante la manipulación de la variable de entorno windir, como explican investigadores como Chema Alonso en su blog “Un informático en el lado del mal”.

El proceso fue el siguiente:

1. Modifiqué la variable de entorno windir desde el registro con el siguiente comando:

reg add hkcu\Environment /v windir /d "cmd && REM"

Esto hace que cuando Windows intente ejecutar %windir%\system32\cleanmgr.exe, realmente invoque cmd.exe. El && REM se incluye para completar la sintaxis correctamente sin errores de interpretación.

2. Lancé la tarea vulnerable utilizando el programador de tareas de Windows:

schtasks /Run /TN \Microsoft\Windows\DiskCleanup\SilentCleanup /I

El modificador /I permite que la tarea interactúe con el escritorio del usuario.

3. Resultado inmediato: Se abrió una consola de cmd.exe sin mostrar el aviso de UAC. Esta ejecución sin prompt indica que el bypass ha funcionado, ya que se ha ejecutado con privilegios elevados.

4. Validación de la elevación:

  • Utilicé Process Explorer para inspeccionar el proceso cmd.exe, confirmando que corría con nivel de integridad «High».
  • Como prueba adicional, ejecuté:
echo h > C:\Windows\System32\pwned.txt

El archivo se creó correctamente,

demostrando que el proceso tenía privilegios de escritura en una ruta del sistema protegida. Para contrastar, probé el mismo comando desde un cmd.exe sin elevación y falló como era de esperar:

Este ejercicio demuestra que la técnica de bypass UAC mediante la modificación de la variable de entorno windir era funcional en versiones antiguas de Windows 10, pero ha sido corregida en builds modernas. El experimento pone de relieve cómo ciertos mecanismos internos del sistema pueden ser aprovechados para ejecutar código privilegiado sin intervención del usuario, algo que refuerza la importancia de mantener los sistemas actualizados.

Resultado: técnica confirmada en sistemas antiguos

El ejercicio demostró que la técnica de bypass UAC mediante modificación de windir funciona en builds antiguas, pero ha sido corregida en versiones modernas.

“Esta técnica ya no es funcional en versiones recientes. En las últimas builds de Windows 10 y 11, Microsoft ha parcheado este comportamiento.”

Una lección práctica sobre cómo Windows ha ido cerrando vías de escalada silenciosa.

¿Por qué funciona este bypass UAC?

Windows ejecuta la tarea SilentCleanup con privilegios elevados. Al modificar windir, redirigimos el ejecutable de limpieza hacia otro binario (como cmd.exe). No se trata de una vulnerabilidad, sino de una mala interpretación del entorno que el sistema confía sin verificar.

Esto es lo que se llama Living-off-the-Land, abusar de recursos nativos del sistema para comportamientos no deseados.

Recomendaciones para defenderse

  • Monitorizar cambios en claves de registro como HKCU\Environment
  • Detectar llamadas sospechosas a SilentCleanup
  • Usar AppLocker o WDAC para bloquear tareas automáticas que eleven sin prompt
  • Implementar EDRs que detecten abusos LOLBins

Tras documentarme, decidí probar con sdclt.exe, una utilidad legítima de Windows utilizada para restauraciones del sistema y copias de seguridad.

Este bypass UAC fue parte del máster… pero la lección va más allá

Realicé todo el proceso documentando cada paso: desde los comandos del registro, hasta la apertura de la consola elevada. Lo que aprendí es que muchas veces la seguridad no está en los antivirus ni los firewalls, sino en las decisiones de diseño del sistema operativo.

Y que actualizar es más que instalar parches: es cerrar puertas silenciosas como esta.

Bibliografía y referencias

Comentarios

No hay comentarios aún. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *