jueves, agosto 22, 2019

CVE-2019-14969: Escalada de privilegios en Windows Server 2016 a través de enlaces simbólicos

El mundo de las vulnerabilidades no descansa. Agosto va pasando, pero el mundo de la ciberseguridad sigue y sigue. Me he parado a revisar algunas de las que van saliendo y me ha llamado la atención, por simplicidad y potencia, una vulnerabilidad descubierta por la gente de ActiveLabs y en la que cuentan cómo funcionan los enlaces simbólicos en Microsoft Windows y cómo se puede lograr una escalada de privilegios total, es decir, de un usuario autenticado a ejecutar código como SYSTEM.

Figura 1: CVE-2019-14969: Escalada de privilegios en Windows Server 2016
a través de enlaces simbólicos

Antes de entrar en detalle, me parece interesar hacer un inciso sobre dónde encontrar estas vulnerabilidades, noticias, etcétera. A veces me preguntan por las fuentes, ¿dónde miras o miráis? Hoy en día es más fácil que nunca enterarse de las nuevas vulnerabilidades que se van reportando o que se van descubriendo.

Desde hacer seguimiento de diversas cuentas en Twitter, utilizar fuentes de datos de exploits como Exploit-DB, PacketStorm, 0day.today o SecurityFocus, seguir feeds de Mitre y otras fuentes más o menos relevantes, eventos o utilizar blogs nacionales que tratan éstas. Hay una gran cantidad de fuentes diferentes, quizá lo difícil sería organizar toda la información que recibimos.

Al ver la explotación de la vulnerabilidad y ver cómo se explica la técnica me pareció muy interesante, ya que lo vi muy didáctico. Teniendo en cuenta que el próximo 13 de septiembre hay un Rooted Lab en la RootedCON de Valencia sobre Red Team & Ethical Hacking que impartiré, pues pensé que esto era interesante para añadir a las diferentes técnicas de escalada de privilegios en sistemas. Además, el sábado 14 de septiembre impartiré una charla sobre uac-a-mola^2, la evolución de uac-a-mola, en el evento de Rooted en Valencia.

CVE-2019-14969: Escalando privilegios

Para el ejemplo que comentaré, y que se puede obtener mayor información en el artículo de ActiveLabs, utilizaremos la aplicación Netwrix Auditor en su versión 9.7 o anterior. ¿Qué hace esta herramienta? Es fácil, detecta amenazas de seguridad, prueba el cumplimiento y ayuda al equipo de IT con la auditoría. Es un software orientado a la auditoría IT.

Antes de seguir, miré en exploit-db buscando más información sobre vulnerabilidades en este software. Se puede encontrar un DoS sobre la aplicación y poco más.

Figura 2: Vulnerabilidades de Netwrix Auditor

Ahora, vamos a comenzar con la explicación del CVE-2019-14969. Esta vulnerabilidad es una escalada de privilegios de usuarios autenticados en el equipo que pueden llegar a ejecutar código como SYSTEM en un equipo Windows Server 2016.

Figura 3: Libro de Windows Server 2016: Administración y Seguridad

Lo primero de todo y echando un vistazo al pasado reciente hay que decir que la elevación o escalada de privilegios en sistemas MS Windows ha aumentado a través del uso de enlaces simbólicos. Algo similar ocurrió entre 2017 y 2019 con el crecimiento de publicaciones sobre bypasses de UAC, sobre todo con el uso de DLL Hijacking y manipulación del registro. En otras palabras, de una técnica concreta se puede obtener cientos de vulnerabilidades en diferentes aplicaciones o en diferentes partes de un sistema operativo.

El abuso o aprovechamiento de los enlaces simbólicos ha sido realizado durante muchos años, como por ejemplo el DLL Hijacking, pero ahora hay una pequeña oleada de vulnerabilidades en Windows que se aprovechan de esta técnica. ¿El resultado? Puede ser la escalada de privilegios. Muchos pueden pensar en el enlace simbólico en algo del mundo GNU/Linux, pero también aplica en el mundo Windows y hay que fortificar nuestros equipos contra estas técnicas.

Figura 4: Libro de "Máxima Seguridad en Windows: Secretos Técnicos"

