← Back to Feed CACHED · 2026-09-23 04:37:07 · CACHE_KEY CVE-2026-74849
CVE-2026-74849 · CWE-78 · Disclosed 2026-09-22

Zohocorp ManageEngine ADSelfService Plus versions before build 7001 are vulnerable to a remote code…

ASSESSED — NOISGATE
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Every workstation in your domain has a pre-auth agent running as SYSTEM that blindly trusts whatever the network tells it to run

CVE-2026-74849 is an OS command injection (CWE-78) in the ManageEngine ADSelfService Plus GINA/Credential Provider client — the agent installed on every domain-joined Windows endpoint to enable self-service password reset from the logon screen. All builds prior to 7001 are affected. The agent runs as NT AUTHORITY\SYSTEM and communicates with the ADSelfService Plus server over HTTP (port 8888) by default. An unauthenticated attacker who can reach the agent on the network can inject OS commands that execute with full SYSTEM privileges. Because the agent is typically pushed to every workstation via GPO or SCCM, a successful exploit could be repeated across thousands of endpoints in minutes.

Zoho rates this CRITICAL 9.8 with a CVSS vector of AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, treating it as a zero-click, unauthenticated, network-accessible RCE. That vector is *technically* accurate — the GINA agent does accept network input without authentication. But it overstates the real-world risk because GINA clients sit on internal workstation endpoints, not internet-facing servers. An attacker must already be on the corporate LAN or have compromised an adjacent system to reach them. There is no public PoC, no KEV listing, and no confirmed in-the-wild exploitation as of disclosure day. The realistic severity is HIGH (8.4): still dangerous due to fleet-scale SYSTEM access once inside, but not the internet-facing zero-click emergency that 9.8 implies.

"Fleet-wide SYSTEM shells via unauthenticated command injection in the GINA agent — but only from inside your LAN"
02 · The Attack Path

5 steps from start to impact.

STEP 01

Gain internal network access

The attacker establishes a foothold on the corporate LAN — via phishing, VPN credential theft, rogue Wi-Fi, or compromising a perimeter device. The GINA client agent listens for server communication on internal workstation NICs and is not exposed to the internet. This step is a hard prerequisite.
Conditions required:
  • Internal network access (post-initial-access position)
  • Network visibility to workstation subnets where GINA agents are deployed
Where this breaks in practice:
  • Requires an independent initial-access vector — the GINA vuln itself cannot provide this
  • Network segmentation and NAC may prevent attacker hosts from reaching workstation VLANs
Detection/coverage: EDR telemetry on the initial-access vector; NAC logs for rogue devices; NGFW east-west traffic inspection
STEP 02

Enumerate GINA agent endpoints

The attacker scans the network for hosts with the ADSelfService Plus GINA client agent. The agent service registers on a known port and responds to HTTP probes. Alternatively, the attacker queries Active Directory or SCCM for GPO-deployed software to enumerate targets without scanning.
Conditions required:
  • Knowledge that the target organization uses ADSelfService Plus
  • Ability to scan or query AD/SCCM for deployed software
Where this breaks in practice:
  • Port scanning on workstation subnets may trigger IDS/IPS alerts
  • Host-based firewalls (Windows Firewall) may block inbound probes to the agent port
Detection/coverage: Network IDS signatures for port sweeps; SIEM correlation of bulk LDAP queries against software inventory OUs
STEP 03

Send crafted OS command injection payload

The attacker sends a specially crafted HTTP request to the GINA client agent containing shell metacharacters (e.g., ; | & $()) embedded in a parameter that the agent passes unsanitized to an OS command. No authentication or session token is required. The agent's default HTTP listener processes the request.
Conditions required:
  • Network connectivity to the target endpoint's GINA agent port
  • No TLS certificate validation blocking the connection (default HTTP mode)
Where this breaks in practice:
  • If the organization has enforced HTTPS with mutual TLS on the GINA agent, unauthenticated connections are rejected
  • Application-aware NGFW may inspect and block malicious HTTP payloads to non-standard ports
Detection/coverage: No known scanner plugin exists yet (day-1 disclosure); custom Suricata/Snort rules matching CWE-78 patterns in HTTP traffic to GINA agent ports
STEP 04

Achieve SYSTEM-level code execution

The injected OS command executes in the context of NT AUTHORITY\SYSTEM because the GINA Credential Provider agent runs as a Windows service under SYSTEM. The attacker now has unrestricted access to the endpoint: credential dumping (LSASS), lateral movement via WMI/SMB/WinRM, or persistence via scheduled tasks.
Conditions required:
  • Successful command injection from step 3
