Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-92744 — Disclosure write-up for CVE-2026-92744, an unauthenticated RCE in the Delinea Privilege Manager Windows agent via an empty WCF certificate validator, with root-cause analysis and reproduction. | Kitploit
Tools/GitHubGitHub/isukasanuj/cve-2026-92744
Privilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingAuthenticationPapers & ResearchRed Teaming
GitHubisukasanuj/cve-2026-92744

CVE-2026-92744

Disclosure write-up for CVE-2026-92744, an unauthenticated RCE in the Delinea Privilege Manager Windows agent via an empty WCF certificate validator, with root-cause analysis and reproduction.

23 days agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
View Repository

Delinea Privilege Manager Agent — Unauthenticated Remote Code Execution

CVE-2026-92744 · disclosure write-up 株式会社CyberCrew (CyberCrew Inc.)

FieldValue
CVE IDCVE-2026-92744 (CNA: Delinea, Inc.)
TitleDelinea Privilege Manager agent unauthenticated remote code execution vulnerability
ClassCWE-306 Missing Authentication for Critical Function (primary); CWE-295 Improper Certificate Validation (mechanism)
AffectedPrivilege Manager Windows Core agent 10.1.0 → 12.0.5796 and 13.0.0 → 13.0.1058
Fixed inAgent 12.0.5804 (v12) and 13.0.2064 (v13); shipped with Privilege Manager 13.0.2, 28 Oct 2026
Published CVSS8.7 High (CVSS 4.0) — CVSS:4.0/AV:N/AC:H/AT:P/PR:H/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
Our assessment9.8 Critical (network, inferred) / 7.8 High (local, demonstrated) — see §6
ResearchersIsuka Sanuj (lead) · Ishan Nim (contributor) — both 株式会社CyberCrew
Vendor case#01416021 (related: 01418441)
Tested build13.0.1041.338 (PMAgents_13_0_1041.exe), SHA-256 9ED7660B9D994620B3ECADC524EB10122C42E3A932CCFD2988F16A5D76FF0457, Authenticode valid (CN=Delinea Inc.)
StatusReported 14 Sep 2026 · fixed, published, and researcher credit applied by vendor — closed

1. Executive summary

The Privilege Manager Windows agent exposes a WCF duplex callback endpoint on TCP 5593, bound to all interfaces, with an inbound firewall rule the installer opens for the Domain, Private and Public profiles. The endpoint nominally requires a client certificate, but the validator that is supposed to check it — AmsServerCertValidator.Validate() — has an empty body, and the contract declares ProtectionLevel.None, removing message-layer signing. The net effect is that every operation on the contract accepts a caller presenting a certificate the caller generated seconds earlier.

Two of those operations chain into full compromise:

  • OnRegistrationComplete writes attacker-supplied certificates into LocalMachine\Ams — the store the agent uses to verify policy signatures — and removes the legitimate ones.
  • OnClientTaskQueued drives the agent to fetch a command from its configured server and run it in a PowerShell runspace as nt authority\system, with ExecutionPolicy.Bypass explicitly set.

The full chain was reproduced end to end on a clean default install in Windows Sandbox (Windows 11 build 26200) on 12 Sep 2026, producing a captured nt authority\system execution proof. No credentials, prior local access, or user interaction were required.

Because the product's entire purpose is to decide which processes may run elevated, this is not merely code execution on a host — it is control of the security decision itself.

The finding was reported to Delinea on 14 Sep 2026, fixed in the 28 Oct 2026 release, and assigned CVE-2026-92744 (published 29 Oct 2026). Following a credit request, Delinea added the agreed researcher acknowledgment to the public record. The disclosure is now closed. See §8–§10.


2. Affected and fixed versions

ProductAffectedFixed
Privilege Manager Windows Core agent (v12)10.1.0 → 12.0.579612.0.5804
Privilege Manager Windows Core agent (v13)13.0.0 → 13.0.105813.0.2064

The fix shipped with Privilege Manager 13.0.2 on 28 Oct 2026. For customers who cannot immediately upgrade, Delinea's documented mitigation is to block inbound TCP 5593 (stated as causing no loss of function; agents fall back to pulling updates from the server on a schedule).


