Cisco Catalyst SD-WAN Manager — CVE-2026-20245
Executive Summary
CVE-2026-20245 (CVSS 7.8) is an improper-input-validation / command-injection flaw in the CLI of Cisco Catalyst SD-WAN Manager (formerly vManage). An attacker holding netadmin credentials can upload a crafted file (e.g., a tenant-list or serial-number CSV) that is processed by privileged helper scripts such as /usr/bin/vconfd_script_upload_tenant_list.sh; those scripts fail to escape input, so embedded shell commands execute as root. Cisco PSIRT confirmed active exploitation in limited cases, including incidents where configuration changes were pushed to edge devices. CISA added it to the KEV catalog on 9 June 2026. As of this pack there is no patch — only mitigations.
The Manager is the brain of the SD-WAN fabric: root on it means the attacker can rewrite routing/segmentation policy and push malicious templates to every managed edge router. All deployment types are affected — on-prem, Cisco SD-WAN Cloud-Pro, Cisco-managed cloud, and the FedRAMP/government edition. Activity is tentatively clustered as UAT-8616, based on prior targeting of related Cisco SD-WAN bugs, implying a well-resourced (possibly state-aligned) operator.
The highest-value defensive angle is the exploitation artifact Cisco itself calls out: suspicious vconfd_script_upload_* invocations in /var/log/scripts.log with shell metacharacters in their arguments. Because SD-WAN Manager is an appliance that rarely carries a Falcon sensor, the durable detection path is to forward scripts.log and the Manager audit log to NGSIEM and hunt there, paired with strict access control on the management plane.
Defender priority: Restrict management-plane access to SD-WAN Manager to a trusted admin bastion now, forward /var/log/scripts.log to NGSIEM, and alert on any vconfd_script_upload_* entry containing shell metacharacters (; | $( ` &&) — that is the exploitation fingerprint.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Fwd |
|---|---|---|---|
| 1 | Cisco PSIRT advisory | CVSS 7.8; CLI improper input validation; netadmin→root; all deployments; active ITW; no patch | yes |
| 1 | CISA KEV (added 9 Jun 2026) | Confirmed exploited in the wild; remediation due-date set | yes |
| 2 | BleepingComputer / Help Net Security | Zero-day, no patch, root via crafted upload; config pushed to edges | yes |
| 2 | Rescana / SOC Prime | vconfd_script_upload_*.sh detail; /var/log/scripts.log; UAT-8616 cluster; ATT&CK mapping | yes |
| 2 | GBHackers / The Network DNA | Root-level command execution; affected deployment matrix | partial |
No public atomic IOCs (attacker IPs/hashes) were released as of 14 Jun 2026 — the campaign is described as limited/targeted. Detection here is behavioral and log-based, centered on the vconfd upload-script abuse signature and unauthorized config pushes.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
- H1 (high):
/var/log/scripts.logshows avconfd_script_upload_*invocation whose argument contains shell metacharacters — the injection signature. T1190 / T1068 / T1059 - H2 (high): A crafted file (tenant list / vsmart serial / chassis number) was uploaded via the Manager CLI shortly before anomalous root command execution. T1059
- H3 (high): An unauthorized SD-WAN configuration/template push to edge devices occurred outside change control. T1565 / T1505
- H4 (medium-high): A netadmin session originated from an unusual source (new IP/ASN/geo) or outside maintenance windows, preceding upload activity. T1078
- H5 (medium): The Manager appliance spawned an unexpected interactive shell, opened a new listener, or made anomalous outbound connections — post-exploitation foothold. T1059.004 / T1571
- H6 (medium): Tampering with Manager logging/defenses or new persistence (cron, account) on the appliance. T1562 / T1053
Attack chain
| # | Step | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 | Obtain / abuse netadmin access to SD-WAN Manager | Manager auth/audit log → NGSIEM | Anomalous netadmin logon (Q4) |
| 2 | Upload crafted file via CLI (tenant/serial/chassis) | scripts.log; audit log | vconfd upload invocation (Q1) |
| 3 | Injected shell command runs as root | scripts.log; appliance process telemetry | Metachars in vconfd args (Q2); root shell (Q5) |
| 4 | Push malicious config/template to edge devices | Manager change/audit log | Out-of-band config push (Q3) |
| 5 | Persistence / defense evasion on appliance | cron, account, log-clear events | Persistence & log tamper (Q6) |
Consolidated IOC Table
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| log-pattern | vconfd_script_upload_tenant_list.sh | high | hunt | Abused privileged upload helper (root) |
| log-pattern | vconfd_script_upload_vsmart_serial_numbers.sh | high | hunt | Alternate injection vector |
| log-pattern | vconfd_script_upload_chassis_number_file.sh | high | hunt | Alternate injection vector |
| file-path | /var/log/scripts.log | high | hunt | Cisco-recommended evidence source |
| behavior | Shell metacharacters in upload args (; | $( ` &&) | high | hunt | Command-injection signature |
| behavior | Unauthorized edge config/template push | high | hunt | Observed post-exploitation impact |
| cve | CVE-2026-20245 | high | detect | vManage CLI command injection, CVSS 7.8 |
| actor | UAT-8616 (suspected) | medium | pivot | Prior Cisco SD-WAN targeting |
Affected Surface & Telemetry Matrix
| Surface | Telemetry Needed | Priority | Gap Risk |
|---|---|---|---|
| Cisco Catalyst SD-WAN Manager (vManage) appliance — all deployments | /var/log/scripts.log + Manager audit/auth log forwarded to NGSIEM | Critical | High — appliances rarely run a Falcon sensor; logs must be explicitly forwarded |
| SD-WAN edge routers (managed devices) | Config/template change events; routing-policy deltas | High | Change events may not reach SIEM |
| Management-plane network path to the Manager | Firewall/NetFlow to the Manager admin interface | Medium | East-west visibility gaps |
| Admin bastion / jump host (netadmin origin) | UserLogon, ProcessRollup2 (if Falcon-covered) | Medium | Low if bastion is endpoint-covered |
⚠ Telemetry reality: The CQL in §8 assumes SD-WAN Manager logs are ingested into NGSIEM/LogScale (a custom repo). Field names depend on your parser — validate against your ingest before relying on them. Where a Falcon sensor is present on a related host, the process-based variants apply directly.
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1190 Exploit Public-Facing App | CLI upload command injection | Q1 / Q2 · harden §12 |
| Privilege Escalation | T1068 Exploitation for PrivEsc | netadmin → root via vconfd scripts | Q1 / Q2 |
| Execution | T1059 Command & Scripting Interpreter | Injected shell commands run as root | Q2 / Q5 |
| Valid Accounts | T1078 Valid Accounts | netadmin credentials used | Q4 |
| Impact / Persistence | T1565 Data Manipulation | Unauthorized config push to edges | Q3 |
| Defense Evasion | T1562 Impair Defenses | Log tampering on appliance | Q6 |
| Persistence | T1053 Scheduled Task/Cron | New cron / account on Manager | Q6 |
| Command & Control | T1571 Non-Standard Port | Anomalous outbound / listener | Q5 |
Native Audit-Log Hunts (non-CQL)
- On the Manager appliance (Cisco-recommended): inspect
/var/log/scripts.logforvconfd_script_upload_*entries, especially any with shell metacharacters or non-standard / maliciously named CSV references. - Manager audit log: review file-upload events and template/config-push actions; correlate each push to an approved change ticket. Flag any push with no corresponding change record.
- Edge device config diff: compare running config / applied templates on managed routers against the last known-good baseline for unexpected segmentation or routing changes.
- netadmin session review: list recent netadmin logons to the Manager — source IP/geo, time-of-day, and session duration; flag logins from new sources or outside maintenance windows.
- Appliance integrity: check for new local accounts, cron entries, modified
/usr/bin/vconfd_script_upload_*.sh, and gaps/clears inscripts.logand syslog.
CrowdStrike LogScale CQL Hunt Queries
#repo=sdwan_manager and parsed field names with your ingest's actual values. Q5–Q6 are Falcon endpoint queries that apply where a sensor covers the host.Looks for: any invocation of the privileged upload helper scripts in the Manager's scripts.log. FP: legitimate tenant/serial onboarding uses the same scripts — pair with Q2 (metachars) and change-control correlation before alerting.
// HUNT: vconfd_script_upload_* invocation in SD-WAN Manager scripts.log // MITRE: T1190, T1068 // CONF: high FP: medium COST: low | REQUIRES: ingested /var/log/scripts.log (custom repo) // FALSE POSITIVES: legitimate tenant/serial/chassis onboarding // TUNING: correlate to approved change windows; combine with Q2 metachar signature #repo=sdwan_manager | @rawstring=/vconfd_script_upload_(tenant_list|vsmart_serial_numbers|chassis_number_file)\.sh/ | table([@timestamp, host, @rawstring], limit=200)
Looks for: a vconfd upload event whose payload/argument carries shell metacharacters — the actual command-injection fingerprint. Very low FP: benign CSV file names do not contain these.
// HUNT: command-injection metacharacters in vconfd upload // MITRE: T1059, T1068 // CONF: high FP: low COST: low | REQUIRES: ingested scripts.log // FALSE POSITIVES: none expected; benign uploads have no shell metacharacters #repo=sdwan_manager | @rawstring=/vconfd_script_upload_\w+\.sh/ | @rawstring=/[;`|]|\$\(|&&|\|\||\bnc\b|\bbash\b|\bcurl\b|\bwget\b/ | table([@timestamp, host, @rawstring], limit=200)
Looks for: template attach / config-push events from the Manager audit log outside maintenance windows. FP: legitimate change activity — exclude approved change windows and known automation accounts.
// HUNT: out-of-band edge config/template push // MITRE: T1565 // CONF: high FP: medium COST: low | REQUIRES: ingested Manager audit log // FALSE POSITIVES: scheduled/approved changes // TUNING: exclude approved change windows + automation service accounts #repo=sdwan_manager | @rawstring=/(template-attach|push-config|config-push|device-template)/i | user!=/^(svc-automation|change-bot)$/i | groupBy([user, host], function=count()) | sort(_count, order=desc)
Looks for: netadmin authentications to the Manager grouped by source — surface new/rare source IPs. FP: legitimate admins from new locations — baseline known admin egress IPs and exclude the bastion.
// HUNT: rare-source netadmin logon to SD-WAN Manager // MITRE: T1078 // CONF: medium FP: medium COST: low | REQUIRES: ingested Manager auth log // FALSE POSITIVES: admins from new but legitimate locations // TUNING: exclude the admin bastion IP/CIDR and known admin egress IPs #repo=sdwan_manager | @rawstring=/login|auth|session/i AND @rawstring=/netadmin/i | src_ip!=/^10\.0\.0\./ | groupBy([src_ip, user], function=count()) | sort(_count, order=asc)
Looks for: a vconfd/upload-script parent spawning a shell, or network tools (nc/curl/wget) — post-exploitation foothold. Applies only where a Falcon Linux sensor covers the host. ⚠ Field unverified on appliance
// HUNT: root shell / net tools spawned in vconfd context // MITRE: T1059.004, T1571 // CONF: medium FP: low COST: low | REQUIRES: ProcessRollup2 (Falcon Linux sensor) // FALSE POSITIVES: rare; appliance should not run these interactively #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/vconfd|script_upload/i | ImageFileName=/(\/|\\)(bash|sh|dash|nc|ncat|curl|wget|python3?)$/i | table([@timestamp, ComputerName, aid, ParentBaseFileName, ImageFileName, CommandLine, UserName], limit=200)
Looks for: new cron entries, user-add, or log-clear actions on the Manager — persistence and defense evasion. FP: legitimate admin maintenance — scope to off-hours and unknown accounts.
// HUNT: persistence / log tamper on SD-WAN Manager // MITRE: T1053, T1562, T1136 // CONF: medium FP: medium COST: low | REQUIRES: ingested appliance audit/syslog // FALSE POSITIVES: legitimate admin maintenance // TUNING: scope to off-hours; exclude known admin accounts #repo=sdwan_manager | @rawstring=/crontab|useradd|adduser|usermod|truncate.*scripts\.log|rm\s+.*\/var\/log/i | table([@timestamp, host, user, @rawstring], limit=200)
CrowdStrike Custom IOA Recommendations
| Detection | Pattern | Exclusions | Action |
|---|---|---|---|
| vconfd Injection (NGSIEM scheduled search) | vconfd upload event + shell metacharacters (Q2) | None | Alert — Critical |
| Out-of-band Edge Push (scheduled search) | Config/template push with no change ticket (Q3) | Approved change windows, automation accounts | Alert — High |
| Appliance Root Shell (Custom IOA, if sensor present) | vconfd/upload parent → shell/net-tool child (Q5) | None | Detect → Block |
Because the Manager is usually sensor-less, the primary alerts here are NGSIEM scheduled searches over ingested appliance logs (Q2, Q3), not endpoint Custom IOAs. Q5 becomes an IOA only where a Falcon Linux sensor covers the host.
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags ipv4,REPLACE_WITH_ATTACKER_SRC_IP,detect,high,2026-12-14,CVE-2026-20245 mgmt-plane source,campaign:SDWAN-CVE-2026-20245 domain,REPLACE_WITH_C2,detect,high,2026-09-14,post-exploitation C2,campaign:SDWAN-CVE-2026-20245 sha256,REPLACE_WITH_PAYLOAD_SHA256,prevent,critical,2026-12-14,injected payload,campaign:SDWAN-CVE-2026-20245
scripts.log: vconfd_script_upload_tenant_list.sh scripts.log: vconfd_script_upload_vsmart_serial_numbers.sh scripts.log: vconfd_script_upload_chassis_number_file.sh upload arg containing: ; | ` $( && nc/bash/curl/wget Out-of-band template/config push to edge devices New cron/user or scripts.log truncation on the Manager
Product: Cisco Catalyst SD-WAN Manager (formerly vManage) Evidence file: /var/log/scripts.log Vulnerable scripts: /usr/bin/vconfd_script_upload_*.sh Affected: on-prem, Cloud-Pro, Cisco-managed, FedRAMP/Gov Access required: authenticated netadmin -> root Suspected actor: UAT-8616
CVE-2026-20245 — NO PATCH as of 2026-06-14 (KEV added 2026-06-09) Mitigate: restrict mgmt-plane access to a trusted admin bastion only Mitigate: enforce MFA on all netadmin accounts Audit: scripts.log forwarded to NGSIEM? (y/n) Audit: edge config-push events alert on no-change-ticket? (y/n) Watch: Cisco PSIRT for fixed release; apply on availability
Detection Validation Gates
| Gate | Check | Pass Criteria |
|---|---|---|
| Telemetry ready | SD-WAN Manager scripts.log + audit log land in NGSIEM (#repo=sdwan_manager or equivalent) | Events visible within ingest SLA; fields parsed |
| Baseline | Run Q1 + Q3 over 14 days; catalog legitimate onboarding uploads and approved pushes | Exclusions captured before alerting |
| Positive test | In a lab Manager, submit a benign upload whose name contains a metacharacter | Q2 fires; Q1 records the invocation |
| Promotion | Q2 reviewed clean for 7 days | Promote Q2 to a Critical scheduled-search alert |
Hardening — Tiered & Deployable
- Restrict management-plane access to SD-WAN Manager to a dedicated admin bastion / allow-listed CIDR only; remove any internet exposure of the admin interface. (MITRE M1030 Network Segmentation / M1035 Limit Access to Resource Over Network)
- Forward
/var/log/scripts.logand the Manager audit log to NGSIEM and enable the Q2 injection alert. (M1047 Audit) - Enforce MFA on all netadmin accounts and review the netadmin roster for stale/over-privileged users. (M1032 MFA / M1018 User Account Management)
- Tighten change control on config/template pushes — require ticket correlation; alert on any push without one (Q3). (M1047 Audit)
- Least privilege for netadmin — split read vs. config-push roles where the platform supports it. (M1026 Privileged Account Management)
- Edge config integrity baseline — snapshot known-good templates and diff regularly. (M1047)
- Apply the Cisco fix as soon as released, then move CVE-2026-20245 to "patched" in this pack. (M1051 Update Software)
- ZTNA / PAM in front of the management plane so netadmin sessions are brokered, recorded, and MFA-gated. (M1035 / M1026)
- Out-of-band management network isolating all SD-WAN control-plane appliances from user/data VLANs. (M1030)
Deployable Playbooks
1 — Inspect scripts.log on the Manager for the injection signature
#!/usr/bin/env bash # Run on the SD-WAN Manager (or over forwarded logs). Flags vconfd uploads # whose lines contain shell metacharacters. LOG=/var/log/scripts.log grep -E 'vconfd_script_upload_[a-z_]+\.sh' "$LOG" \ | grep -E '[;`|]|\$\(|&&|\bnc\b|\bbash\b|\bcurl\b|\bwget\b' \ | tee /tmp/vconfd_injection_hits.txt echo "[*] $(wc -l < /tmp/vconfd_injection_hits.txt) suspicious line(s)"
2 — NGSIEM scheduled-search alert (LogScale syntax) for Q2
# Schedule this as a recurring search; severity Critical, notify SOC. #repo=sdwan_manager | @rawstring=/vconfd_script_upload_\w+\.sh/ | @rawstring=/[;`|]|\$\(|&&|\|\||\bnc\b|\bbash\b|\bcurl\b|\bwget\b/
3 — Restrict management access (edge ACL fronting the Manager)
# Example: only the admin bastion subnet may reach the Manager admin UI/SSH. ip access-list extended SDWAN-MGR-ACCESS permit ip 10.10.10.0 0.0.0.255 host <SDWAN_MANAGER_IP> deny ip any host <SDWAN_MANAGER_IP> log # Apply inbound on the interface facing the management network.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Restrict the Manager to bastion-only access; suspend suspect netadmin accounts; freeze config/template pushes | Network / SOC | ACL change; account-disable record |
| Eradicate | Capture scripts.log; identify injected commands & artifacts; remove unauthorized cron/accounts; restore tampered vconfd scripts from vendor image | IR / Network | scripts.log excerpt; diff vs. clean image |
| Recover | Revert unauthorized edge config/template pushes to known-good; rebuild the Manager from clean image if root persistence confirmed; rotate all netadmin creds & certs | Network / IR | Edge config diff; rebuild record |
| Patch watch | Track Cisco PSIRT; apply fixed release the moment it ships | Platform | Advisory link; patch evidence |
Detection Coverage Map
| Technique | Behavior | CQL | IOA/Alert | Coverage |
|---|---|---|---|---|
| T1190/T1068 | vconfd upload injection | Q1,Q2 | ✓ (scheduled search) | Good (if logs ingested) |
| T1565 | Out-of-band edge push | Q3 | ✓ | Partial (needs change-data) |
| T1078 | netadmin abuse | Q4 | — | Partial (baseline-dependent) |
| T1059.004/T1571 | Root shell / C2 on appliance | Q5 | conditional | GAP (no sensor on appliance) |
| T1053/T1562 | Persistence / log tamper | Q6 | — | Partial |
Known gaps: the dominant gap is telemetry on the appliance itself — SD-WAN Manager usually has no Falcon sensor, so Q5 only works where one is present and all other coverage depends on forwarding scripts.log + audit log to NGSIEM (§12 Immediate). No atomic IOCs are published, so the IOC CSV uses placeholders. Validate parser field names before promoting any query to alert.
Hunt Summary Ticket
TITLE: Hunt — Cisco Catalyst SD-WAN Manager RCE CVE-2026-20245 (vconfd)
SEVERITY: Critical (exploited ITW, KEV 2026-06-09, NO PATCH; netadmin->root)
SCOPE: All SD-WAN Manager instances (on-prem/Cloud-Pro/Cisco-managed/Gov)
HYPOTHESIS: Attacker with netadmin uploaded a crafted file processed by
vconfd_script_upload_*.sh, injecting root commands and pushing
malicious config to edge devices
QUERIES: Q1 vconfd invocation · Q2 metachar injection · Q3 OOB edge push
Q4 rare netadmin logon · Q5 appliance root shell · Q6 persistence
DO FIRST: Restrict mgmt-plane to bastion; forward scripts.log to NGSIEM;
enable Q2 alert; run Q1+Q2 across all Managers
FINDINGS: <record host, user, scripts.log line, edge push, timestamps>
GAPS: No sensor on appliance; no public atomic IOCs; no vendor patch yet
ACTIONS: Isolate Manager, eradicate injected artifacts, revert edge config,
rotate netadmin creds, watch Cisco PSIRT for patch
OWNER: HuntPack
VERSION: v0.2 (2026-06-14)
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 | The Hacker News — Cisco SD-WAN Manager CVE-2026-20245 | Overview, no-patch status | 2026-06-14 |
| 1 | BleepingComputer — exploited to gain root | Exploitation, edge config push | 2026-06-14 |
| 1 | Help Net Security — 0-day exploited | Timeline, affected deployments | 2026-06-14 |
| 2 | Rescana — active exploitation alert | vconfd scripts, scripts.log, UAT-8616, ATT&CK | 2026-06-14 |
| 2 | SOC Prime — CVE-2026-20245 analysis | Detection detail | 2026-06-14 |
| 2 | GBHackers — root-level command execution | Mechanism, CVSS | 2026-06-14 |