AD CS (Active Directory Certificate Services)
AD CS es la PKI de Microsoft: emite certificados que sirven para autenticar en el dominio (un certificado válido se puede canjear por un TGT vía PKINIT). El problema es que la autorización de quién puede pedir qué certificado y con qué identidad se configura en plantillas (templates) y permisos que, por defecto o por descuido, suelen ser laxos. La investigación “Certified Pre-Owned” (SpecterOps) catalogó una familia de escaladas —ESC1 a ESC16+— que convierten un usuario normal en Domain Admin. Hoy es uno de los caminos a DA más fiables y, a menudo, silenciosos.
flowchart LR
A["Usuario de dominio"] -->|"CSR con SAN = Administrador (ESC1)"| CA["AD CS"]
CA -->|"emite el certificado"| A
A -->|"autentica con el cert (PKINIT)"| DC[Domain Controller]
DC -->|"TGT como Administrador"| A
Modelo de amenaza
Sección titulada «Modelo de amenaza»Un certificado es una credencial de autenticación de larga duración y difícil de revocar. Si un atacante consigue que la CA le emita un certificado en el que figura como otro usuario (p. ej. Administrator), puede autenticarse como ese usuario con PKINIT y obtener su TGT. Peor: los certificados sobreviven a cambios de contraseña, así que son también persistencia. La raíz es casi siempre una plantilla mal configurada o permisos de inscripción/gestión demasiado abiertos.
Red Team
Sección titulada «Red Team»Enumeración
Sección titulada «Enumeración»# Certipy (Linux) — el estándarcertipy find -u user@dominio -p pass -dc-ip <DC> -vulnerable -stdout# Certify (Windows)Certify.exe find /vulnerableBusca CAs, plantillas, quién puede inscribirse (Enrollment Rights) y las condiciones que disparan cada ESC.
Las escaladas clave (ESC)
Sección titulada «Las escaladas clave (ESC)»- ESC1 — plantilla que permite ENROLLEE_SUPPLIES_SUBJECT (el solicitante elige el SAN), con EKU de autenticación de cliente y permiso de inscripción para usuarios bajos → pides un cert “como Administrator”.
certipy req -u user@dominio -p pass -ca CA -template VulnTemplate -upn administrator@dominiocertipy auth -pfx administrator.pfx -dc-ip <DC> # PKINIT -> TGT de Administrator- ESC2 — plantilla con EKU
Any Purposeo sin EKU → el cert vale para autenticar como cualquiera. - ESC3 — abuso del Certificate Request Agent (enrollment agent) para pedir en nombre de otros.
- ESC4 — tienes permisos de escritura sobre la plantilla → la reconfiguras para hacerla vulnerable (ESC1) y luego la explotas.
- ESC6 — flag
EDITF_ATTRIBUTESUBJECTALTNAME2en la CA → puedes añadir un SAN arbitrario a cualquier solicitud. - ESC7 — permisos de gestión de la CA (ManageCA/ManageCertificates) → apruebas solicitudes o habilitas ESC6.
- ESC8 — Web Enrollment (HTTP) sin EPA → NTLM relay de una cuenta (incluido un DC coaccionado) a
certsrv→ certificado de esa cuenta → su TGT (ver NTLM Relay). Cadena clásica: PetitPotam(DC) → relay ESC8 → cert de DC → DCSync. - ESC9/ESC10 — mapeos débiles de certificado a cuenta (
szOID/altSecurityIdentities, StrongCertificateBindingEnforcement) → impersonación. - ESC11 — relay a la interfaz RPC (ICPR) de la CA.
- ESC13 — plantilla ligada a un grupo con derechos (OID group link).
Persistencia por certificado
Sección titulada «Persistencia por certificado»- Robar la clave privada de la CA (
certipy ca -backup/ THEFT) → forjar certificados para cualquiera (Golden Certificate) → persistencia que sobrevive a resets de contraseña. - Guardar un PFX de una cuenta privilegiada: válido hasta que caduque/revoque el certificado.
Herramientas
Sección titulada «Herramientas»- Certipy (Linux) — enumeración, explotación de todos los ESC, PKINIT, forja.
- Certify + Rubeus (Windows) — find, request, y PKINIT→TGT.
- ntlmrelayx —adcs — ESC8/relay a Web Enrollment.
- PKINITtools — pedir TGT con certificado.
Impacto
Sección titulada «Impacto»De usuario sin privilegios a Domain Admin vía un certificado de cuenta privilegiada, y persistencia de dominio robando la clave de la CA. ESC8 + coerción de DC es compromiso total; ESC1 es, a menudo, escalada directa en un solo paso.
Blue Team
Sección titulada «Blue Team»Detección
Sección titulada «Detección»- Solicitudes de certificado con SAN/UPN de otra cuenta (especialmente privilegiada): eventos de AD CS 4886/4887 (request/issue) con SAN inusual.
- Autenticaciones PKINIT (4768 con certificado) para cuentas que no suelen usar certificados.
- Relay a certsrv (ESC8): peticiones HTTP de inscripción desde una cuenta de máquina/DC; coerción previa.
- Cambios en plantillas (escritura) y en la configuración de la CA.
Telemetría
Sección titulada «Telemetría»Habilita la auditoría de AD CS (eventos 4886/4887/4899/4900), correlaciona SAN↔solicitante, y monitoriza cambios de plantilla/flags de CA. Certipy/PingCastle para auditar tú mismo.
Hardening
Sección titulada «Hardening»- Revisa y corrige plantillas: quita
ENROLLEE_SUPPLIES_SUBJECTsalvo donde sea imprescindible; restringe EKUs y permisos de inscripción; exige aprobación del manager (CA manager approval). - Quita el flag
EDITF_ATTRIBUTESUBJECTALTNAME2(ESC6). - EPA + HTTPS en Web Enrollment o deshabilítalo (ESC8); fuerza firma/channel binding.
- Activa StrongCertificateBindingEnforcement (mitiga ESC9/ESC10).
- Restringe quién gestiona la CA (ESC7); protege la clave privada de la CA (HSM).
Respuesta
Sección titulada «Respuesta»Revoca los certificados maliciosos (y recuerda: un cert emitido sigue valiendo hasta revocar/caducar → puede requerir rotar más). Si la clave de la CA se robó, reconstruye la PKI. Corrige la plantilla/flag concreto y, si hubo DCSync, rota krbtgt ×2.
CVEs y casos reales
Sección titulada «CVEs y casos reales»- “Certified Pre-Owned” (Will Schroeder & Lee Christensen, SpecterOps, 2021) — la investigación que definió los ESC.
- ESC8 + PetitPotam (CVE-2021-36942) — cadena pública de dominio completo, parcheada/mitigada por Microsoft.
- CVE-2022-26923 (Certifried) — escalada a DA creando una cuenta de máquina y pidiendo un cert con dNSHostName manipulado.
- Certipy aparece en informes de red team y en intrusiones reales como atajo a DA cuando AD CS está mal configurado.
Checklist de prueba
Sección titulada «Checklist de prueba»-
certipy find -vulnerable— ¿qué ESC están presentes? - ESC1: plantilla con SAN suministrado + client auth + enroll para low-priv
- ESC2/ESC3: Any Purpose / enrollment agent
- ESC4: escritura sobre plantilla (reconfigurar a vulnerable)
- ESC6:
EDITF_ATTRIBUTESUBJECTALTNAME2activo - ESC7: permisos ManageCA/ManageCertificates
- ESC8: Web Enrollment HTTP sin EPA → relay (coerce DC)
- Robo de clave de CA → Golden Certificate (persistencia)