Security advisoryView advisory
VulnerabilityCriticalMitigatedUpdated Jul 27, 2026

Certighost CVE-2026-54121: Public Exploit Turns a Domain User Into a Domain Controller

Microsoft shipped the fix on July 14. The researchers' own analysis shows it sits behind a servicing feature gate, which is the part most coverage has skipped.

Emanuel De AlmeidaJul 27, 2026, 11:00 PM10 min read
Severity
Critical
Status
Mitigated
Entity
Active Directory Certificate Services
Confirmed by
Microsoft advisory for CVE-2026-54121 and the researchers' writeup of July 24, 2026

Certighost, CVE-2026-54121, now has a public working exploit. Researchers H0j3n and Aniq Fakhrul published their technical analysis and proof-of-concept on July 24, 2026, showing how a low-privileged Active Directory user could obtain a certificate from Active Directory Certificate Services that authenticates as a domain controller, then use it to pull the krbtgt secret and own the domain. Microsoft patched the flaw in the July 2026 security updates on July 14.

The uncomfortable part is not the exploit itself but the prerequisites, which are all defaults. An ordinary domain account, a machine account created under the default quota, and a default certificate template were enough in the researchers' tested configuration.

Key takeaways

  • A low-privileged domain user could reach full domain compromise, with no administrative credentials required at any point.
  • The flaw sits in an AD CS enrollment fallback the researchers call a chase, which the CA followed to a host the requester chose.
  • Microsoft shipped the fix on July 14, 2026. The exploit went public ten days later, on July 24.
  • The researchers found the new validation sits behind a servicing feature gate, so applying the update is necessary but the protected path is conditional.
  • An interim workaround exists for estates that cannot patch, but the researchers say it is untested in production.

Affected

Vendors
Microsoft
Products
Active Directory Certificate ServicesWindows Server Enterprise Certification Authority
Geography
Global
Industry
All sectors running Active Directory
CVEs
CVE-2026-54121

What was released

On July 24, 2026, researchers H0j3n and Aniq Fakhrul published a full technical writeup of Certighost together with a working proof-of-concept exploit. Microsoft had already fixed the underlying flaw ten days earlier, in the July 2026 security updates.

Their summary is blunt. Certighost is an Active Directory Certificate Services vulnerability that allowed a low-privileged domain user to impersonate a domain controller and achieve domain compromise in the tested AD CS configuration.

That last qualifier matters and the researchers repeat it. The chain was demonstrated in a specific lab setup rather than proven universal. It was, however, a lab built entirely from defaults: a forest at Windows Server 2016 functional level or later, an Enterprise CA, the default machine account quota of 10, and the default Machine certificate template with its stock access control list.

How Certighost CVE-2026-54121 works

Active Directory Certificate Services is Microsoft's public key infrastructure for Windows domains. It issues certificates that a client can present to the Key Distribution Center to obtain Kerberos credentials, so a certificate is effectively a signed statement about who you are.

The flaw lives in an enrollment fallback the researchers call a chase. In some cross-domain-controller enrollment scenarios, the certification authority performs a second directory lookup, and two request attributes steer it: cdc names the host the CA should contact, and rmd names the principal it should look up there.

The missing check was simple. The CA followed the host supplied in cdc without first establishing that it was actually a domain controller. An attacker could stand up their own LDAP and LSA services, point the CA at that machine, and return directory data belonging to a real domain controller. The CA then used those attacker-supplied values, including the object SID and DNS hostname, when building the certificate it issued.

One detail explains why the CA accepted the rogue endpoint at all. A machine account created under the default ms-DS-MachineAccountQuota setting is a valid domain principal, which was enough to satisfy the authentication checks the CA performed before continuing.

Microsoft's own wording

An authenticated attacker could manipulate attributes associated with a machine account and obtain a certificate from AD CS that allows authentication as that machine via PKINIT.

From certificate to krbtgt

Holding a certificate that authenticates as a domain controller is not the end of the chain, it is the pivot. The researchers' proof-of-concept authenticates through PKINIT as the targeted domain controller, saves the resulting Kerberos credentials to a credential cache file, and extracts the account's NT hash.

What follows is standard post-exploitation. A domain controller account holds directory replication rights, so those credentials permit a DCSync operation, which requests account secrets from the directory. The researchers demonstrated retrieving the krbtgt account credentials, the key material behind every Kerberos ticket in the domain.

At that point the domain is not compromised in a recoverable sense, it is owned. Recovering from krbtgt exposure means a double rotation of that account and a forced re-issuance of every ticket in the environment, which is disruptive enough that most organisations plan it as an incident rather than a maintenance task.

Which environments are exposed

The exposure is narrower than the impact suggests, but not by much. Several conditions had to hold together in the demonstrated chain:

  • An Enterprise certification authority present in the forest
  • A forest functional level of Windows Server 2016 or later
  • Any authenticated domain account, with no administrative rights required
  • The default ms-DS-MachineAccountQuota of 10, letting that account create a machine account
  • The default Machine certificate template with its stock access control list

None of those is exotic. AD CS is widely deployed, often installed years ago for one specific purpose and left running since. The machine account quota default has been criticised for years precisely because it hands ordinary users a domain principal on request, and it remains at 10 in a large number of estates.

The researchers are careful to scope their claim to the configuration they tested rather than asserting universality. That caution is appropriate and should not be read as reassurance: the tested configuration was assembled from Microsoft defaults, not from an unusual setup.

What Microsoft changed, and the gate worth knowing about

The July update adds validation to the CA-side request path. Before continuing a chase, the CA now checks that the hostname supplied in cdc resolves to a genuine domain controller computer object in the directory, rejecting IP literals and malformed values along the way, and it compares the resolved object's SID against the requester's. A failed check sends the request down an error path instead of continuing.

There is a caveat that mainstream coverage has not carried, and it comes from the researchers' own binary analysis. The new validation sits behind a servicing feature gate. The patched build retains a legacy branch that is reached when that gate is not enabled, and the researchers state plainly that the protection applies when the gate and its validation path are active, noting that the feature state mattered for their own lab validation.

The practical reading is not that the patch is ineffective. It is that installing the update and confirming the protection is in force are two different actions, and only the first is visible from a patch management console.

What to do now

Patch the certificate authority servers with the July 2026 security updates. That is the fix, and with a public exploit in circulation it should not wait for the next maintenance window.

For estates that genuinely cannot patch immediately, BleepingComputer reports the researchers offering an interim step: disabling the optional chase fallback on the CA. The same reporting carries their caveat, which deserves equal weight. It is a temporary mitigation that has not been fully tested in production environments, so treat it as a stopgap and test it before it touches anything that matters.

Beyond patching, two pieces of long-standing Active Directory hardening are worth revisiting because the demonstrated chain leaned on them. Reducing ms-DS-MachineAccountQuota to zero removes the ability for ordinary users to create machine accounts, which was the step that let the rogue endpoint pass as a valid domain principal. Tightening enrollment permissions on certificate templates limits who can submit requests to the CA in the first place. Neither is a substitute for the update, and neither should be changed without understanding what in your environment relies on the current setting.

What to hunt for, and what comes next

Retrospective hunting is warranted on any CA that was unpatched between mid-July and whenever the update landed. The signals are ordinary Windows events, which is the good news, and they are individually unremarkable, which is the bad news.

Windows event IDs to correlate
4741   Computer account created            -> flag when the creator is a non-privileged user
4886   Certificate services received request
4887   Certificate services approved request -> flag when the subject is a DC account
4662   Operation on directory object        -> flag replication GUIDs from non-DC sources

Also worth alerting on:
  outbound SMB/LDAP from the CA server to hosts that are not domain controllers
  PKINIT authentication for a DC account from an unexpected source address

Correlated in a short window, that sequence is the attack. Individually, each has legitimate explanations, which is why single-event alerting on any one of them tends to be abandoned for noise.

As for what comes next, the gap between patch and public exploit was ten days, which is short. AD CS has produced a steady run of named attack techniques over the past several years, and the underlying pattern here, a service trusting routing information supplied by the party making the request, is not unique to this code path.

Timeline

May 14, 2026
Reported to MicrosoftH0j3n and Aniq Fakhrul report the vulnerability to the Microsoft Security Response Center, which assigns the case the same day.
May 22, 2026
Case confirmedMicrosoft investigates and confirms the issue.
Jul 14, 2026
Patch releasedMicrosoft ships the fix as CVE-2026-54121 in the July 2026 Patch Tuesday updates.
Jul 24, 2026
Public disclosure and exploit releaseThe researchers publish the full technical writeup along with the certighost.py proof-of-concept.
Jul 27, 2026
Mainstream coverageBleepingComputer reports on the release, raising the profile of the exploit beyond the AD security community.

Impact & actions

A single authenticated domain account was enough to obtain a certificate authenticating as a domain controller, and from there to replicate the krbtgt secret. The privilege gap crossed in one chain is the largest available in an Active Directory environment.

Security: Complete loss of Active Directory trust boundaries. Certificate-based authentication and Kerberos are both undermined, and the attacker holds key material permitting forged tickets.

Privacy: Directory replication exposes credential material for every account in the domain, with downstream consequences for any system authenticating against it.

Recommended actions · Immediate urgency

  1. 1Apply the July 2026 security updates to all certificate authority servers as a priority
  2. 2Verify the new chase validation is active rather than assuming patch installation is sufficient
  3. 3Consider setting ms-DS-MachineAccountQuota to zero, after confirming nothing legitimate depends on it
  4. 4Review enrollment permissions on certificate templates, including the default Machine template
  5. 5Hunt retrospectively for machine account creation by non-privileged users correlated with CA issuance events
  6. 6Alert on directory replication requests from sources that are not genuine domain controllers

Technical details

Exploitation
Proof of concept
Attack vector
Authenticated. A low-privileged domain user submits a certificate enrollment request containing attributes that direct the certification authority to a host under their control, which returns identity data belonging to a domain controller.
Affected versions
Windows Server with Active Directory Certificate Services, Enterprise CA role, prior to the July 2026 security updates
Patched versions
July 2026 security updates, released July 14, 2026

Mitigations

  • Install the July 2026 security updates on certificate authority servers
  • Verify the chase validation path is active after patching
  • Set ms-DS-MachineAccountQuota to zero where operationally safe
  • Restrict enrollment permissions on certificate templates
  • Restrict outbound connectivity from CA servers to known domain controllers

Response

Vendor

Microsoft's advisory states that an authenticated attacker could manipulate attributes associated with a machine account and obtain a certificate from Active Directory Certificate Services that allows authentication as that machine via PKINIT, and that targeting a domain controller account would permit privileged Active Directory operations.

Customer guidance

Microsoft addressed the issue in the July 2026 security updates by adding validation to the chase process, requiring that the server named in the request maps to a legitimate domain controller and that the returned identity matches the expected account.

Patch / advisory

Updates

Jul 27, 2026Initial draft

Built primarily from the researchers' technical writeup of July 24, 2026, with BleepingComputer's coverage of July 27 used for Microsoft's advisory wording and the interim workaround.

FAQ

Am I affected by Certighost if I do not run AD CS?

No. The vulnerability is in the Active Directory Certificate Services enrollment path, so a domain without an Enterprise certification authority has no exposure to this specific chain. That said, AD CS is widely deployed, sometimes installed years earlier for a single purpose and then forgotten, so confirm rather than assume.

Does installing the July 2026 update fully resolve it?

The update contains the fix, but the researchers' binary analysis found the new validation sits behind a servicing feature gate, with a legacy branch still reachable when that gate is not enabled. Install the update, then verify the protection is active rather than treating patch deployment as confirmation on its own.

What privileges did an attacker need?

A single authenticated domain user account. No administrative rights were required at any stage of the demonstrated chain. The account created a machine account under the default machine account quota, which was enough for the certification authority to accept the attacker-controlled endpoint as a valid domain principal.

Should I set ms-DS-MachineAccountQuota to zero?

It is long-standing Active Directory hardening advice and it removes a step the demonstrated chain relied on, so it is worth evaluating. It is not a substitute for the patch. Check first whether anything in your environment depends on ordinary users joining machines to the domain, because some deployment workflows do.

How urgent is this given a public exploit exists?

Treat it as immediate for any certification authority still unpatched. The exploit is a self-contained script, the prerequisites are default settings, and the outcome is the krbtgt secret. Ten days elapsed between Microsoft's patch and public release of the exploit, so the window for unhurried patching has closed.

The bottom line

Certighost, CVE-2026-54121, let a low-privileged Active Directory user obtain a certificate authenticating as a domain controller through an unvalidated AD CS enrollment fallback, then replicate the krbtgt secret. Microsoft patched it on July 14, 2026 and a working exploit went public on July 24.

What happens next

Expect this technique to appear in offensive tooling quickly given the exploit is a self-contained script. The broader pattern, a service trusting routing data supplied by the requester, is unlikely to be confined to this single code path.

What to do

Patch your certificate authority servers, then verify the chase validation is actually active, and hunt retrospectively across the window when they were exposed.

Reader reviews

Rate this articleBe the first to rate
No written reviews yetRate the article above, or be the first to share your experience.

Related articles