
Certighost POC
This is a proof-of-concept tool to demonstrace CVE-2026-54121 a.k.a Certighost. Read here https://gist.github.com/H0j3n/a5ef2609b5f2944ac2390a191a534c26 for the detailed analysis.
The proof of concept is a self-contained Python script. It requires impacket, cryptography, pyasn1, asn1crypto, and dnspython.
sudo pip install --break-system-packages git+https://github.com/fortra/impacket.git cryptography pyasn1 asn1crypto pycryptodome dnspython
Run as root because the rogue LDAP and SMB services listen on high privileged ports 389 and 445.
sudo python3 certighost.py -d playground.local -u lowpriv -p 'Password1234' --dc-ip 192.168.1.10
Successful execution writes the target certificate (.pfx) and Kerberos cache (.ccache) to the current directory.
GHOSTABCDEFGH$) or reuse one passed via --computer-name.cdc attribute pointing to a controlled IP (via --listener; optional, auto-detected if omitted) plus an rmd attribute carrying the target DC's DNS name.STATUS_NOLOGON_SERVER_TRUST_ACCOUNT issue. certighost now ships a proper in-script hotpatch of the rogue SMB NetLogon path (setting the E bit 0x20 alongside the K bit 0x800 in ParameterControl, per MS-NRPC 2.2.1.4.15), so the exploit works against a CA hosted on a Domain Controller without worrying about installing a different / forked Impacket version.EDITF_ATTRIBUTESUBJECTALTNAME2 / ESC6), the certificate request now sets the SAN:dns identity to the target DC's DNS name (rmd_value) instead of the rogue computer's, avoiding KDC_ERR_CLIENT_NAME_MISMATCH at the PKINIT step. On build-from-AD templates the request SAN is ignored, so the change is a safe no-op.