Someone found the master key to the building's HVAC system was taped inside the thermostat's battery door
CVE-2026-20245 is a command injection vulnerability in the CLI of Cisco Catalyst SD-WAN Manager (vManage), Controller (vSmart), and Validator (vBond). The flaw lives in vconfd_script_upload_tenant_list.sh, which processes uploaded CSV files with root privileges without sanitizing embedded shell metacharacters. An attacker with netadmin CLI access uploads a crafted CSV via request tenant-upload tenant-list, and the shell script executes the injected payload as root. All versions through 20.18.2.2 and 26.1.1.1 are affected across on-prem, cloud-provisioned, Cisco-managed, and FedRAMP deployments. Fixed in 20.9.9.2, 20.12.7.2, 20.15.4.5, 20.15.5.3, 20.18.3.1, and 26.1.1.2.
Cisco's HIGH 7.8 is defensible only in strict CVSS isolation — the vector (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) correctly captures the local-auth prerequisite. But it completely misses the blast radius. SD-WAN Manager is the control plane: root here lets an attacker push poisoned templates, modify routing policies, exfiltrate fabric-wide configurations, and persist across the entire WAN. Mandiant's June 2026 report confirmed exactly this: a state-sponsored actor chained authentication bypass CVEs to reach the CLI, exploited CVE-2026-20245 as a zero-day to create a backdoor root account (troot), exfiltrated SD-WAN configs, and pushed changes to edge devices — all while running anti-forensic cleanup scripts. The vendor severity is a significant understatement of operational risk.
6 steps from start to impact.
Reach the SD-WAN Manager CLI
- Network reachability to vManage SSH (TCP/22) or console
- Companion auth bypass CVE or stolen credentials for initial foothold
- vManage SSH should be ACL-restricted to management VLAN or jump host
- Internet-exposed instances are a minority of total deployments (~450–550 per Shodan)
Authenticate with netadmin privileges
vmanage-admin account was used after credential manipulation via companion vulnerabilities. The CVSS vector codes this as PR:L, but netadmin is a privileged management role — not an ordinary user.- Valid netadmin-level credentials (vmanage-admin, admin, or custom netadmin account)
- Or successful exploitation of CVE-2026-20127/CVE-2026-20182 for auth bypass
- Requires credential theft, brute force, or chaining with another CVE
- Organizations with MFA on SSH or certificate-only auth raise the bar
Upload a crafted CSV payload
evil_tenant.csv) to the appliance filesystem at /home/admin/. The CSV payload exploits the lack of input sanitization in the tenant-list upload handler. Public PoC from 0xBlackash demonstrates the payload structure. Mandiant published the exact payload: it backs up system files, then appends a backdoor user to /etc/passwd and /etc/shadow.- Write access to /home/admin/ on the appliance
- Knowledge of the CSV injection technique (public since June 2026)
- File integrity monitoring on /home/admin/ could detect new file creation
- The technique is now well-documented, but requires CLI access already obtained in Step 2
Trigger the vulnerable shell script
request tenant-upload tenant-list /home/admin/evil_tenant.csv vpn 0 from the CLI. This invokes vconfd_script_upload_tenant_list.sh, which processes the CSV content through an unescaped shell evaluation running as root (UID 0). The script does not validate or sanitize the file contents before passing them to shell execution.- CLI session with netadmin privileges (achieved in Step 2)
- The crafted CSV file on disk (achieved in Step 3)
- Command audit logging in /var/log/scripts.log records the tenant-upload execution
- Cisco Live Protect shield can detect this specific command pattern
Achieve persistent root access
troot:x:0:0:root:/root:/bin/bash to /etc/passwd and a corresponding shadow entry, creating a persistent backdoor root account. The attacker then used su troot to switch to the root shell. Anti-forensic scripts cleaned up artifacts and restored original files afterward.- Successful command injection from Step 4
- None at this stage — once the script executes, root is achieved with no further barriers
Pivot to fabric-wide control
- Root access on vManage (achieved in Step 5)
- SD-WAN edge devices connected to the compromised controller
- None — vManage root access inherently provides fabric-wide control by design
- Edge devices trust their controller; there is no mutual integrity validation of pushed configs
request admin-tech before upgrading to preserve forensic evidence.admin, vmanage-admin, and all netadmin-level accounts. Revoke and re-issue any certificate material used for SD-WAN peering connections. This invalidates credentials potentially stolen during the documented campaign. Deploy within 3 days per noisgate CRITICAL mitigation SLA.troot in /etc/passwd, review /var/log/scripts.log for tenant-list upload activity, check /var/log/auth.log for vmanage-admin SSH from unexpected IPs, look for hidden backup files (.orig_passwd, .orig_shadow) in /home/admin/, and scan network logs for known attacker IPs (126.51.108.152, 76.92.245.217, 207.190.37.94, 23.245.7.178, 153.186.231.233, 167.179.79.189, 45.32.38.160, 209.137.225.101). Deploy within 24 hours. This is detection, not prevention — it tells you if you were already compromised.- WAF or IPS signatures — the exploit payload is delivered via CLI file upload on the appliance itself, not over HTTP. Network-layer inspection cannot see or block the malicious CSV content.
- Disabling the web UI (port 8443) — the vulnerability is in the CLI
request tenant-uploadhandler processed by a shell script, not the web interface. Disabling the GUI has no effect on the vulnerable code path. - Read-only RBAC downgrade — the
netadminrole is required for normal SD-WAN management operations (template pushes, device onboarding, policy changes). Downgrading all administrators to read-only breaks operational functionality and is not sustainable. - Network segmentation of edge devices from vManage — edge devices MUST communicate with their controller for the SD-WAN fabric to function. Isolating them from vManage is architecturally incompatible with SD-WAN operations.
The supporting signals.
| In-the-Wild Status | Confirmed active exploitation. Mandiant documented a state-sponsored actor exploiting this as a zero-day from late 2025 through April 2026, months before the June 4, 2026 disclosure. The actor created backdoor root accounts and exfiltrated SD-WAN fabric configurations. This is the 7th actively exploited zero-day in Cisco SD-WAN products in 2026. |
|---|---|
| KEV Status | Listed June 9, 2026 — CISA added CVE-2026-20245 alongside two other vulnerabilities. Binding operational directive applies to all FCEB agencies. |
| PoC Availability | Public. 0xBlackash/CVE-2026-20245 — Python exploit script (4 stars, 1 fork). Also indexed in SecureWithUmer/CVE-2026-PoCs and on pocindex.io. Mandiant's blog published the full evil_tenant.csv payload structure including the passwd/shadow injection commands. |
| EPSS | 0.25323 (~25th percentile) — high exploitation probability, consistent with confirmed in-the-wild activity and public PoC availability. |
| CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H = 7.8 HIGH. Local access, low complexity, low privileges, no user interaction. Scope:Unchanged understates the fabric-wide blast radius. The PR:L coding is debatable — netadmin is a privileged management role, not a standard user. |
| Affected Versions | All Catalyst SD-WAN Manager, Controller, and Validator: ≤20.9.9.1, ≤20.12.7.1, ≤20.15.4.4, ≤20.15.5.2, ≤20.18.2.2, ≤26.1.1.1. All deployment types: on-prem, cloud-provisioned, cloud (Cisco-managed), and Government (FedRAMP). |
| Fixed Versions | 20.9.9.2, 20.12.7.2, 20.15.4.5, 20.15.5.3, 20.18.3.1, 26.1.1.2 |
| Scanning / Exposure | Shodan/Censys (March 2026): 450–550 internet-exposed vManage instances. FOFA: ~1,000+. ZoomEye: ~275. SD-WAN controllers are frequently internet-reachable by architectural necessity (edge device onboarding). A passive scanner for the companion CVE-2026-20127 also fingerprints exposed vManage. |
| Disclosure Timeline | Late 2025: First zero-day exploitation observed. June 4, 2026: Cisco advisory published. June 9, 2026: CISA KEV listing. June 12, 2026: Fixed releases available. June 24, 2026: Mandiant publishes full campaign analysis. |
| Reporting Researcher / Org | Discovery credited to Cisco PSIRT (internal) and Google Mandiant (incident response during a service-provider compromise). Mandiant published detailed campaign analysis on June 24, 2026. File hash IOC: b82936f37648518425c7d3cf9e09eaffa41d7cdb3840f6a40287e3a108880f7b (evil_tenant.csv). |
Sources.
- Cisco Security Advisory: cisco-sa-sdwan-privesc-4uxFrdzx
- Google Mandiant: Zero-Day Exploitation of CVE-2026-20245 in Cisco Catalyst SD-WAN Manager
- CISA KEV Catalog Addition (June 9, 2026)
- The Hacker News: Cisco Catalyst SD-WAN Manager CVE-2026-20245 Flaw Actively Exploited
- BleepingComputer: Mandiant Reveals How Cisco SD-WAN Zero-Day Attacks Gained Root Access
- 0xBlackash PoC Repository on GitHub
- SecurityWeek: Cisco SD-WAN Zero-Day Exploited Months Before Patching
- CVE Record: CVE-2026-20245
Why this verdict
- Role multiplier — canonical high-value component: SD-WAN Manager is the central orchestration plane for Cisco's SD-WAN architecture. 100% of vManage installs occupy the high-value network-orchestration role by definition. Root on vManage = ability to push configs to every edge router in the fabric = fleet-scale blast radius. Per the deployment-role floor rule, this floors the verdict at CRITICAL.
- Active zero-day exploitation by a state actor: Mandiant confirmed exploitation from late 2025 through April 2026, months before the June 4 disclosure. The attacker created backdoor root accounts, exfiltrated fabric configs, and pushed changes to edge devices. KEV-listed June 9, 2026. EPSS at 0.25 reflects high exploitation probability. This is not theoretical risk.
- Authentication gate was bypassed in the wild: The CVSS vector says AV:L/PR:L, implying the attacker needs local CLI access with at least low-privilege credentials. In practice, the documented campaign chained CVE-2026-20127 and CVE-2026-20182 (authentication bypass vulnerabilities) to reach the CLI without legitimate credentials. The friction that should narrow the reachable population was eliminated.
- No workaround available: Cisco confirms no configuration-level workaround exists. The only remediation is a software upgrade. This eliminates interim risk reduction and leaves unpatched systems fully exposed.
- Public PoC and weaponized tradecraft lower the barrier to replication: GitHub PoC from 0xBlackash, Mandiant's published payload structure (the full evil_tenant.csv injection chain), and detailed MITRE ATT&CK mapping mean any motivated attacker can reproduce the chain. The barrier to entry is now trivially low.
Why not higher?
The vulnerability requires authenticated CLI access and cannot be triggered remotely by an unauthenticated attacker in isolation — it needs chaining with a companion authentication bypass CVE or stolen credentials. The CVSS Scope is Unchanged (the root escalation stays on the same system, even though the operational impact extends to the fabric). A 10.0 would require unauthenticated remote code execution with no prerequisites.
Why not lower?
The affected component IS the network control plane — every vManage install is high-value by definition. Root access was demonstrated to enable fabric-wide configuration manipulation, edge-device policy pushes, and persistent backdoor creation. Zero-day exploitation, KEV listing, public PoC, no workaround, state-sponsored campaign activity, and 450–550+ internet-exposed instances all compound upward. Calling this HIGH would require evidence that vManage root does not translate to fabric compromise, which directly contradicts the Mandiant findings.
Crowdsourced verification payload.
Run this script directly on each Cisco Catalyst SD-WAN Manager, Controller, or Validator appliance via SSH. Example: ssh admin@vmanage01 'bash -s' < check_cve_2026_20245.sh. Requires admin-level shell access. The script checks the installed software version against known fixed versions and scans for IOCs from the Mandiant campaign.
#!/bin/bash
# check_cve_2026_20245.sh
# Checks whether CVE-2026-20245 is patched on Cisco Catalyst SD-WAN Manager/Controller/Validator
# Run on the target appliance via SSH. Requires admin-level access.
# Outputs: VULNERABLE / PATCHED / UNKNOWN
# Also checks for IOCs from the Mandiant campaign.
set -euo pipefail
VERSION=$(cat /etc/viptela/confd_version 2>/dev/null || echo "")
if [ -z "$VERSION" ]; then
echo "UNKNOWN - Could not determine SD-WAN software version. Is this a Catalyst SD-WAN appliance?"
exit 2
fi
echo "Detected SD-WAN version: $VERSION"
# Compare version against known fixed versions
# Fixed: 20.9.9.2, 20.12.7.2, 20.15.4.5, 20.15.5.3, 20.18.3.1, 26.1.1.2
version_gte() {
printf '%s\n%s' "$1" "$2" | sort -V | head -n1 | grep -qx "$2"
}
PATCHED=0
case "$VERSION" in
20.9.*)
version_gte "$VERSION" "20.9.9.2" && PATCHED=1
;;
20.12.*)
version_gte "$VERSION" "20.12.7.2" && PATCHED=1
;;
20.15.4.*)
version_gte "$VERSION" "20.15.4.5" && PATCHED=1
;;
20.15.5.*|20.15.[6-9].*|20.1[6-7].*)
version_gte "$VERSION" "20.15.5.3" && PATCHED=1
;;
20.18.*)
version_gte "$VERSION" "20.18.3.1" && PATCHED=1
;;
26.*)
version_gte "$VERSION" "26.1.1.2" && PATCHED=1
;;
*)
echo "UNKNOWN - Version $VERSION not in known affected release trains."
exit 2
;;
esac
# IOC checks regardless of patch status
echo "--- IOC Checks ---"
IOC_FOUND=0
if grep -q '^troot:' /etc/passwd 2>/dev/null; then
echo "[!] ALERT: Backdoor user 'troot' found in /etc/passwd. Investigate immediately."
IOC_FOUND=1
fi
if [ -f /home/admin/evil_tenant.csv ]; then
echo "[!] ALERT: evil_tenant.csv found. Known exploit artifact."
IOC_FOUND=1
fi
if [ -f /home/admin/.orig_passwd ]; then
echo "[!] ALERT: .orig_passwd backup found. Known anti-forensic artifact."
IOC_FOUND=1
fi
if [ -f /home/admin/.orig_shadow ]; then
echo "[!] ALERT: .orig_shadow backup found. Known anti-forensic artifact."
IOC_FOUND=1
fi
if [ -f /home/admin/.orig_vbond_vsmart_tenant_list ]; then
echo "[!] ALERT: .orig_vbond_vsmart_tenant_list backup found. Known anti-forensic artifact."
IOC_FOUND=1
fi
if grep -q 'upload_tenant_list' /var/log/scripts.log 2>/dev/null; then
echo "[*] INFO: tenant-list upload activity found in scripts.log. Review manually."
fi
# Check for any UID 0 accounts besides root
UID0_ACCOUNTS=$(awk -F: '$3 == 0 && $1 != "root" {print $1}' /etc/passwd 2>/dev/null)
if [ -n "$UID0_ACCOUNTS" ]; then
echo "[!] ALERT: Non-root UID 0 account(s) found: $UID0_ACCOUNTS"
IOC_FOUND=1
fi
if [ "$IOC_FOUND" -eq 1 ]; then
echo "[!!!] IOCs DETECTED - This system may have been compromised. Preserve evidence with 'request admin-tech' and engage IR."
fi
echo "--- End IOC Checks ---"
if [ "$PATCHED" -eq 1 ]; then
echo "PATCHED - Version $VERSION is at or above the fix for CVE-2026-20245."
exit 0
else
echo "VULNERABLE - Version $VERSION is affected by CVE-2026-20245. Upgrade immediately."
exit 1
fi