Cuando se instala la aplicación Netwrix Auditor y se revisan los permisos en la carpeta donde se instala, se puede observar que los usuarios autenticados tienen permisos totales sobre el fichero “Netwrix.ADA.StorageAuditService.log”, el codiciado “Full Control”. Si revisamos el proceso “Netwrix.ADA.StorageAuditService.exe”, por ejemplo con ProcMon, encontramos que se está ejecutando en un nivel de integridad de SYSTEM.

Figura 5: Revisión con ProcMon

Es decir, se está ejecutando como NT AUTHORITY\SYSTEM. Este proceso escribe en ese archivo cada diez minutos para registrar cierta información. Además, para mayor comprensión, el servicio que se instala es “NwDataCollectionCoreSvc”, el cual es ejecutado como una cuenta local del sistema, es el responsable de ejecutar el binario comentado anteriormente. El binario se ejecutará como proceso hijo y como SYSTEM.

Lo interesante después del análisis con ProcMon es que el software intenta cargar DLLs no existentes, es decir, que devuelven un Name Not Found cuando lo vemos con el ProcMon e intentan cargar las DLLs. En el ejemplo de la publicación de la vulnerabilidad se utiliza la DLL con nombre VERSION.dll. El proceso que invoca esta DLL es UAVRServer.exe, el cual es otro binario que se arranca con otro servicio del software ejecutado con una cuenta local de sistema.

Eliminando el fichero de log que se encuentra en la ruta "\Program Files\Netwrix Auditor\Logs\Active Directory" se busca crear el enlace simbólico entre la DLL y el fichero de log. Hay que recordar que el fichero de log es dónde el binario elevado escribe cada diez minutos. Utilizando la herramienta CreateSymLink de James Forshaw. Con esta herramienta se crea el enlace simbólico comentado.

Figura 6: CreateSymLink

Cuando el proceso “Netwrix.ADA.StorageAuditService.exe" escriba con la operación WriteFile en el archivo de registro, es decir en el fichero del log. Vemos que se crea de nuevo el fichero de log, hay una reparación. Ahora, se borra el enlace simbólico y se espera diez minutos para que se realiza la siguiente operación de WriteFile. Ahora se ha generado un fichero VERSION.dll en el directorio \Program Files(x86)\Netwrix Auditor\User Activity Video Recording.

Lo interesante es que antes con el ProcMon se podía ver que no se encontraba esa DLL, pero ahora sí, gracias al enlace simbólico generado con la herramienta CreateSymLink. ¿Qué tiene esa DLL? Bueno, nada que nos importe, pero se puede generar una DLL que, por ejemplo, tenga la ejecución de una calculadora o la ejecución de un Meterpreter de Metasploit con msfvenom.

Figura 7: Ahora encuentra la DLL

Si revisamos la configuración de seguridad del archivo VERSION.dll se puede ver que los usuarios autenticados tienen control total sobre el archivo. Ahora se copia la nueva DLL por la VERSION.dll. Por último, se debe esperar a que el servicio "NwUserActivitySvc" se reinicie. Generalmente, tendrá que ser un administrador o el propio devenir del sistema el que provoque este hecho.

Con herramientas como Process Explorer se puede ver que cuando todo se desemboca, si la DLL levanta una calculadora, ésta tendrá un contexto de integridad de SYSTEM. Lo mismo ocurriría si la DLL tiene un Meterpreter o cualquier otro código ejecutable.

Figura 8: Libros de "Metasploit para pentesters 4ª Edición"
y "Hacking con Metasploit: Advanced Pentesting" de 0xWord.

En definitiva, la vulnerabilidad permite a los usuarios normales elevar privilegios en el sistema. La vulnerabilidad, según informó el propio ActiveLabs, está solventada en la versión 9.8 de la aplicación.

Lo interesante es el funcionamiento de la técnica de elevación gracias a los permisos de los archivos y los enlaces simbólicos. El uso de herramientas como ProcMon y Process Explorer para detectar y verificar las hipótesis. En definitiva, un mundo interesante el de la escalada de privilegios.

Saludos,

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced 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.

2 comentarios: