Problema
En entornos con Active Directory Certificate Services (AD CS) es frecuente encontrar configuraciones que permiten a cualquier usuario del dominio solicitar certificados con atributos que pueden usarse para obtener tickets Kerberos falsificados. Las opciones ESC9, ESC10, ESC15 y ESC16 son variantes de este comportamiento: habilitan la inserción de Subject Alternative Name (SAN) controlado por el solicitante y desactivan controles de mapeo de claves. Cuando están activas, un atacante sin credenciales puede generar un certificado que le otorga privilegios de Domain Admin mediante técnicas de certifried o Kerberoasting.
El problema no se soluciona con parches de Windows porque la vulnerabilidad reside en la configuración del propio CA, no en el código del servicio. Por eso, incluso en dominios con los últimos parches, la exposición persiste mientras la política de registro sea la equivocada.
Causa
Las causas habituales son:
-
Política de registro “EditFlags” con el bit
EDITF_ATTRIBUTESUBJECTALTNAME2activado
Este flag permite que el solicitante añada entradas SAN arbitrarias. Es útil en algunos escenarios de emisión automatizada, pero abre la puerta a la inserción de nombres de servicio controlados. -
Desactivación de “EnableKeyCounting”
Cuando el contador de claves está deshabilitado, el CA no verifica que la clave pública del certificado coincida con la que se usó para la solicitud, facilitando el key‑reuse attack. -
Plantillas de certificado mal diseñadas
Plantillas que conceden derechos de inscripción a grupos amplios (por ejemplo, “Domain Users”) y que además habilitan los flags anteriores crean un vector de escalada directo. -
Falta de auditoría de cambios en la configuración del CA
En muchos dominios la única persona que revisa la configuración es el instalador inicial. Sin alertas de registro, los cambios inadvertidos pasan desapercibidos.
Solución
La estrategia se divide en tres fases: detección, corrección y endurecimiento.
1. Detección rápida
Un comando de certutil permite leer los valores de registro del CA sin necesidad de privilegios especiales:
certutil -config "CA_NAME" -getreg "Policy\EditFlags"
certutil -config "CA_NAME" -getreg "Policy\EnableKeyCounting"
- Si el resultado de
EditFlagscontiene el bit0x00000020(EDITF_ATTRIBUTESUBJECTALTNAME2), la CA está vulnerable a ESC9/ESC10. - Si
EnableKeyCountingdevuelve0, el contador está desactivado, lo que habilita ESC15/ESC16.
2. Corrección de los flags
Para desactivar la inserción de SAN arbitrario y volver a habilitar el contador de claves, ejecuta:
certutil -config "CA_NAME" -setreg "Policy\EditFlags" 0
certutil -config "CA_NAME" -setreg "Policy\EnableKeyCounting" 1
Estos cambios se aplican inmediatamente, pero es buena práctica reiniciar el servicio de CA para asegurar que la nueva configuración se cargue:
net stop certsvc
net start certsvc
3. Revisión de plantillas
- Abre la consola Certificate Templates (
certtmpl.msc). - Revisa cada plantilla que tenga asignada la CA.
- Limita la inscripción a grupos estrictamente necesarios (p. ej., “Domain Controllers” o “Enterprise Admins”).
- Desmarca la opción Subject Alternative Name en la pestaña Subject Name cuando no sea indispensable.
4. Endurecimiento continuo
- Habilita auditoría de cambios en
HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration. - Configura alertas de seguridad en el SIEM para cualquier escritura en
Policy\EditFlagsoPolicy\EnableKeyCounting. - Programa una tarea de PowerShell semanal que ejecute los comandos de detección y registre los resultados.
Cuándo aplicar esta solución
Aplica la guía siempre que:
- La infraestructura incluya al menos un servidor con el rol Active Directory Certificate Services.
- Se sospeche de escaladas de privilegio sin trazas de credenciales comprometidas.
- Los registros de auditoría muestren solicitudes de certificado con SAN inusuales.
No es necesario si:
- La CA está configurada exclusivamente para emisión interna con plantillas restringidas y los flags ya están en los valores seguros (
EditFlags = 0,EnableKeyCounting = 1). - El entorno no permite que usuarios estándar soliciten certificados (p. ej., solo cuentas de servicio con credenciales de alta confianza).
Código
# Detectar flags vulnerables
certutil -config "MyCA" -getreg "Policy\EditFlags"
certutil -config "MyCA" -getreg "Policy\EnableKeyCounting"
# Desactivar SAN arbitrario y habilitar contador de claves
certutil -config "MyCA" -setreg "Policy\EditFlags" 0
certutil -config "MyCA" -setreg "Policy\EnableKeyCounting" 1
# Reiniciar servicio de CA
net stop certsvc
net start certsvc
Verificación
-
Ejecuta nuevamente los dos comandos de detección.
EditFlagsdebe devolver0.EnableKeyCountingdebe devolver1.
-
Intenta generar un certificado con SAN controlado usando Certipy o
certreq. La solicitud debe fallar con error de política. -
Revisa el registro de eventos del CA (
Event Viewer → Applications and Services Logs → Microsoft → Windows → CertificateServicesClient‑AutoEnrollment). No deben aparecer eventos de error relacionados con SAN.
Notas adicionales
- En entornos con múltiples CAs, repite la detección en cada uno; la configuración no se replica automáticamente.
- Algunas plantillas heredadas pueden contener el flag
Subject Alternative Namemarcado a nivel de plantilla; aunque el CA tengaEditFlagsdesactivado, la plantilla puede sobrescribir la política. Verifícalo siempre. - Si utilizas Certipy, el módulo
certipy findmuestra automáticamente los valores deEditFlagsyEnableKeyCountingen sus resultados, lo que simplifica auditorías masivas. - Después de aplicar los cambios, actualiza la documentación interna del dominio indicando la configuración segura recomendada; evita que futuros despliegues vuelvan a habilitar los flags por accidente.