Potential CertiGhost AD CS Machine Identity Mismatch (CVE-2026-54121)

Last updated 3 days ago on 2026-08-12
Created 3 days ago on 2026-08-12

About

Identifies successful Active Directory Certificate Services (AD CS) certificate issuance events where a machine-account requester differs from the Remote Machine Discovery (RMD) chase target while the event's DNS subject alternative name (SAN) matches that target. This requester-to-target mismatch may indicate CertiGhost (CVE-2026-54121) or similar abuse of AD CS request-context chase processing.
Tags
Domain: EndpointDomain: IdentityOS: WindowsUse Case: Threat DetectionTactic: Credential AccessTactic: Privilege EscalationUse Case: Active Directory MonitoringUse Case: VulnerabilityData Source: Active DirectoryData Source: Windows Security Event LogsLanguage: esql
Severity
high
Risk Score
73
MITRE ATT&CK™

Credential Access (TA0006)(external, opens in a new tab or window)

Privilege Escalation (TA0004)(external, opens in a new tab or window)

License
Elastic License v2(external, opens in a new tab or window)

Definition

Integration Pack
Prebuilt Security Detection Rules
Related Integrations

system(external, opens in a new tab or window)

Query
text code block:
FROM logs-system.security-* METADATA _id, _index, _version | WHERE event.code == "4887" AND winlog.event_data.Requester LIKE "*$" AND winlog.event_data.Attributes IS NOT NULL // Parse Attributes for RMD and CDC, and as a fallback when dedicated template or SAN fields are absent. // CDC and the effective template are retained for triage purposes | GROK winlog.event_data.Attributes """(?im)^[ \t]*CertificateTemplate[ \t]*:[ \t]*(?<Esql.attributes_certificate_template>[^\r\n]+)\r?$""" | GROK winlog.event_data.Attributes """(?im)^[ \t]*SAN[ \t]*:[ \t]*dns[ \t]*=[ \t]*(?<Esql.attributes_san_value>[^\r\n]+)\r?$""" | GROK winlog.event_data.SubjectAlternativeName """(?im)^[ \t]*DNS[ \t]+Name[ \t]*=[ \t]*(?<Esql.event_san_value>[^\r\n]+)\r?$""" | GROK winlog.event_data.Attributes """(?im)^[ \t]*cdc[ \t]*:[ \t]*(?<Esql.cdc_value>[^\r\n]+)\r?$""" | GROK winlog.event_data.Attributes """(?im)^[ \t]*rmd[ \t]*:[ \t]*(?<Esql.rmd_value>[^\r\n]+)\r?$""" | EVAL Esql.effective_certificate_template = TRIM(COALESCE( winlog.event_data.CertificateTemplate, Esql.attributes_certificate_template )), Esql.san_value = TRIM(COALESCE(Esql.event_san_value, Esql.attributes_san_value)), Esql.cdc_value = TRIM(Esql.cdc_value), Esql.rmd_value = TRIM(Esql.rmd_value), Esql.normalized_requester = TO_LOWER( REPLACE(winlog.event_data.Requester, """^.*\\|\$$""", "") ), Esql.normalized_san_value = TO_LOWER( REPLACE(Esql.san_value, """\.$""", "") ), Esql.normalized_rmd_value = TO_LOWER( REPLACE(Esql.rmd_value, """\.$""", "") ) // Preserve IP-shaped values; shorten other SAN and RMD values to the first DNS label for machine-account comparison. | EVAL Esql.san_is_ip_shaped = Esql.normalized_san_value RLIKE """[0-9]{1,3}(\.[0-9]{1,3}){3}""" OR Esql.normalized_san_value LIKE "*:*", Esql.rmd_is_ip_shaped = Esql.normalized_rmd_value RLIKE """[0-9]{1,3}(\.[0-9]{1,3}){3}""" OR Esql.normalized_rmd_value LIKE "*:*" | EVAL Esql.normalized_san_target = CASE( Esql.san_is_ip_shaped, Esql.normalized_san_value, REPLACE(Esql.normalized_san_value, """\..*$""", "") ), Esql.normalized_rmd_target = CASE( Esql.rmd_is_ip_shaped, Esql.normalized_rmd_value, REPLACE(Esql.normalized_rmd_value, """\..*$""", "") ) | WHERE Esql.normalized_requester IS NOT NULL AND Esql.normalized_san_target IS NOT NULL AND Esql.normalized_rmd_target IS NOT NULL | WHERE Esql.normalized_requester != Esql.normalized_rmd_target AND Esql.normalized_san_target == Esql.normalized_rmd_target | KEEP @timestamp, _id, _index, _version, event.code, event.action, event.category, event.type, event.outcome, event.created, event.ingested, data_stream.dataset, data_stream.namespace, host.id, host.name, winlog.computer_name, winlog.record_id, winlog.event_data.RequestId, winlog.event_data.Requester, winlog.event_data.CertificateTemplate, winlog.event_data.Subject, winlog.event_data.SubjectAlternativeName, winlog.event_data.Attributes, winlog.event_data.Disposition, winlog.event_data.SubjectKeyIdentifier, Esql.effective_certificate_template, Esql.san_value, Esql.cdc_value, Esql.rmd_value, Esql.normalized_requester, Esql.normalized_san_target, Esql.normalized_rmd_target

Install detection rules in Elastic Security

Detect Potential CertiGhost AD CS Machine Identity Mismatch (CVE-2026-54121) in the Elastic Security detection engine by installing this rule into your Elastic Stack.

To setup this rule, check out the installation guide for Prebuilt Security Detection Rules(external, opens in a new tab or window).