ESC1 Vulnerability - AD CS

·

6 min read

ESC1 Vulnerability - AD CS
En este artículo hablaremos un poco sobre qué son los Servicios de Certificado de Windows y como configurar y explotar la vulnerabilidad ESC1 en las plantillas de certificados.

¿Qué son los Servicios de Certificados de AD?

Los servicios de certificados de Active Directory (AD CS) es un rol de Windows Server para emitir y administrar certificados de infraestructura de clave pública (PKI) que se usan en protocolos de autenticación y comunicación seguros.

Los certificados digitales se pueden usar para cifrar y firmar digitalmente documentos electrónicos y mensajes, así como para la autenticación de cuentas de equipo, usuario o dispositivo en una red.

Dentro de estos Servicios de Certificados entran en juego las plantillas de certificados. Hay una serie de términos que debemos conocer para entender mejor los certificados.

  • AD CS (Active Directory Certificate Services) : es la infraestructura PKI creada por Microsoft.

  • PKI (Public Key Infraestructure): se encarga de manejar los certificados y la encriptación.

  • CSR (Certificate Signing Request) : básicamente es un mensaje que se envía a la CA para solicitar un certificado firmado.

  • CA (Certificate Authority) : entidad de certificación que se encarga de avalar la identidad de usuarios, equipos y organizaciones.

  • Certificate Template : plantillas con configuraciones predefinidas en ADCS que determinan cómo se emiten y gestionan los certificados digitales.

¿Qué son las Plantillas de Certificados?

Las plantillas de certificados son configuraciones predefinidas en AD CS que determinan cómo se emiten y gestionan los certificados digitales.

En pocas palabras, se podría decir que son una forma de estandarizar y simplificar la creación de certificados, asegurando que cumplen con los requisitos de seguridad.

Algunos tipos de Plantillas de Certificados:

  • Usuario : Certificados que se utilizan para autenticación de usuarios en entornos Windows.

  • Equipo : Certificados para la autenticación de máquinas.

  • Web Server : Certificados utilizados para habilitar SSL/TLS en servidores web.

  • Cifrado de Correo : Certificados utilizados para cifrar correos electrónicos y asegurar comunicaciones.

🐵
Estas plantillas pueden ser vulnerables a diferentes ataques si no se configuran correctamente.
🙉
A continuación, configuraremos una plantilla vulnerable.

Vulnerabilidad ESC1

Requerimientos

  • Windows Server 2019 con Active Directory instalado y configurado.

  • Rol de Servicios de Certificados de Active Directory.

  • Credenciales de un usuario del dominio.

  • Herramienta Certipy y Suite Impacket para la realización de los ataques.

Configuración Vulnerabilidad ESC1

En primer lugar vamos a configurar la plantilla para que sea vulnerable a ESC1.

Nos dirigimos al panel de Administración del Servidor > Herramientas \> Entidad de Certificación.

A continuación debemos dirigirnos a Plantillas de Certificado, click derecho y Administrar.

Buscamos la plantilla de usuario, click derecho y duplicar.

Y por último en el apartado seguridad vamos a dar permisos Inscribirse al grupo Usuarios del dominio.

Una vez aplicados los cambios, ya podemos proceder.


Identificando ESC1 con BloodHound

Anteriormente hemos podido identificar la plantilla vulnerable a través de la herramienta certipy, pero también podemos detectarlo a través de Bloodhound.

Para ello de nuevo utilizaremos certipy para que nos genere toda la información en un archivo .zip que posteriormente importaremos en bloodhound.

certipy-ad find -vulnerable -u bart@hommer.local -p P@ssword1234 -old-bloodhound -enabled

Como podemos ver en la imagen, el usuario bart (del que disponemos credenciales) forma parte del grupo UsuariosDelDominio y este grupo posee los permisos Enroll (o Inscribirse) sobre la plantilla ESC1.

Por lo que utilizando las credenciales del usuario bart podremos obtener el hash NTLM del usuario Administrador y ganar acceso bajo un usuario con privilegios máximos.


Explotación Vulnerabilidad ESC1 en Linux

Para la explotación de esta vulnerabilidad partimos del siguiente escenario:

  • Dispongo de credenciales de un usuario del dominio, Bart:P@ssword1234

Para enumerar y abusar de certificados podemos hacer uso de la herramienta certipy-ad que puede instalarse fácilmente desde la terminal de kali con el comando sudo apt install certipy-ad.

En primer lugar debemos enumerar en busca de posibles certificados vulnerables, y para ello utilizaremos el siguiente comando.

certipy-ad find -vulnerable -u bart@hommer.local -p P@ssword1234

Como podemos ver nos genera varios archivos, entre ellos uno de texto...

[!] Vulnerabilities
      ESC1 : 'HOMMER.LOCAL\\Usuarios del dominio' and 'HOMMER.LOCAL\\Authenticated Users' can enroll, enrollee supplies subject and template allows client authentication

En este archivo tras filtrar con grep podemos ver que es vulnerable a ESC1, por lo que debemos anotar una serie de datos que encontraremos en el archivo de texto para el siguiente paso.

El siguiente paso será obtener el certificado .pfx del usuario al cual queremos escalar, en mi caso el usuario Administrador, para posteriormente autenticarnos con su certificado y obtener su hash NTLM.

certipy-ad req -u <usuario@dominio> -p <contraseña> -ca <CertificateAuthority> -target <CAHostname> -template <vulnTemplate> -up <targetUsername>

Ahora que ya tenemos el certificado .pfx y la clave privada podemos utilizarlo para autenticarnos y obtener el hash NTLM del usuario.

certipy-ad auth -pfx <certificado.pfx> -dc-ip <ip>


Conexión vía Evil-WinRM

Tras obtener el hash podríamos intentar conectarnos a la máquina a través de WinRM si está activado en la máquina víctima.

En caso de estarlo simplemente nos conectaríamos realizando PassTheHash.


Conexión vía Impacket-Smbexec


Conexión vía psexec a través del TGT

Con certipy-ad y haciendo uso del certificado .pfx podemos obtener el TGT del usuario Administrador para posteriormente autenticarnos y ganar acceso al DC.

Una vez hemos obtenido el TGT simplemente lo exportamos a KRB5CCNAME y ejecutamos el siguiente comando.

Con el parámetro -k habilitamos la autenticación vía kerberos.


Explotación Vulnerabilidad ESC1 en Windows

Para poder realizar este ataque en Windows necesitaremos tener instalado python3 y certipy-ad.

Instalar python3 es tan sencillo como dirigirnos a la tienda de microsoft, buscarlo e instalar.

Y posteriormente desde la terminal o cmd ejecutamos el comando pip3 install certipy-ad

Recomiendo añadir al path la ruta donde se almacenan los scripts de python3 para no tener que poner toda la ruta completa.

Ahora que ya tenemos todo instalado procedemos a identificar la vulnerabilidad ESC1 como hicimos anteriormente desde Linux.

Es prácticamente igual el comando para detectarlo.

Tras detectar la vulnerabilidad procedemos a obtener el certificado del usuario administrador.

Tras obtenerlo nos autenticamos con el certificado, igual que hicimos anteriormente.


Conexión vía psexec a través del TGT


Remediación Vulnerabilidad ESC1

Para remediar esta vulnerabilidad debemos seguir estos pasos:

  1. Deshabilitar "Enrollee Supplies Subject" de la plantilla vulnerable.

  1. Requerir Aprobación del Administrador.

  1. Por último debemos asignar correctamente los permisos a cada usuario.