martes, septiembre 04, 2018

Windows 10 x64: Escalada de privilegios a la espera de una actualización

El verano, y sus vacaciones, toca a su fin y la vuelta ‘al cole’ es ya una realidad para muchos. Con las pilas cargadas así vuelvo después de un tiempo de desconexión y de viajes. Incluso, en período vacacional, me pasé por la Tomatina CON de mi amigo Raúl Fuentes. Volví a ver a compañeros de sector y volvimos ‘a disfrutar’ de los tomatazos que allí se viven. Si no has estado antes, evento recomendado y festejo también recomendado.

Figura 1: Windows 10 x64: Escalada de privilegios a la espera de una actualización

Septiembre ha llegado, y yo estoy con muchas energías renovadas y muchas ganas de arrancar, empezando por la DragonJAR CON, en la que estaré el próximo fin de semana. Allí estaré hablando sobre nuestra investigación sobre bypass de UAC y la herramienta UAC-A-Mola realizada por el equipo de Ideas Locas del área CDO de Telefónica.


Figura 2: Presentación de UAC-a-Mola

Hoy quiero volver al día a día y hablaros de la actualidad de la ciberseguridad. Además, comenzando por algo práctico. Aunque ya han pasado unos días, el mes de agosto nos dejaba una noticia más que interesante en forma de 0day en Windows 10 de 64 bits. Esta vulnerabilidad permite a un usuario sin privilegios en el sistema lograr ejecutar código en el contexto de SYSTEM, por lo que se obtiene lo que podemos denominar una escalada de 0 a SYSTEM.

Figura 3: Publicación del 0day de Windows 10 64bits en Twitter

Lo más curioso ha sido la vía de publicación de dicha vulnerabilidad y exploit, ya que ha sido a través de un tuit de Twitter. Este caso no es el primero, por ejemplo, el investigador Stefan Esser ya publicó un exploit en un único tuit. La vulnerabilidad de escalada de privilegios afectaba en este caso a OSX 10.10. En la Figura 3, se puede ver el tuit original de SandboxEscaper. Hay que decir que el exploit ya no se encuentra en el Github de SandboxEscaper, pero sí en cualquiera de los cientos forks que se hicieron.

Figura 4: PoC del 0day

Cuando uno obtiene este repositorio y lo descomprime encuentra lo que se puede visualizar en la imagen superior. Encontramos la DLL ALPC-TaskSched-LPE, la cual por defecto va a levantarnos un bloc de notas. El binario InjectDLL.exe, el cual nos permite realizar la inyección y explotación, como veremos más adelante.

¿En qué consiste la vulnerabilidad?

El programador de tareas tiene una ruta c:\windows\system32\tasks dónde se crean archivos que representan las tareas. La función “SchRpcSetSecurity” es la encargada de escribir la DACL de las tareas. ¿Qué es la DACL? Discretionary Access Control List. Es el mecanismo de control de acceso que se utiliza en este caso. Si un objeto tiene una DACL, el sistema permitirá el acceso solo a quién marque la ACE, Access Control Entries en el DACL.


Figura 5: Esquema de la DACL en Windows

Lo importante es que la función “SchRpcSetSecurity” es la que se encarga de escribir la DACL de las tareas que se van creando. La función se encuentra dentro del llamado endpoint ALPC, Advanced Local Procedure Call, que pertenece al programador de tareas. La función comentada anteriormente escribe las DACL de las tareas impersonando.

Lo curioso es que si existe un archivo .job en c:\windows\tasks se intenta crear la DACL, pero sin impersonar. Aquí está la vulnerabilidad, cualquier usuario, independientemente de los privilegios y grupo al que pertenezca, puede crear un hardlink a cualquier otro archivo, ya que pensemos que solo se necesita acceso de lectura. Gracias al enlace se permite que el programador de tareas genera una DACL arbitraria, que no será tan arbitraria porque podremos generarlo para SYSTEM y tomar control total de la máquina.

PoC: Jugando con la vulnerabilidad

En primer lugar, vamos a mostrar un ejemplo básico de uso del exploit. Aunque lo realamente interesante es lo que está ocurriendo por debajo, comentado anteriormente, hay que mostrar cómo se puede utilizar la vulnerabilidad en un proyecto de Ethical Hacking y/o Pentesting. Es una vulnerabilidad que Microsoft está trabajando para solventar lo antes posible.

En primer lugar, ejecutamos, un proceso, por ejemplo, un bloc de notas. En este caso, el bloc de notas tiene el PID 6496. Si se observase con Process Explorer, se vería que la integridad del bloc de notas es media. Además, el usuario que lo ha ejecutado es un usuario sin ningún tipo de privilegio en el sistema.

Figura 6: Inyección de DLL con éxito y notepad corre como SYSTEM

Utilizando el binario InjectDLL.exe se puede inyectar en un proceso la DLL en cuestión, tal y como se puede visualizar en la imagen superior. Como se puede ver en el Process Explorer, se obtiene un nuevo notepad.exe con nivel de integridad de SYSTEM, es decir, se ha conseguido ejecutar el código en un contexto elevado, consiguiendo la escalada de privilegio.

Como se puede entender, sería sencillo acoplar esto a la ejecución de un Meterpreter o cualquier otro código, una cmd o una Powershell, con privilegios. Hay que tocar el fichero exploit.dll que se encuentra en la carpeta Release.

Comienzo de Temporada

La temporada empieza fuerte y agosto nos dejó con esta vulnerabilidad a la que se debe estar muy atento para su parcheo. El CVSS que le han otorgado es de 6,8 en su base score, tal y como se puede ver en este enlace.

Estaremos atentos a posibles módulos de Metasploit que puedan implementarse sobre esta vulnerabilidad para poderos mostrar en el Rooted Lab de Metasploit y Hacking Ético que impartiré en Rooted CON Valencia 2018 donde los alumnos además tendrán como material del apoyo el libro de Metasploit para pentesters 4ª Edición. ¡Allí nos vemos!

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.

1 comentario:

Unknown dijo...

pablo que mal no poder verte en la dragonjarcon, espero vengas mas seguido a Colombia y a mi ciudad Cali espero ver alguna charla tuya algún día y me firmes un libro.
Muchos saludos y muchos éxitos con guacamola

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares