Saltar al contenido principal
ESC1 — Enrollee Supplies Subject (SAN arbitrario)
Red Team

ESC1 — Enrollee Supplies Subject (SAN arbitrario)

WWladimir Hernandez
2026-05-20
20 min
SerieAD CS: Atacando la PKI de Windows
  1. 1Introducción: ¿Qué es AD CS y por qué es un objetivo crítico?
  2. 2ESC1 — Enrollee Supplies Subject (SAN arbitrario)

Si todavía no leíste la primera publicación de esta serie, te recomendamos comenzar por ahí. En esa entrada revisamos qué es AD CS, cómo funciona dentro de Active Directory y por qué terminó convirtiéndose en una superficie de ataque crítica en muchos entornos corporativos.

En esta segunda parte dejamos la teoría y pasamos a la explotación. Vamos a analizar ESC1: una de las configuraciones inseguras más conocidas en AD CS, donde una plantilla de certificados mal configurada permite solicitar certificados para identidades arbitrarias dentro del dominio.

¿Qué es ESC1?

ESC1 es una mala configuración en las plantillas de certificados, y es una de las más comunes y peligrosas que existen.

El problema está en la opción "Supply in the request" dentro de la configuración de la plantilla. Cuando esta opción está habilitada en una plantilla que permite Client Authentication, el usuario que solicita el certificado puede indicar libremente quién quiere ser, usando el campo Subject Alternative Name (SAN).

Para explicarlo un poco mejor: un usuario normal del dominio puede pedirle a la CA un certificado que diga que es el Administrador del dominio. Y si además no hay Manager Approval requerido y los permisos de enrollment son amplios, la CA lo emite sin preguntar nada.

Para que ESC1 sea explotable, se tienen que cumplir estas condiciones al mismo tiempo:

La plantilla tiene habilitado "Supply in the request" en el SAN
La plantilla permite Client Authentication en los EKUs
No requiere Manager Approval
Usuarios sin privilegios tienen permiso de Enroll (Domain Users, Authenticated Users)

Si falta alguna de esas condiciones, el ataque no funciona o se complica significativamente.


Explotación de ESC1

Entorno del laboratorio

ComponenteDetalle
Domain ControllerDC1-COFIACORE (Windows Server 2019)
CAcofiacore-DC1-COFIACORE-CA
AtacanteKali Linux + Certipy v5.0.2
Usuario utilizadowladimir.hernandez (usuario del dominio sin privilegios)
ObjetivoObtener acceso como Administrador del dominio
HerramientasCertipy v5.0.2, NetExec (nxc)

El laboratorio cuenta con tres usuarios de dominio estándar sin privilegios: wladimir.hernandez, david.soto y hugo.sandoval. Ninguno tiene permisos administrativos. La demostración será desde wladimir.hernandez para mostrar que cualquier cuenta de dominio es suficiente para ejecutar el ataque.

Para esta demostración usaremos Certipy desde Kali Linux. Existen otras herramientas que pueden lograr el mismo resultado dependiendo del entorno, como Certify en Windows o ForgeCert, pero para este laboratorio trabajaremos con Certipy.


Paso 1: Enumerar plantillas vulnerables

Lo primero es identificar qué plantillas tienen la configuración vulnerable. Certipy consulta LDAP y evalúa los atributos de cada plantilla automáticamente.

bash
certipy-ad find \ -u wladimir.hernandez@cofiacore.local \ -p 'P@ssw0rd123!' \ -dc-ip 192.168.229.10 \ -stdout

En la salida, Certipy devuelve el detalle de cada plantilla. Los campos que confirman que ESC1 es explotable en este entorno serían:

Enrollee Supplies Subject: True — El usuario puede especificar el SAN libremente
Client Authentication: True — El certificado sirve para autenticarse en el dominio
Requires Manager Approval: False — La CA emite de inmediato, sin intervención humana
User Enrollable Principals: Cualquier usuario del dominio puede solicitar el certificado

Certipy confirma las cuatro condiciones de explotabilidad en la plantilla ESC1-Vulnerable

Esas cuatro condiciones juntas son lo que hace explotable esta plantilla. Si cualquiera de ellas cambia, el ataque se complica o no funciona.


Paso 2: Solicitar un certificado como Administrador

Con la plantilla identificada, solicitamos un certificado especificando el UPN del Administrador en el campo SAN. Acá es donde ocurre el abuso real: le estamos diciendo a la CA que emita un certificado a nombre de Administrador, usando las credenciales de wladimir.hernandez.

bash
certipy-ad req \ -u wladimir.hernandez@cofiacore.local \ -p 'P@ssw0rd123!' \ -ca 'cofiacore-DC1-COFIACORE-CA' \ -template 'ESC1-Vulnerable' \ -upn 'administrador@cofiacore.local'

Certipy solicita un certificado para administrador@cofiacore.local usando credenciales de wladimir.hernandez

La CA acaba de firmar un certificado que identifica a wladimir.hernandez como el Administrador del dominio.


Paso 3: Autenticarse con el certificado

Con el archivo PFX obtenido, nos autenticamos vía PKINIT. Kerberos recibe el certificado, lo valida contra la CA que lo firmó, y entrega un TGT para Administrador.

bash
certipy-ad auth \ -pfx administrador.pfx \ -dc-ip 192.168.229.10

Certipy auth obtiene el TGT y el hash NTLM del Administrador vía PKINIT

El resultado es el hash NTLM del Administrador. Desde aquí hay varias rutas posibles, la más directa es el volcado de credenciales del dominio.


Paso 4: Volcado de credenciales del dominio

Con el hash NTLM del Administrador usamos NetExec para volcar el NTDS, que contiene los hashes de todas las cuentas del dominio.

bash
nxc smb 192.168.229.10 \ -u administrador \ -H 6a86228f2c48d4c0e225b97877e69a6d \ --ntds

NetExec volcando el NTDS completo del Domain Controller con el hash del Administrador

Un detalle importante: en Windows Server 2019, NetExec advierte que el volcado del NTDS puede crashear el DC. En un entorno de producción real hay que evaluar ese riesgo antes de ejecutarlo.

El resultado muestra los hashes de todas las cuentas del dominio: Administrador, krbtgt, usuarios del dominio y cuentas de equipos. Con el hash de krbtgt un atacante puede crear Golden Tickets y mantener acceso indefinido aunque se cambien todas las contraseñas.


Detección de ESC1

Un aspecto que no suele mencionarse en otros análisis sobre la detección de ESC1 es que la auditoría de AD CS no viene habilitada por defecto, al menos en Windows Server 2019. Durante nuestras pruebas ejecutamos el ataque completo y observamos que el Security Log no registraba ningún evento relacionado.

Sin habilitar previamente esta auditoría, los eventos asociados a la solicitud y emisión de certificados por parte de la CA simplemente no se generan, lo que provoca que el ataque pueda pasar completamente desapercibido. Por ello, antes de definir reglas de detección o indicadores de compromiso, es fundamental verificar que el registro de eventos correspondiente se encuentre correctamente habilitado.

Habilitar auditoría de certificados

Paso 1 — Habilitar auditoría en la CA

En el servidor que actúa como Autoridad de Certificación (CA), abrir la consola de administración de AD CS:

certsrv.msc → Propiedades de la CA → pestaña Auditoría

Habilitar las siguientes opciones:

Emitir y administrar solicitudes de certificados
(Opcional) Revocar certificados

Finalmente, aplicar y guardar los cambios.

Pestaña Auditoría de la CA en certsrv.msc con opciones de registro habilitadas

Paso 2 — Habilitar auditoría de seguridad mediante GPO

En el servidor donde se encuentra instalado AD CS, habilitar la auditoría avanzada siguiendo la siguiente ruta:

1.Configuración del equipo
2.Configuración de Windows
3.Configuración de seguridad
4.Configuración de directiva de auditoría avanzada
5.Acceso a objetos
6.Auditar servicios de certificación

Configurar la política para registrar:

Correcto
Error

GPO de auditoría avanzada configurada para registrar eventos de servicios de certificación