Where this breaks in practice:
  • EDR with behavioral analysis should flag anomalous child processes spawned by the GINA agent service (e.g., cmd.exe, powershell.exe as children of the agent process)
  • Credential Guard / LSA protection limits the value of LSASS dumping
Detection/coverage: EDR process-tree alerts; Windows Event ID 4688 (process creation) filtered for GINA agent parent PID; Sysmon Event ID 1
STEP 05

Propagate across the fleet

Because the GINA agent is deployed to all managed workstations via the same GPO, every endpoint is identically vulnerable. The attacker scripts the injection payload against all enumerated hosts, achieving fleet-wide SYSTEM compromise in minutes. From any compromised endpoint, the attacker can harvest cached domain credentials and escalate to domain admin.
Conditions required:
  • Multiple endpoints with the vulnerable GINA agent reachable on the network
  • No network segmentation between workstations
Where this breaks in practice:
  • Micro-segmentation or zero-trust networking limits blast radius to individual subnets
  • Rate-based anomaly detection flags rapid identical HTTP requests to many endpoints
Detection/coverage: SIEM correlation of identical process-creation events across multiple hosts; EDR fleet-wide query for GINA agent child processes
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNone confirmed. Not listed in CISA KEV. No campaigns or threat-actor attribution reported as of 2026-09-23. ManageEngine ADSelfService Plus has a documented history of APT exploitation (see CISA AA21-259a for prior campaigns).
Proof-of-ConceptNo public PoC exists. No exploit code found on GitHub, Exploit-DB, or in curated PoC repositories (SecureWithUmer/CVE-2026-PoCs, pocindex). Given the simplicity of CWE-78 exploitation, a weaponized PoC is likely within 2–4 weeks.
EPSS ScoreNot yet scored — CVE was published 2026-09-22 and EPSS data lags ~72 hours after NVD publication. Expect initial EPSS to be in the 0.3–0.8% range given the internal-only attack surface, rising sharply if a PoC drops.
KEV StatusNot listed as of 2026-09-23. CISA KEV catalog does not include this CVE. Monitor KEV feed — ManageEngine CVEs have historically been added within weeks of PoC publication.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H9.8 CRITICAL. Every metric is worst-case. The AV:N is technically correct (the agent accepts network input) but practically misleading: the GINA client sits on internal workstations, not internet-facing infrastructure.
Affected VersionsManageEngine ADSelfService Plus all builds prior to 7001 (builds 0–7000). This includes the GINA/CP login agent deployed to Windows endpoints. Both 32-bit and 64-bit agent installations are affected.
Fixed VersionBuild 7001 and later. The server-side update must be applied first, then the GINA agent on each endpoint must be updated (auto-update via the server console or manual GPO/SCCM push). Distro backports are not applicable — this is a proprietary ManageEngine component.
Exposure DataNo Shodan/Censys/GreyNoise/FOFA signatures exist for the GINA client agent (it runs on internal workstations, not internet-facing hosts). The ADSelfService Plus *server* (port 8888/9251) has ~3,200 internet-exposed instances per Shodan, but the vulnerable component is the endpoint agent, not the server.
Disclosure TimelineReserved: 2026-08-17 | Published: 2026-09-22 | Last Modified: 2026-09-23. Day-1 disclosure with no advance PoC circulation detected.
Researcher / ReporterNot publicly attributed. No ZDI advisory or named researcher. ManageEngine's advisory page does not credit the reporter for this CVE.
04 · The Call

Final Verdict
DOWNGRADED to HIGH (8.4/10)

