28 sept 2017

Más Bypass UAC: CMSTP.EXE y el misterio del autoelevado en Windows 10

Hacia mediados de agosto apareció un nuevo bypass de UAC. En este caso el investigador que lo ha descubierto es Oddvar Moe, el cual publicó recientemente una nueva forma de hacer bypass al Device Guard a través de la vulnerabilidad CVE-2017-8625. El investigador ha publicado su investigación sobre el UAC y una nueva forma de saltárselo. Por otro lado, la gente de UACMe lo ha integrado y publicado en su proyecto.

El problema viene en el fichero binario llamado cmstp.exe, el cual es un binario que permite instalar o eliminar un perfil de Connection Manager Service. Para llevar a cabo el bypass de UAC desde 0 necesitaremos habilitar una característica de Windows o que ésta estuviera activa, antes de nada. Tal y como se puede ver en la imagen, necesitaremos RAS Connection Manager Administration Kit (CMAK) habilitado. ¿Por qué? Sencillo, con esta herramienta crearemos los ficheros necesarios para manipular y conseguir el bypass de UAC. Otra opción es utilizar el fichero INF que Oddvar Moe ha dejado preparado para conseguir una cmd.exe autoelevada, mediante la invocación o ejecución del binario cmstp.exe apuntando al fichero INF.


Si optamos por crear el fichero INF a mano, una vez habilitado CMAK, debemos ejecutar la aplicación CMAK e ir paso a paso en el asistente. Rellenando los diferentes campos que podemos ir viendo y que nos solicitarán. El objetivo es crear un perfil y obtener los ficheros adecuados. Como dije anteriormente, otra opción es bajarse el fichero INF desde el github de Oddvar. También se ha publicado un fichero escrito en Powershell que genera automática el fichero INF y realiza los pasos necesarios para automatizar el bypass de UAC.

Como decía anteriormente, el asistente de CMAK es sencillo para acabar creando los ficheros necesarios. CMAK solicita permisos de administrador, por lo que sería una solución interesante traer el fichero INF generado previamente a la auditoría, ya que no podríamos habilitar la característica, ni crear el fichero. Por esta razón, se pueden copiar los ficheros desde nuestro equipo al equipo necesario y aprovecharse de la debilidad para lograr el bypass de UAC.


Por defecto, CMAK almacena estos ficheros del perfil creado. Es importante conocer que para crear estos archivos con CMAK necesitamos permisos, pero nos aprovecharemos del fichero INF, por lo que se recomienda crearlo en otro equipo donde podamos hacerlo y luego llevarlo al equipo en cuestión.


Hay que modificar el fichero *.inf. Los cambios son sencillos. En primer lugar, hay que buscar la sección RunPreSetupCommandsSection y añadir un par de líneas. Como se puede ver en la imagen, una de las líneas a añadir es la ejecución de un cmd.exe, lo cual ya nos hace ver por dónde van los tiros.

Otro cambio a realizar en el fichero INF es el comentar dos líneas, las cuales se encuentran marcadas en la imagen siguiente. Como se puede ver, las líneas CopyFiles y AddReg no tienen que ser ejecutadas por cmstp.


Una vez configurado esto, se puede abrir una cmd.exe y ejecutar el binario cmstp.exe con el fichero INF recién creado. El parámetro utilizado es /au, el cual indica que se instalará el perfil para todos los usuarios, por lo que debe ejecutarse con privilegio. Aquí está el trick. Si analizáis el manifest del binario encontramos que no está auto elevado, es más Oddvar Moe indicaba en su publicación que no entendía bien por qué estaba ocurriendo esto. ¿Por qué nos eleva si en el manifest no se indica?



La solución al tema la proporcionó el creador de UACMe. La razón es que debido al objeto COM CMLUAUTIL que está autoelevado, el cual viene de cmlua.dll, se utiliza un ShellExec y algunos métodos provocando que el flujo se ejecute con privilegio. De nuevo un bypass de UAC y ya hemos visto unos cuantos por aquí. Sin duda, una nueva técnica que ayudará a los pentesters en su día a día y a lograr saltarse el UAC de Windows 10.