Paso 3 — Aplicar las políticas configuradas

Una vez habilitada la auditoría, aplicar las políticas y reiniciar el servicio de certificados:

powershell
gpupdate /force net stop certsvc net start certsvc

Paso 4 — Verificación

Para comprobar que la auditoría quedó correctamente habilitada, revisar el siguiente registro en el Event Viewer:

Event Viewer → Registros de Windows → Seguridad

Los eventos más relevantes para la detección de actividad asociada a certificados son:

4886 — Solicitud de certificado recibida
4887 — Certificado emitido

Event Viewer mostrando eventos 4886 y 4887 tras habilitar la auditoría en la CA

Implementación en Wazuh

En nuestro laboratorio implementamos esta lógica de detección en Wazuh como un ejemplo práctico de monitoreo de abuso de certificados. La regla distingue dos escenarios principales:

CRITICAL — cuando el SAN del certificado emitido corresponde a una cuenta privilegiada como Administrador
MEDIUM-HIGH — cuando el SAN corresponde a otro usuario del dominio distinto al solicitante

Reglas de detección implementadas en Wazuh para alertas CRITICAL y MEDIUM-HIGH de abuso de AD CS

Hoy en día es muy fácil encontrar reglas para este tipo de detección en distintos SIEM usando su propio lenguaje: Splunk con SPL, Microsoft Sentinel con KQL, o adaptando reglas Sigma públicas. Incluso algunos simuladores de adversario ya incluyen casos de uso para este tipo de ataque.

Sin embargo, lo realmente importante no es la herramienta utilizada, sino comprender la lógica detrás de la detección. La efectividad de cualquier regla dependerá del contexto específico de cada organización: cómo se identifican las cuentas privilegiadas, qué plantillas de certificados están en uso y cuál es el comportamiento considerado legítimo dentro del entorno.

Sin ese conocimiento contextual, una regla genérica copiada de otra implementación probablemente terminará generando falsos positivos o, en el peor de los casos, permitirá que una actividad maliciosa pase inadvertida.

Una condición previa que no hay que olvidar: si tu SIEM no está recolectando los eventos del servidor CA, cualquier regla que configures no va a detectar nada. El primer paso siempre es verificar que los eventos se estén generando y llegando al SIEM.

Lo que dispara la alerta es siempre la misma lógica: la discrepancia entre quien solicitó el certificado y el UPN del certificado emitido.


Mitigación e impacto operacional

Todas las medidas descritas en esta sección se aplican directamente sobre Active Directory y la Autoridad de Certificación (CA), sin necesidad de herramientas de terceros. Las mitigaciones se presentan ordenadas de menor a mayor impacto operacional.

Mitigación 1 — Deshabilitar "Supply in the request"

Esta es la mitigación principal y la de menor impacto operacional.

La vulnerabilidad se encuentra en la pestaña Subject Name de la plantilla de certificado. Mientras la opción esté configurada como "Supply in the request", cualquier usuario puede definir libremente el Subject Alternative Name (SAN).

En certsrv.msc → Plantillas de certificado → clic derecho sobre la plantilla → Propiedades → pestaña Nombre del sujeto

Modificar la configuración de "Proporcionado por el solicitante" a "Construido a partir de esta información de Active Directory".

Plantilla con Subject Name cambiado de Supply in the request a Construido a partir de esta información de Active Directory

Después de aplicar el cambio, al ejecutar nuevamente el escaneo la plantilla ya no debe aparecer como vulnerable:

bash
certipy-ad find \ -u wladimir.hernandez@cofiacore.local \ -p 'P@ssw0rd123!' \ -dc-ip 192.168.229.10 \ -stdout

Certipy rescan confirma que la plantilla ya no aparece como vulnerable tras la mitigación

La plantilla deja de aparecer en la sección de vulnerabilidades del escaneo, por lo que ESC1 se considera mitigado.

Impacto operacional: Muy bajo. El único impacto potencial se da en aquellos casos donde algún proceso legítimo dependía de la especificación manual de SANs. Antes de aplicar el cambio, es recomendable revisar los eventos 4887 de los últimos 90 días.