Why this verdict

  • Internal-only attack surface: The GINA client agent runs on domain-joined *workstations*, not internet-facing servers. The CVSS AV:N is technically correct but practically misleading — the agent is reachable only from the internal LAN. This requires the attacker to already hold an internal network position (post-initial-access), which is a compounding prerequisite the vendor score ignores. Adjustment: −0.8 from baseline.
  • No exploitation evidence or tooling: Zero public PoCs, no KEV listing, no threat-actor campaigns, and no scanner plugins exist as of day 1. CWE-78 is straightforward to weaponize once details emerge, but today the attack is theoretical. Adjustment: −0.4 from baseline.
  • Default HTTP weakens the chain but is fixable: The GINA agent defaults to HTTP (port 8888), meaning no TLS validation protects the communication channel. Organizations that have already enforced HTTPS with certificate pinning significantly raise the bar. The default-insecure posture keeps the score from dropping further. Adjustment: −0.2 from baseline.
  • Role multiplier: Workstations (fleet-scale blast radius). The GINA agent is deployed via GPO to *all* managed Windows workstations — typically 80–100% of the endpoint population in an ADSelfService Plus deployment. While individual workstations are low-value targets, fleet-wide SYSTEM compromise from a single scripted exploit loop is operationally equivalent to domain compromise: the attacker can harvest cached credentials, dump LSASS on admin workstations, and escalate to Domain Admin. The blast radius is fleet-scale (thousands of hosts). This sets the verdict floor at HIGH.
  • Role multiplier: Privileged admin workstations (PAWs). If the GINA agent is deployed to PAWs or jump servers (common in orgs that don't exempt privileged workstations from GPO-pushed agents), the chain yields SYSTEM on a machine with cached DA/EA credentials. The blast radius escalates to domain-scale. This reinforces the HIGH floor but does not reach CRITICAL because PAW deployment of the GINA agent is not canonical — security-mature orgs exclude PAWs from self-service password reset agents.
  • Role multiplier: Domain controllers. DCs are generally *not* targets for GINA/CP agent deployment (DCs do not serve interactive logon for self-service password reset). The chain does not succeed on DCs in standard deployments. No floor adjustment.

Why not higher?

The vulnerability cannot be exploited from the internet — the GINA client agent is an internal endpoint component, not a perimeter service. The 9.8 CRITICAL vector assumes unrestricted network accessibility, which does not reflect the real deployment posture. Additionally, there is no public PoC, no active exploitation, and the affected component is a workstation agent rather than a canonically high-value-role service (identity provider, domain controller, hypervisor, network edge). If a PoC emerges and exploitation is confirmed in the wild, or if KEV lists it, reassessment to CRITICAL would be warranted.

Why not lower?

Once an attacker is on the internal network, the exploitation is trivially simple: unauthenticated, no user interaction, low complexity, and the payload runs as SYSTEM on potentially every managed workstation in the domain. CWE-78 OS command injection is one of the most reliable vulnerability classes — there is no memory corruption, no ASLR/DEP bypass, no race condition. The fleet-scale blast radius means a single exploit loop can compromise thousands of hosts, making this a devastating lateral-movement and privilege-escalation weapon. ManageEngine ADSelfService Plus has a proven track record of APT exploitation (CISA AA21-259a), and the 2–4 week PoC window for a CWE-78 bug is short.

05 · Compensating Control

What to do — in priority order.

  1. Enforce HTTPS with certificate validation on all GINA agent communications — Switch the GINA agent from default HTTP to HTTPS immediately. In the ADSelfService Plus admin console, navigate to Admin → Product Settings → Connection, enable HTTPS on port 9251, and push the updated configuration to all agents. This eliminates unauthenticated plaintext command injection via the agent channel. Deploy within 30 days per the noisgate mitigation SLA for HIGH severity.
  2. Restrict inbound access to GINA agent ports via Windows Firewall GPO — Create a GPO-enforced Windows Firewall rule on all endpoints blocking inbound connections to the GINA agent port (default 8888/9251) from all sources except the ADSelfService Plus server IP(s). This limits the attack surface to an attacker who has already compromised the management server. Deploy within 30 days per the noisgate mitigation SLA.
  3. Update ADSelfService Plus server and agents to build 7001 — Apply the vendor patch: update the server to build 7001 first, then trigger the GINA agent auto-update or push the updated agent via SCCM/GPO. Verify agent versions via the Reports → GINA/Mac/Linux Reports → Agent Installed Machines report. Complete within 180 days per the noisgate remediation SLA for HIGH severity.
  4. Deploy EDR process-tree monitoring for GINA agent child processes — Create an EDR detection rule alerting on any child process (especially cmd.exe, powershell.exe, whoami.exe, net.exe) spawned by the ADSelfService Plus GINA agent service process. This provides post-exploitation detection even if the injection succeeds. Implement immediately as a detection-in-depth measure.
  5. Audit and exempt privileged workstations from GINA agent deployment — Review your GPO scope and remove the GINA/CP agent from PAWs, jump servers, and any Tier 0/Tier 1 admin workstations. These machines should not have self-service password reset from the logon screen — the blast radius of SYSTEM compromise on a privileged workstation is domain-scale. Implement within 30 days.
What doesn't work
  • WAF / reverse proxy — the GINA client agent runs on endpoints, not behind a web application firewall. WAF rules cannot inspect or block traffic to workstation-local agent ports.
  • MFA on the ADSelfService Plus portal — this CVE is an OS command injection in the agent binary, not an authentication bypass on the web portal. MFA on the self-service portal does not affect the vulnerable code path.
  • Patching only the ADSelfService Plus server — the vulnerability is in the *client* agent, not the server. Updating the server alone does not remediate endpoints until the agent binaries are also updated on every workstation. Many organizations forget the agent push step.
06 · Verification

Crowdsourced verification payload.

Run this script on each target Windows endpoint (or push it fleet-wide via SCCM/Intune/GPO startup script). Requires local administrator privileges. Invoke: powershell -ExecutionPolicy Bypass -File .\Check-CVE-2026-74849.ps1

noisgate-verify.ps1
POWERSHELLREAD-ONLYSAFE
#Requires -Version 5.1
<#
.SYNOPSIS
    CVE-2026-74849 - ManageEngine ADSelfService Plus GINA Client RCE Check
.DESCRIPTION
    Detects the ADSelfService Plus GINA/CP agent and checks whether the
    installed build is vulnerable (< 7001).
.OUTPUTS
    VULNERABLE | PATCHED | UNKNOWN
.NOTES
    Exit codes: 1 = VULNERABLE, 0 = PATCHED, 2 = UNKNOWN (not installed or
    version indeterminate)
#>

$VulnBuild = 7001
$Found = $false
$BuildNum = $null

# --- Registry detection (primary) ---
$RegPaths = @(
    'HKLM:\SOFTWARE\WOW6432Node\ZOHO Corp\ADSelfService Plus Client Software',
    'HKLM:\SOFTWARE\ZOHO Corp\ADSelfService Plus Client Software'
)
foreach ($rp in $RegPaths) {
    if (Test-Path $rp) {
        $Found = $true
        $props = Get-ItemProperty -Path $rp -ErrorAction SilentlyContinue
        foreach ($key in @('BuildNumber','Version','ProductVersion','AgentVersion')) {
            if ($props.PSObject.Properties[$key] -and $props.$key) {
                $BuildNum = $props.$key
                break
            }
        }
        break
    }
}

# --- File-system fallback ---
if (-not $Found) {
    $AgentDirs = @(
        "$env:ProgramFiles\ManageEngine\ADSelfService Plus Client Software",
        "${env:ProgramFiles(x86)}\ManageEngine\ADSelfService Plus Client Software",
        'C:\ManageEngine\ADSelfService Plus Client Software'
    )
    foreach ($dir in $AgentDirs) {
        if (Test-Path $dir) {
            $Found = $true
            $dll = Get-ChildItem -Path $dir -Include '*.dll','*.exe' -Recurse -ErrorAction SilentlyContinue |
                   Where-Object { $_.VersionInfo.ProductName -match 'ADSelfService|ManageEngine' } |
                   Select-Object -First 1
            if ($dll) {
                $ver = $dll.VersionInfo.ProductVersion
                if ($ver -match '(\d{4,})') { $BuildNum = $Matches[1] }
            }
            break
        }
    }
}

# --- Credential Provider CLSID fallback ---
if (-not $Found) {
    $cpRoot = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers'
    if (Test-Path $cpRoot) {
        Get-ChildItem $cpRoot -ErrorAction SilentlyContinue | ForEach-Object {
            $val = (Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue).'(default)'
            if ($val -match 'ADSelfService|ManageEngine|ZOHO') { $Found = $true }
        }
    }
}

# --- Verdict ---
if (-not $Found) {
    Write-Output 'UNKNOWN - ADSelfService Plus GINA/CP client not detected.'
    exit 2
}
if (-not $BuildNum) {
    Write-Output 'UNKNOWN - Agent detected but build number indeterminate. Verify manually.'
    exit 2
}

$ParsedBuild = 0
if ([int]::TryParse(($BuildNum -replace '[^0-9]',''), [ref]$ParsedBuild)) {
    if ($ParsedBuild -lt $VulnBuild) {
        Write-Output "VULNERABLE - Build $ParsedBuild is below patched build $VulnBuild (CVE-2026-74849)."
        exit 1
    } else {
        Write-Output "PATCHED - Build $ParsedBuild meets or exceeds patched build $VulnBuild."
        exit 0
    }
} else {
    Write-Output "UNKNOWN - Could not parse build value '$BuildNum'. Verify manually."
    exit 2
}
07 · Sources

Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.