PoC: Explotando zerologon con exploits públicos

El 11 de agosto de este año, Microsoft a través de Secura trataba una vulnerabilidad en el servicio de NetLogon utilizado por los controladores de dominio de Windows Server, posteriormente el 11 de septiembre esta misma empresa hacia publico un advisory junto con una herramienta para identificar la vulnerabilidad que fue nombrada CVE-2020-1472 con una valoración CVSS3 de 10/10, 3 días después hacia publico un white paper de la misma, desde ese entonces se ha escrito y hablado mucho sobre la vulnerabilidad que fue denominada por la comunidad como zerologon y era cuestión de tiempo para que se hiciera publico un exploit que permitiera el aprovechamiento de esta.

El problema consiste en que la implementación del servicio Netlogon basado en AES-CF88 no esta hecha correctamente, debido que la función ComputeNetlogonCredential define IVs fijos de bytes de ceros en lugar de aleatorios, dando como resultado una probabilidad de 1:256 que el cifrado AES genere como salida todos ceros.

Para entender en que consiste la explotación de la vulnerabilidad en la siguiente imagen se puede apreciar los pasos necesarios, comenzando por spoofear las credenciales del cliente, seguido de la deshabilitación de cifrar y autenticar criptográficamente, posteriormente se falsifica una llamada y se cambia la contraseña de un equipo del directorio activo, una vez cambiada la misma es posible llegar a ser el administrador de dominio.

Ya que entendemos un poco en que consiste la vulnerabilidad y la explotación pasemos a la POC, para la cual se implemento un Windows Server con Directorio Activo y promovido como controladora de dominio, este será el objetivo, por otra parte desde el lado del atacante usaremos el exploit publico creado por dirkjanm y que se puede descargar desde:

https://github.com/dirkjanm/CVE-2020-1472

El exploit se debe ejecutar con python3 especificando el hostname de la controladora de dominio y la dirección ip de la misma:

#python3 cve-2020-1472-exploit.py <dc-name> <dc-ip>

Pero al ejecutarlo de esta manera se obtiene un problema con el modulo de impacket obteniendo el siguiente error.

Para solucionar el error se trabaja con virtualenv con el fin de implementar entornos aislados de python, una vez creado y activado se clona e instala de github el modulo de impacket, los comandos usados se indican a continuación junto a los resultados obtenidos.

#virtualenv zerologon
#source zerologon/bin/activate
#git clone https://github.com/SecureAuthCorp/impacket
#cd impacket/
#python3 setup.py install

Ya con el entorno aislado de python y el modulo de impacket correctamente funcionando pasamos nuevamente a ejecutar el exploit con los mismos parámetros, esta vez teniendo éxito.

Ya con la vulnerabilidad explotada podemos proceder a realizar un volcado de los hashes de las contraseñas de los usuarios del dominio, para ello utilizaremos el código que podemos descargar desde:

https://github.com/risksense/zerologon

Tras instalar los respectivos requerimientos con pip3 el comando a ejecutar seria:

#secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'DOMAIN/DC_NETBIOS_NAME$@dc_ip_addr'

Obteniendo el siguiente resultado:

Para terminar cabe aclarar que una solución temporal ya fue publicada por Microsoft en las actualizaciones liberadas en agosto, pero la solución definitiva no sera sino hasta el segundo martes de febrero de 2021. Otra buena justificación para actualizar el sistema operativo.

Deja una respuesta

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