Add certighost module - #1332
Conversation
|
@NeffIsBack Have fun 😄 |
Me:
|
|
Jesus 😭 |
Actually we had just that, including functions for fileless command execution, directly connecting back to the attacker machine. However we removed it a couple of months ago because it never has been used. If we would need something like that we can just revert the commit. |
Yeah I know, we can revert. That opens new issues tho, should we run nxc as root again ? Or set the capability directly when installing the tool ? Adding it back re-opens few questions :/ |
|
Naa never run nxc as root. If we need that we just try to start the server and if it crashes we alert the user. |
|
So I have looked at the module with Azox, both the SMB and LDAP server are custom implementations. So we don't have to integrate back the impacket.smbserver/ldapserver. We still have to check for the capability which is what Azox does. Sooooo should be okay ;D |
| domain_nb=dns_to_netbios(connection.domain), | ||
| ) | ||
|
|
||
| def check_bind_capabilities(self): |
There was a problem hiding this comment.
What's the issue ? The capability check ? Nxc will have to be able to listen on 445
There was a problem hiding this comment.
no subprocess allowed
This haha. @azoxlpf please remove it. Just try to launch the server and catch it if we don't have privs. At the end of the day ntlmrelay does the same thing
|
There's a lot of functions and classes in here, are any useful outside of this module, or are any redundant? I know you disclosed using AI in the creation of it, but this seems fully AI generated. Did you check if any of these functions already exist? |
Nooo, AI was only used to port the original poc into an nxc module, so most of the code comes from there. The number of classes is because these functions don’t exist in nxc/impacket (rogue LDAP server, fake LSA, Netlogon oracle, ICertRequest), so they had to be implemented from scratch |
|
@Marshall-Hallenbeck After digging through the impacket code, you were right, a couple of classes from the original poc already exist in impacket, so I swapped them out and shaved off a few lines ahaha |
|
Hi, Thank you for this module. I have ADCS installed on a DC (10.0.0.200) in my lab. In my testing I observe the below: NXC PR 1332 cloned yesterday claims that my ADCS instance is not vulnerable to Certighost. Attempting to abuse Certighost using NXC PR 1332 fails due to "cdc-chase requires a CA on a member server". Using the original POC abusing Certighost works... How come NXC claims that my ADCS instance is not vulnerable when it seems to be? How come NXC claims that ADCS instances installed on DCs cannot be abused when it does not seem to be an issue? Thanks! |
|
Regarding the CA on the DC, a PR has been merged on Impacket and on the original poc enabling exploitation in that case, I've just pushed the fix to the module, thanks for your feedback!
However, regarding your screenshot showing that |
Signed-off-by: Azox <213314124+azoxlpf@users.noreply.github.com>




Description
Adds the
certighostLDAP module, which exploits CVE-2026-54121 (AD CS cdc-chase enrollment redirection) to obtain a Domain Controller certificate.Ported from the public PoC:
The module starts rogue
SMB/LDAP listeners, relays NTLM to the real DC viaNetlogon, and saves the issued.pfx.AI disclosure: Claude Opus 4.6 was used to structure the PoC port into a NetExec module.
Type of change
Insert an "x" inside the brackets for relevant items (do not delete options)
Setup guide for the review
Check whether the ADCS server is vulnerable :
run
nxc ldap $DC_IP -u "$USER" -p "$PASSWORD" -M certighost -o L="$ATTACKER_IP"Screenshots (if appropriate):
With user :
With computer account :
Specific target :
Checklist:
Insert an "x" inside the brackets for completed and relevant items (do not delete options)
poetry run ruff check ., use--fixto automatically fix what it can)tests/e2e_commands.txtfile if necessary (new modules or features are required to be added to the e2e tests)