Mitigación 2 — Deshabilitar plantillas no utilizadas

Si una plantilla no presenta uso real en el entorno, la medida más sencilla es retirarla de la publicación en la CA.

En certsrv.msc → Plantillas de certificado → clic derecho sobre la plantilla → Eliminar

Esto no elimina la plantilla del Active Directory, únicamente la despublica de la CA. Antes de aplicar este cambio, verificar la actividad de los últimos 90 días:

powershell
Get-WinEvent -ComputerName DC1-COFIACORE ` -FilterHashtable @{ LogName = 'Security' Id = 4887 StartTime = (Get-Date).AddDays(-90) } | Select-Object -ExpandProperty Message | Select-String 'CertificateTemplate'

PowerShell verificando la actividad de la plantilla en los últimos 90 días con Get-WinEvent

Impacto operacional: Nulo, siempre que la plantilla no presente actividad en el entorno.

Mitigación 3 — Restringir permisos de Enrollment

Otra medida clave consiste en limitar el permiso de Enroll a los usuarios o grupos estrictamente necesarios. Es importante evitar asignaciones amplias, como Domain Users o Authenticated Users, y restringir el uso de la plantilla únicamente a los grupos que realmente lo requieren.

En certsrv.msc → Plantillas de certificado → clic derecho → Propiedades → pestaña Seguridad

Remover el permiso Inscribir (Enroll) para grupos amplios como Usuarios del dominio.

Pestaña Seguridad de la plantilla: removiendo el permiso Enroll de Domain Users

Impacto operacional: Bajo a medio. Es necesario identificar previamente qué usuarios o servicios dependen de la plantilla antes de aplicar la restricción.

Mitigación 4 — Habilitar Manager Approval

Esta medida introduce un control adicional en el flujo de emisión de certificados, de modo que toda solicitud queda en estado pendiente hasta que un administrador de la CA la apruebe manualmente. Esto impide que un atacante pueda completar el proceso de forma totalmente automatizada.

En certsrv.msc → Plantillas de certificado → clic derecho → Propiedades → pestaña Requisitos de emisión

Habilitar la opción "Aprobación del administrador de certificados de CA".

Manager Approval habilitado en la pestaña Requisitos de emisión de la plantilla

Impacto operacional: Medio. Elimina la inmediatez en la obtención de certificados. Cualquier flujo de auto-inscripción o despliegue automatizado de servicios requerirá intervención humana.

Resumen de mitigaciones

MitigaciónImpacto operacionalPrioridad
Deshabilitar plantillas no usadasNingunoInmediata
Deshabilitar Supply in the requestMuy bajoInmediata
Restringir permisos de EnrollmentBajo a medioPlanificada
Habilitar Manager ApprovalMedioSelectiva
Nota: Deshabilitar "Supply in the request" mitiga específicamente ESC1. Sin embargo, para una postura de seguridad más completa, se recomienda complementar esta medida con la restricción de permisos de enrollment y la revisión del resto de plantillas mediante herramientas como Certipy.
Las vulnerabilidades en AD CS rara vez se presentan de forma aislada, por lo que es habitual que existan múltiples configuraciones débiles encadenables dentro del entorno.

Conclusión

ESC1 evidencia un punto crítico: no es necesario explotar una vulnerabilidad de software para comprometer un dominio completo. Una única configuración incorrecta en una plantilla de certificados puede ser suficiente para habilitar un escenario de escalamiento de privilegios.

Lo descrito en este artículo representa solo el punto de partida. En la siguiente publicación abordaremos ESC2, donde el problema ya no se centra en el SAN, sino en los EKUs (Extended Key Usage). El impacto es equivalente, aunque el vector de abuso es distinto.

W

Wladimir Hernandez

CEO

CEO de Cofiacore con más de 10 años de experiencia en ciberseguridad ofensiva y defensiva. Especialista en pruebas de penetración web, análisis de vulnerabilidades y operaciones de Red Team.

OSCP
CEH
BTL1
eWPT
Compartir análisis técnico

Inteligencia Relacionada

Explorar todo