3. Technical analysis

3.1 Exposed endpoint and attack surface

The agent runs as System and hosts the callback listener on all interfaces, with the installer-created firewall rule covering the Public profile:

--- listeners ---
  :::5593  pid=4  proc=System        <- all interfaces (http.sys)

--- firewall ---
  [Domain, Private, Public] Arellia Agent (SSTP-In) | dir=Inbound action=Allow port=5593 prog=System

The configuration under test was the pristine installer default — nothing was weakened:

HKLM\SOFTWARE\Policies\Arellia\AMS
    BaseUrl          = https://localhost/TMS/
    InstallCode      = testinstallcode
    BaseUrlOverride  = https://localhost/TMS/

ValidateServerCertificate and ValidateCertChain are both absent (installed default). The endpoint presents a self-signed certificate named for the host (CN=7D20AF86-E474-4).

3.2 Root cause: the empty certificate validator

A single validator class with an empty Validate() governs three trust decisions:

internal class AmsServerCertValidator : X509CertificateValidator
{
    public override void Validate(X509Certificate2 certificate)
    {
    }
}
SitePath governed
_serviceHost.Credentials.ClientCertificate.Authentication.CustomCertificateValidatorinbound callback callers
AgentRegistration2Client.CreateClient(...)outbound registration
ClientBaseFactory.CreateClient<ClientItems2Client, ...>outbound policy fetch

The inbound host wires that validator in as a custom validation mode, which replaces WCF's default chain validation with the empty method:

wSHttpBinding.Security.Message.ClientCredentialType   = MessageCredentialType.Certificate;
wSHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
wSHttpBinding.Security.Message.EstablishSecurityContext = false;
...
_serviceHost.Credentials.ClientCertificate.Authentication.CertificateValidationMode
    = X509CertificateValidationMode.Custom;
_serviceHost.Credentials.ClientCertificate.Authentication.CustomCertificateValidator
    = new AmsServerCertValidator();

3.3 The callback contract

[ServiceContract(Namespace = "http://schemas.arellia.com/agent/services/",
                 Name = "IAgentRegistration",
                 SessionMode = SessionMode.NotAllowed,
                 ProtectionLevel = ProtectionLevel.None)]
public interface IAgentRegistrationCallback
{
    void OnRegistrationComplete(PlatformRegistration platformDetails);
    void OnApplicablePolicyChange(ClientItemDigest[] applicablePolicyDigests);
    void OnClientTaskQueued(PendingTaskExecutionInstance[] pendingTasks);
    void OnBadRegistration(Guid suggestedNewId);
}

ProtectionLevel.None removes message signing, leaving the client certificate as the only caller check — and that check is the empty method above. All four declared operations were confirmed reachable by a self-signed caller (OnRegistrationComplete, OnClientTaskQueued, OnApplicablePolicyChange, OnBadRegistration — all accepted=True).

3.4 Trust-store takeover (OnRegistrationComplete)

On registration completion the agent ingests every certificate in the server's response and saves it into the Ams store with no chain build, no pinning, and no comparison against previously known certificates:

foreach (string serverCertificate in platformDetails.ServerCertificates)
{
    byte[] raw = Convert.FromBase64String(serverCertificate);
    ICertificate2 certificate2 = _cert2Factory.Create(raw);
    list.Add(certificate2);
}
_certMgr.SaveServerCertificates(list);

The only catch covers malformed base64. SaveServerCertificates opens LocalMachine\Ams read-write and removes every certificate absent from the attacker's list before adding theirs. Reproduced twice on separate clean installs:

[16:21:46] LocalMachine\Ams before: 0 cert(s):
[16:21:52] attacker cert: 13E298FDE814B0B34B1BBB83631BF54276FCF2FC CN=attacker.invalid
[16:21:53] --- INVOKING OnRegistrationComplete with our certificate ---
[16:21:54]   call returned without exception
[16:22:06] LocalMachine\Ams after: 1 cert(s): 13E298FDE814B0B34B1BBB83631BF54276FCF2FC
Download Tool