A master key to every customer's network, guarded by a single login prompt
CVE-2026-19599 is an OS command injection (CWE-78) in the Notification Profile module of ManageEngine OpManager MSP, the multi-tenant edition purpose-built for managed service providers. The Notification Profile feature includes a "Run Command" capability that executes system-level commands when monitoring alarms fire. The vulnerability allows a user with the customer administrator role on the MSP Central server to inject arbitrary OS commands through unsanitized variable values, achieving full remote code execution on the underlying server. Affected versions are 12.8.709 and below; the fix ships in build 128710 (version 12.8.710) and later.
ZohoCorp rates this CRITICAL at 9.9, and the CVSS vector reflects Scope: Changed with all-High CIA impact—defensible on paper because a compromised MSP Central server holds SNMP community strings, WMI credentials, SSH keys, and probe-to-central trust for *every customer network*. However, the vendor’s own advisory quietly notes the prerequisite: the attacker must already be authenticated as a customer administrator on the MSP Central web console. That is not PR:N (unauthenticated)—it is a named administrative role. The 9.9 overstates the ease of initial access. A realistic reassessment lands at HIGH 8.5: the authentication gate and the overwhelmingly internal deployment posture of MSP Central reduce the probability of opportunistic exploitation, but the catastrophic multi-tenant blast radius prevents any downgrade below HIGH.
5 steps from start to impact.
Obtain customer admin credentials
- Valid customer administrator credentials for MSP Central
- Network access to the MSP Central web console (typically TCP 8060 or 443)
- MSP Central is almost never internet-facing; it sits behind VPN or on the MSP’s internal management VLAN
- Customer admin is a named role—not every OpManager user has it
- MFA may be enforced via ManageEngine’s ADSelfService Plus or third-party IdP integration
Navigate to Notification Profile configuration
$DeviceName, $Message).- Active authenticated session with customer admin privileges
- Action is logged in OpManager’s audit trail as a profile creation/modification event
- If the MSP has role-based access controls tightened, customer admins may not have Notification Profile write access
Inject OS command via unsanitized variables
& | < > ^ ! ' $ ( ) { } ; # * ? [ but is incomplete). The injected payload executes arbitrary commands as the service account running OpManager—typically SYSTEM on Windows or root on Linux. No user interaction is required to trigger execution once the profile is saved and an alarm condition fires (or is manually triggered).- Knowledge of the sanitization bypass (CWE-78 in the variable handling)
- An alarm condition that triggers the profile, or the ability to manually test-fire it
- No public PoC exists as of disclosure date—attacker must independently discover the bypass
- Sanitization exists (albeit incomplete); naive injection attempts will fail
Achieve RCE as SYSTEM/root on MSP Central
SYSTEM; on Linux, the service commonly runs as root or a dedicated high-privilege user. The attacker now has full control of the MSP Central server, including access to its embedded database (PostgreSQL or MSSQL) storing all monitored device credentials.- Successful command injection in step 3
- Application-layer WAF in front of OpManager could theoretically intercept, but few MSPs deploy WAF on internal management consoles
- EDR with behavioral detection may block the post-exploitation activity
Pivot to all monitored customer networks
- RCE on MSP Central (step 4)
- Stored credentials in OpManager database (default behavior)
- If credentials are stored with hardware-bound encryption (rare in OpManager deployments), extraction is harder
- Network segmentation between MSP Central and customer probe networks may limit lateral movement
The supporting signals.
| In-the-Wild Exploitation | No confirmed exploitation. Not listed in CISA KEV. No campaigns attributed as of 2026-09-23. |
|---|---|
| Proof of Concept | No public PoC available. The vulnerability was responsibly disclosed by researcher sealldev through Zoho’s bug bounty program. No exploit code on GitHub, ExploitDB, or Nuclei templates. |
| EPSS Score | Not yet scored by FIRST.org (disclosed today, 2026-09-23). Historical ManageEngine RCE CVEs with auth requirements typically land in the 5th–20th percentile within 30 days. |
| KEV Status | Not listed in CISA Known Exploited Vulnerabilities catalog as of 2026-09-23. |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H — Network-accessible, low complexity, low privileges, no user interaction, changed scope. The PR:L reflects that customer admin is a lower-privilege role relative to MSP super-admin. |
| Affected Versions | ManageEngine OpManager MSP ≤ 12.8.709 (all builds up to and including 128709). Also affects OpManager Enterprise and Standard editions per the related CVE-2026-76978 batch disclosure. |
| Fixed Versions | Builds 128710, 129002, 129109, 129123, 129133 and later. Vendor recommends upgrading to 12.8.710 or 12.9.124 depending on release branch. |
| Scanning / Exposure | Shodan shows ~1,000–2,000 ManageEngine product instances internet-exposed globally, but the vast majority are Desktop Central or ServiceDesk Plus. OpManager MSP Central instances exposed to the internet are estimated at <500 worldwide. Most MSP deployments are internal-only. |
| Disclosure Date | 2026-09-23 (coordinated disclosure, same-day advisory and patch). |
| Reporter | sealldev via Zoho Bug Bounty Program (bugbounty.zohocorp.com). |
Why this verdict
- Authentication gate is real friction. The vendor advisory explicitly states the attacker must be a *customer administrator* on MSP Central—this is a named administrative role, not a low-privilege user. Acquiring these credentials requires a prior attack (phishing, credential stuffing, insider) that the CVSS score does not account for. This justifies a 0.5–1.0 point reduction from the 9.9 baseline.
- Internal-only deployment posture. OpManager MSP Central is designed to sit on the MSP’s management VLAN behind VPN. Shodan data shows <500 OpManager instances internet-exposed globally. The vast majority of the installed base is unreachable without prior network access. This removes the opportunistic mass-exploitation scenario and justifies an additional 0.5 point reduction.
- No PoC, no KEV, no in-the-wild activity. As of disclosure day, no public exploit exists. The researcher disclosed responsibly through Zoho’s bug bounty. This reduces the immediate threat window and justifies a 0.4 point reduction from the baseline.
- Role multiplier: MSP Central is canonically a high-value management plane. OpManager MSP Central stores monitoring credentials (SNMP, WMI, SSH, Telnet) for *every device across every customer network* the MSP monitors. Successful exploitation grants the attacker a supply-chain-scale pivot—one compromised MSP Central = access to dozens or hundreds of customer environments. This is analogous to compromising a hypervisor management plane or a CI/CD orchestrator. The blast radius is multi-tenant/supply-chain, which sets the verdict floor at HIGH. In deployments where the MSP Central manages critical infrastructure customers, the floor arguably reaches CRITICAL—but the authentication prerequisite prevents the floor from being universally CRITICAL across the installed base.
- Role multiplier: credential store impact. The OpManager database contains plaintext or reversibly encrypted credentials for all monitored devices. RCE on the server = credential dump = authenticated access to the entire monitored fleet. This is identity-scale and fleet-scale blast radius, reinforcing the HIGH floor.
Why not higher?
A CRITICAL (9.0+) rating would be warranted if this were unauthenticated, had a public exploit, or if OpManager MSP Central were routinely internet-facing. None of those conditions hold today. The customer admin authentication requirement is a meaningful gate that reduces the probability of exploitation from opportunistic to targeted. The absence of any PoC or in-the-wild activity on disclosure day further reduces immediacy.
Why not lower?
A MEDIUM rating would ignore the catastrophic blast radius of MSP Central compromise. This is not a workstation bug—it is a management-plane RCE that, once landed, hands the attacker credentials for every device across every customer the MSP monitors. The OS command injection primitive is reliable and well-understood (CWE-78), requiring only a sanitization bypass, not memory corruption. The authentication requirement slows the attacker but does not stop a determined adversary targeting MSPs.
What to do — in priority order.
- Upgrade to build 128710 or 129124 immediately — The vendor patch is available same-day. This is the definitive fix. Per noisgate remediation SLA for HIGH, deploy within 180 days; however, given the management-plane blast radius, aim for 30 days or less. Download from ManageEngine service packs.
- Restrict Notification Profile write access to MSP super-admins only — Remove Notification Profile create/edit permissions from customer administrator roles. This eliminates the attack surface without patching. Deploy within 30 days per noisgate mitigation SLA for HIGH.
- Enforce MFA on all OpManager MSP Central admin accounts — Adding MFA (via ADSelfService Plus, Duo, or SAML IdP) to the MSP Central login raises the bar from stolen credentials to stolen credentials + second factor. Deploy within 30 days.
- Enable command-line audit logging on the OpManager server — On Windows, deploy Sysmon with Event ID 1 logging; on Linux, configure auditd with execve syscall logging. Alert on any child process spawned by the OpManager Java service that is not in an allowlist (e.g.,
cmd.exe,/bin/sh,powershell.exe). Deploy within 30 days. - Segment MSP Central on a dedicated management VLAN — Ensure the OpManager MSP Central server is only reachable from authorized admin workstations and probe subnets. Block all inbound access from general corporate or internet-facing networks. This limits who can even reach the login page. Deploy within 30 days.
- Rotate all stored monitoring credentials after patching — Because OpManager stores device credentials that would be exposed on compromise, rotate all SNMP community strings, WMI accounts, SSH keys, and Telnet passwords stored in OpManager after applying the patch. This closes the window if the vuln was silently exploited before patch deployment.
- Network-layer IPS signatures — the command injection occurs within an authenticated HTTPS session to the OpManager web console. Without TLS inspection of management traffic (which most orgs don’t do on internal management planes), network IDS/IPS cannot see the payload.
- WAF in front of OpManager — almost no MSP deploys a WAF in front of an internal network monitoring console. Even if present, the injection is in a legitimate admin workflow (Notification Profile configuration), not a classic web attack pattern. WAF rules would need custom tuning to catch it.
- Disabling the Run Command feature entirely — while this would remove the attack surface, it breaks legitimate alarm-response automation that many MSPs rely on for SLA compliance. It’s a business-impact decision, not a free compensating control.
Crowdsourced verification payload.
Run this script on the OpManager MSP Central server as a local administrator. Execute: powershell -ExecutionPolicy Bypass -File .\Check-CVE-2026-19599.ps1. No network access or credentials required—it reads the local product.conf file.
# Check-CVE-2026-19599.ps1
# Checks ManageEngine OpManager MSP for CVE-2026-19599 (OS Command Injection)
# Run on the OpManager MSP Central server as local admin.
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN
$ErrorActionPreference = 'Stop'
$vulnBuild = 128709
$found = $false
# Common install paths
$searchPaths = @(
'C:\ManageEngine\OpManager',
'C:\Program Files\ManageEngine\OpManager',
'C:\Program Files (x86)\ManageEngine\OpManager',
'D:\ManageEngine\OpManager'
)
foreach ($base in $searchPaths) {
$confFile = Join-Path $base 'conf\product.conf'
if (Test-Path $confFile) {
$found = $true
$content = Get-Content $confFile -Raw
if ($content -match 'build_number\s*=\s*(\d+)') {
$buildNum = [int]$Matches[1]
Write-Host "OpManager install found at: $base"
Write-Host "Detected build number: $buildNum"
Write-Host "Vulnerable threshold: <= $vulnBuild"
if ($buildNum -le $vulnBuild) {
Write-Host 'VULNERABLE - CVE-2026-19599 applies to this build.' -ForegroundColor Red
exit 1
} else {
Write-Host 'PATCHED - Build is above the vulnerable range.' -ForegroundColor Green
exit 0
}
} else {
Write-Host "UNKNOWN - Could not parse build_number from $confFile" -ForegroundColor Yellow
exit 2
}
}
# Also check about.properties as fallback
$aboutFile = Join-Path $base 'html\about.properties'
if ((-not $found) -and (Test-Path $aboutFile)) {
$found = $true
$content = Get-Content $aboutFile -Raw
if ($content -match 'build_number\s*=\s*(\d+)') {
$buildNum = [int]$Matches[1]
Write-Host "OpManager install found at: $base"
Write-Host "Detected build number: $buildNum"
Write-Host "Vulnerable threshold: <= $vulnBuild"
if ($buildNum -le $vulnBuild) {
Write-Host 'VULNERABLE - CVE-2026-19599 applies to this build.' -ForegroundColor Red
exit 1
} else {
Write-Host 'PATCHED - Build is above the vulnerable range.' -ForegroundColor Green
exit 0
}
}
}
}
if (-not $found) {
Write-Host 'UNKNOWN - ManageEngine OpManager installation not found in standard paths.' -ForegroundColor Yellow
Write-Host 'Set $searchPaths to include your custom install directory and re-run.'
exit 2
}
- ManageEngine OpManager Security Updates
- Strix.ai CVE-2026-19599 Detail
- TheHackerWire CVE-2026-19599 PoC & Exploit Status
- OffSeq Threat Radar CVE-2026-19599
- SecurityOnline - Critical ManageEngine Vulnerabilities
- ManageEngine OpManager MSP Architecture
- ManageEngine OpManager Service Packs
- Shodan ManageEngine OpManager CVEDB
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.