Arista VeloCloud Orchestrator On-Prem — CVE-2026-16812
Executive Summary
Arista Security Advisory 0144 (2026-07-27) discloses CVE-2026-16812, an OS command injection flaw (CWE-78, CVSS v3.1 and v4.0 base score 10.0) in VeloCloud Orchestrator (VCO) On-Prem. Privileged internal functionality that was never intended to be remotely reachable is exposed on the VCO web interface. Arista states plainly that "VCO is exposed by default. There is no configuration that can prevent the exposure," and that tenant or operator credentials are not required. The vulnerability was discovered externally and is known to be actively exploited; CISA added it to the KEV catalog on 2026-07-27 with a three-day federal remediation deadline of 2026-07-30 under BOD 26-04.
Why the blast radius is bigger than one box. The attacker objective here is not the orchestrator VM, it is everything the orchestrator holds. A VCO instance is the control plane for an entire SD-WAN fabric: it stores orchestrator databases, SD-WAN configuration, device inventory, and the credentials and cryptographic key material for every managed VeloCloud Edge. Arista's own post-remediation guidance says compromise "may allow attackers access to the VeloCloud Edge devices as well" and calls for credential rotation, validation of managed device state, and restoration or replacement of affected orchestrator instances from trusted sources. Treat a confirmed hit as a fabric-wide credential-compromise event, not a single-host incident.
Highest-value defensive angle. Arista published exactly three atomic indicators — the source IPs observed conducting the attacks — and nothing else: no payload hashes, no webshell names, no exploit path, no actor attribution. So the pack is built in two layers. Layer one is a cheap, high-confidence sweep of network telemetry from any Falcon sensor for those three IPs, inbound and outbound. Layer two is behavioural Linux post-exploitation hunting on the orchestrator host itself: a shell spawned by the web tier, reverse-shell command lines, curl/wget/python staging, cron and systemd persistence, database export and key-material access, and abnormal fan-out from the orchestrator toward managed Edges.
Defender priority: patch to a fixed VCO release (5.2.3.14 / 6.1.3.4 / 6.4.2.4 / 7.0.0.1) or take the web interface off any untrusted network today. Then hunt — an exploited orchestrator that is patched afterwards is still an orchestrator whose Edge credentials and keys are in someone else's hands. Patching closes the door; it does not evict the guest.
Source Review & Web Hunter Notes
Nine sources were fetched and snapshotted verbatim into Arista-VeloCloud-CVE-2026-16812-Hunt-sources/. Every atomic indicator shipped in this pack traces back to at least one of those snapshots.
| Tier | Source | Key finding | Carry forward |
|---|---|---|---|
| T1 | Arista Security Advisory 0144 | Primary. CVE ID, CVSS 10.0 (v3.1 and v4.0), CWE-78, affected/fixed version trains, the three attacker IPs, the IOC-review checklist, mitigation and post-remediation guidance. | Yes |
| T1 | CISA KEV catalog feed | dateAdded 2026-07-27, dueDate 2026-07-30, BOD 26-04 required action, knownRansomwareCampaignUse "Unknown". | Yes |
| T1 | NVD CVE-2026-16812 | Confirms both CVSS vectors, CWE-78, and the affected version ranges (5.2.0, 6.1.0, 6.4.0, 7.0.0 trains). | Yes |
| T2 | BleepingComputer | Corroborates the three IPs, the fixed versions, and the CISA deadline. Hosted and Dedicated VCO patched in advance. | Yes |
| T2 | The Hacker News | Fullest quoting of the advisory; confirms Arista disclosed no exploitation detail, scale, or actor. Notes the log-preservation instruction. | Yes |
| T2 | SecurityWeek | Adds the defender checklist Arista published: unusual URL-like path components, outbound HTTP/S from the VCO host, privileged actions outside admin workflows, DB exports, key-material access. | Yes |
| T2 | The Register | Confirms on-prem only, exposed-by-default, and that Arista declined to say who, when, or how many. | Partial |
| T2 | Security Affairs | Corroborates the three IPs. Date error: states the KEV due date as "July 20, 2026", contradicting the KEV feed. The feed value (2026-07-30) is what this pack carries. | Partial |
| T3 | Cybersecurity News | Corroborates the three IPs and the CVSS vector. Version strings are corrupted by inline footnote markers ("5.2.3.145", "6.1.3.46", "7.0.0.17"). Nothing from its version list is used. | Partial |
Hunter notes and decisions
- No prompt-injection or agent-directed text was found in any fetched source. All nine pages were checked for text addressed to an automated system; none was present. No source was dropped for that reason.
- The CISA KEV HTML page returned HTTP 403 to the fetcher. The machine-readable KEV feed (same catalog) was snapshotted instead and is the authoritative due-date reference.
- Two press sources contain factual errors (see table). Both are retained as corroboration of the three IPs only; their erroneous fields are explicitly not carried forward.
- No exploitation detail exists publicly. There is no published request path, parameter, payload, webshell name, file hash, or C2 domain. This pack therefore ships three atomic IPs and a body of behavioural logic. Anything else in the IOC appendix is a labelled
REPLACE_WITH_placeholder — deliberately, so nobody blocks a fabricated indicator. - Attribution is unknown. No actor, no campaign name, no ransomware association (KEV records "Unknown"). Do not assume a ransomware playbook follows.
Hunt Brief & Attack Chain
The chain below is inferred from the vulnerability class and Arista's own IOC-review checklist, not from published attacker tradecraft. Steps 1 and 2 are stated by the vendor; steps 3 onward are the standard consequences of unauthenticated command execution on a Linux management appliance and are exactly the behaviours Arista tells operators to look for. They are labelled as hypotheses, not observations.
| # | Step | Basis | Telemetry | Hunt angle |
|---|---|---|---|---|
| 1 | Unauthenticated request reaches privileged internal functionality on the VCO web interface | Vendor-stated | VCO web access logs, reverse proxy / WAF, NetFlow, firewall | Q10 (web log path/encoding anomalies), Q1 (inbound from published IPs) |
| 2 | OS command executed on the VCO host with privileged context | Vendor-stated (CWE-78) | Falcon Linux process telemetry if a sensor is installed on the VCO VM | Q3 (shell parented by the web/app tier) |
| 3 | Interactive access established — reverse shell or bind shell | Hypothesis | ProcessRollup2, NetworkConnectIP4 | Q4 (reverse-shell command lines), Q2 (egress to published IPs) |
| 4 | Second-stage tooling staged onto the host | Hypothesis (vendor flags "unexpected file creation") | ProcessRollup2, ELFFileWritten | Q5 (curl/wget/python fetch), Q7 (writes to world-writable paths) |
| 5 | Persistence planted — cron, systemd unit, SSH authorized_keys, or a new local account | Hypothesis | ProcessRollup2, CriticalFileModified, ScheduledTaskRegistered | Q6, Q7 |
| 6 | Orchestrator data collected — database export, config archive, device inventory, certificates and key material | Vendor-flagged review item | ProcessRollup2 | Q8 (dump/archive/key-material tooling) |
| 7 | Exfiltration over HTTP/S from the VCO host | Vendor-flagged review item | NetworkConnectIP4, DnsRequest, perimeter logs | Q2, plus egress baselining in Q9 |
| 8 | Downstream abuse of harvested SD-WAN credentials against managed Edge devices | Vendor-stated risk ("may allow attackers access to the VeloCloud Edge devices as well") | ProcessRollup2, UserLogon, Edge/RADIUS/TACACS logs | Q9 (fan-out from the orchestrator), native hunts in §7 |
Hunt hypotheses (fidelity-ordered)
| # | Hypothesis | MITRE | Falcon events | Expected FP source | Conf |
|---|---|---|---|---|---|
| H1 | A sensored host in the estate accepted an inbound connection from one of the three Arista-published attacker IPs. | T1190 | NetworkReceiveAcceptIP4 | None expected — vendor-attributed infrastructure | HIGH |
| H2 | A sensored host initiated an outbound connection to one of the three IPs (C2 or exfil channel). | T1071.001 | NetworkConnectIP4 | Security scanners, threat-intel enrichment proxies | HIGH |
| H3 | The VCO web/application tier spawned a POSIX shell — the direct signature of command injection. | T1190, T1059.004 | ProcessRollup2 | Appliance self-management, backup and upgrade scripts | HIGH |
| H4 | A reverse-shell or shell-redirection command line ran on a Linux host in the management VLAN. | T1059.004 | ProcessRollup2 | Admin troubleshooting, monitoring plugins using nc | HIGH |
| H5 | Download tooling fetched a remote payload onto the orchestrator host. | T1105 | ProcessRollup2, ELFFileWritten | Package managers, health checks, license refresh | MEDIUM |
| H6 | Persistence was planted via cron, systemd, a new account, or an SSH key. | T1053.003, T1543.002, T1098.004 | ProcessRollup2, CriticalFileModified | Configuration management, vendor upgrade routines | MEDIUM |
| H7 | Orchestrator databases, certificates or Edge key material were read, dumped or archived. | T1005, T1552.001, T1560.001 | ProcessRollup2 | Scheduled backups, support-bundle generation | MEDIUM |
| H8 | The orchestrator fanned out to an abnormal number of managed devices using ssh/scp/curl — harvested-credential abuse. | T1078 | ProcessRollup2 | Legitimate mass config push, firmware campaigns | MEDIUM |
| H9 | The VCO web access log contains requests with unusual URL-like path components, encoded characters, or command metacharacters. | T1190 | Third-party HTTP logs in NG-SIEM | Vulnerability scanners, broken clients, internal tooling | MEDIUM |
Telemetry reality check: H3 through H8 all assume a Falcon Linux sensor is installed on the VCO virtual appliance. Many organisations run vendor appliances unsensored — see §5 and §15 for exactly which queries degrade to nothing in that case, and what replaces them.
Consolidated IOC Table
Arista published three atomic indicators and stated there is "no single definitive indicator" for this vulnerability. Everything else below the line is behavioural. No hashes, domains, URLs, webshell filenames or payload artifacts have been published by any source — this pack invents none.
| Type | Value | Conf | Action | Context | Expiry |
|---|---|---|---|---|---|
| ipv4 | 8.19.75.217 | HIGH | detect / block | Arista-published source IP observed conducting CVE-2026-16812 attacks | 2027-01-30 |
| ipv4 | 206.72.242.124 | HIGH | detect / block | Arista-published source IP observed conducting CVE-2026-16812 attacks | 2027-01-30 |
| ipv4 | 206.72.242.162 | HIGH | detect / block | Arista-published source IP observed conducting CVE-2026-16812 attacks | 2027-01-30 |
| version | VCO On-Prem 5.2.x before 5.2.3.14 | HIGH | audit | Vulnerable build — inventory signal, not an attack indicator | n/a |
| version | VCO On-Prem 6.1.x before 6.1.3.4 | HIGH | audit | Vulnerable build — inventory signal, not an attack indicator | n/a |
| version | VCO On-Prem 6.4.x before 6.4.2.4 | HIGH | audit | Vulnerable build — inventory signal, not an attack indicator | n/a |
| version | VCO On-Prem 7.0.x before 7.0.0.1 | HIGH | audit | Vulnerable build — inventory signal, not an attack indicator | n/a |
| behavioural | POSIX shell parented by the VCO web/application process | HIGH | hunt | Direct consequence of CWE-78 on this platform | 2026-10-30 |
| behavioural | Outbound HTTP/S from the VCO host to a non-Arista destination | MEDIUM | hunt | Vendor-flagged review item | 2026-10-30 |
| behavioural | Database export, archive creation, or key-material access on the VCO host | MEDIUM | hunt | Vendor-flagged review item | 2026-10-30 |
| behavioural | Web requests with unusual URL-like path components or encoded characters against the VCO UI | MEDIUM | hunt | Vendor-flagged review item | 2026-10-30 |
Not published, do not fabricate: exploit request path, injected parameter, payload hash, webshell name, C2 domain, actor or campaign name, first-exploitation date, victim count. If a feed or a colleague hands you one of these, verify it against Arista Advisory 0144 before it enters a blocklist.
Affected Surface & Telemetry Matrix
| Surface | In scope? | Required telemetry | Priority | Gap risk |
|---|---|---|---|---|
| VeloCloud Orchestrator On-Prem (Linux VM / appliance) | Yes — the vulnerable asset | Falcon Linux sensor: ProcessRollup2, NetworkConnectIP4, ELFFileWritten, CriticalFileModified | CRITICAL | HIGH — appliances are frequently unsensored |
| VCO web interface (reverse proxy / load balancer / WAF in front) | Yes — the attack surface | HTTP access logs ingested into NG-SIEM; WAF events | CRITICAL | MEDIUM — depends on log shipping |
| Perimeter firewall / NetFlow at the management boundary | Yes — inbound and egress evidence | Firewall accept/deny logs, NetFlow, proxy logs | CRITICAL | MEDIUM |
| Any Falcon-sensored host in the estate | Yes — IP sweep only | NetworkConnectIP4, NetworkReceiveAcceptIP4 | HIGH | LOW |
| VeloCloud Edge devices | Indirect — downstream victim of stolen credentials/keys | Edge syslog, config-change audit, AAA (RADIUS/TACACS) logs | HIGH | HIGH — no Falcon sensor on Edges |
| VeloCloud Gateway | No — Arista lists Gateway as not affected | n/a | LOW | n/a |
| VCO Hosted / VCO Dedicated | No — patched by Arista in advance of the advisory | n/a | LOW | n/a |
| Arista EOS switches, CloudVision, Wireless APs, NDR, NG Firewall | No — explicitly listed as not affected | n/a | LOW | n/a |
Be honest about the sensor gap. A VeloCloud Orchestrator appliance may well carry no Falcon sensor — vendor-supported virtual appliances often prohibit or complicate third-party agents. If that is your situation, Q3 through Q9 will return zero rows and that zero means nothing, not "clean". Your evidence then comes from: (a) Q1/Q2 run estate-wide, which still catch anything the orchestrator talked to that is sensored; (b) Q10 against VCO web access logs shipped into NG-SIEM; (c) the native, on-appliance checks in §7; and (d) perimeter firewall and NetFlow records. Record which of these you actually have before you call the hunt complete.
ATT&CK Mapping
| Tactic | Technique | Behaviour in this threat | Query / control |
|---|---|---|---|
| Initial Access | T1190 — Exploit Public-Facing Application | Unauthenticated OS command injection against the VCO web interface (CWE-78) | Q1, Q10 · patch, network restriction |
| Execution | T1059.004 — Unix Shell | Shell spawned in the context of the orchestrator web/application tier | Q3, Q4 |
| Command and Control | T1071.001 — Application Layer Protocol: Web Protocols | Outbound HTTP/S from the VCO host; Arista flags unexpected outbound HTTP/S as a review item | Q2, Q5 |
| Command and Control | T1219 — Remote Access Tools / reverse shell | Interactive channel back to attacker infrastructure | Q4 |
| Command and Control | T1105 — Ingress Tool Transfer | Second-stage tooling fetched onto the orchestrator | Q5, Q7 |
| Persistence | T1053.003 — Scheduled Task/Job: Cron | Cron entry planted for re-entry | Q6, Q7 |
| Persistence | T1543.002 — Create or Modify System Process: Systemd Service | Malicious systemd unit installed and enabled | Q6, Q7 |
| Persistence | T1098.004 — Account Manipulation: SSH Authorized Keys | Attacker key appended to authorized_keys on the appliance | Q6, Q7 |
| Credential Access | T1552.001 / T1552.004 — Credentials in Files / Private Keys | Edge credentials, certificates and key material read from the orchestrator | Q8 |
| Collection | T1005 — Data from Local System | Orchestrator database contents, configuration, device inventory | Q8 |
| Collection | T1560.001 — Archive Collected Data via Utility | tar/zip/gzip staging of exported data before exfil | Q8 |
| Exfiltration | T1041 — Exfiltration Over C2 Channel | Staged archive pushed out over the same HTTP/S channel | Q2, Q5 |
| Lateral Movement | T1078 — Valid Accounts | Harvested SD-WAN credentials reused against managed Edge devices | Q9 · credential rotation |
| Defense Evasion | T1070 — Indicator Removal | Log tampering on the orchestrator; Arista tells operators to preserve logs before remediation | §7 native hunts, §13 playbook 3 |
Native Audit-Log Hunts (non-CQL)
These run where Falcon cannot see. They follow Arista's own IOC-review checklist. Everything here is read-only evidence collection — run it before you patch or rebuild, because upgrading destroys the timeline.
A. VCO web access logs
- Requests from
8.19.75.217,206.72.242.124,206.72.242.162— any method, any status, including 4xx/5xx. A 500 from these sources is as interesting as a 200. - Unusual URL-like path components, encoded characters (
%00,%2e%2e,%2f,%3b,%7c,%60), or references to local/internal services. - Abnormally high request rates from a single source, or bursts of requests to endpoints your admins never touch.
- Requests to internal-only endpoints arriving from outside the management network.
B. VCO backend application, system and database logs
- Command execution, file creation, database export or archive artifacts on the VCO host with no matching change ticket.
- Privileged maintenance actions outside expected administrative workflows.
- Sensitive configuration changes with no corresponding administrator activity.
- Access to VCO database contents, configuration data, device inventory, credentials, certificates or key material.
- Authentication logs (
/var/log/auth.logor/var/log/secure): new accounts, sudo use by service identities, SSH key-based logins from unfamiliar sources.
C. On-appliance read-only triage (before remediation)
# Read-only. Capture output off-box. Do NOT remediate before collecting.
# 1. Recently modified files across the appliance (last 30 days)
find / -xdev -mtime -30 -type f -printf '%TY-%Tm-%Td %TH:%TM %p\n' 2>/dev/null | sort
# 2. Persistence surfaces
crontab -l ; ls -la /etc/cron.d /etc/cron.daily /etc/cron.hourly
systemctl list-unit-files --state=enabled
systemctl list-timers --all
find /home /root -name authorized_keys -exec ls -la {} \; 2>/dev/null
# 3. Accounts and privilege
awk -F: '$3 < 1000 {print}' /etc/passwd
getent group sudo wheel 2>/dev/null
last -F -n 100
# 4. Live network state and listeners
ss -tunap
ip route show ; ip neigh show
# 5. Running processes and their parents
ps -eo pid,ppid,user,lstart,etime,cmd --sort=start_time
# 6. Preserve, then hash, then hand to IR
tar -czf /var/tmp/vco-evidence.tgz /var/log 2>/dev/null
D. Perimeter, proxy and NetFlow
- Any flow to or from the three published IPs, in either direction, for the full retention window — not just since the advisory.
- Outbound HTTP/S from the VCO management address to anything that is not an Arista update or licensing endpoint.
- Large egress volumes from the management VLAN, especially to cloud storage or paste services.
- Confirm whether the VCO web interface was ever reachable from the internet or from user VLANs. Arista notes it is exposed by default.
E. Downstream Edge fabric
- Edge configuration changes, firmware pushes or tunnel re-establishments that do not map to a change record.
- AAA logs (RADIUS/TACACS) for orchestrator service accounts authenticating from unexpected sources.
- Certificate and key rotation status for every managed Edge — Arista's post-remediation guidance treats this as mandatory after suspected compromise.
CrowdStrike LogScale CQL Hunt Queries
No query carries an in-query time filter. Set the window with the console time picker; each card records the intended lookback as a // LOOKBACK: comment. For the three published IPs, run the maximum retention you have — Arista never said when exploitation began.
Looks for: any Falcon-sensored host that accepted an inbound connection from one of the three IPs Arista published as conducting the attacks. This is the single highest-fidelity query in the pack and costs almost nothing to run. FP: effectively none — these are vendor-attributed attack sources; the only benign explanation is your own red team or a scanner egressing through that space.
// HUNT: Inbound connection from a published CVE-2026-16812 attacker IP // MITRE: T1190 | CONF: high FP: low COST: low // REQUIRES: Falcon network telemetry from any sensored host (NetworkReceiveAcceptIP4) // LOOKBACK: maximum available retention - exploitation start date is unpublished // FALSE POSITIVES: authorised scanning or red-team egress sharing the same netblock // TUNING: if a hit resolves to your own scanner, exclude by aid, never by removing the IP #event_simpleName=/^NetworkReceiveAcceptIP4$/ | in(RemoteAddressIP4, values=["8.19.75.217", "206.72.242.124", "206.72.242.162"]) | table([@timestamp, aid, ComputerName, LocalAddressIP4, LocalPort, RemoteAddressIP4, RemotePort, ContextBaseFileName]) | sort(@timestamp, order=desc, limit=500)
Looks for: egress from any sensored host to the three IPs, with the initiating process name. An outbound hit is materially worse than an inbound one — it implies the host is talking back, not merely being probed. FP: threat-intel enrichment proxies and sandbox detonation hosts legitimately reach out to flagged infrastructure; exclude those roles by aid.
// HUNT: Outbound connection to a published CVE-2026-16812 attacker IP // MITRE: T1071.001, T1041 | CONF: high FP: low COST: low // REQUIRES: Falcon network telemetry from any sensored host (NetworkConnectIP4) // LOOKBACK: maximum available retention // FALSE POSITIVES: TI enrichment proxies, sandbox detonation hosts, security scanners // TUNING: exclude known enrichment/sandbox hosts by aid; do not exclude by RemotePort #event_simpleName=/^NetworkConnectIP4$/ | in(RemoteAddressIP4, values=["8.19.75.217", "206.72.242.124", "206.72.242.162"]) | table([@timestamp, aid, ComputerName, ContextBaseFileName, LocalAddressIP4, RemoteAddressIP4, RemotePort, Protocol_decimal]) | sort(@timestamp, order=desc, limit=500)
Looks for: the direct fingerprint of OS command injection on a Linux web application — a shell whose parent is the web or application process. This is the most valuable behavioural query in the pack if the VCO VM carries a sensor. FP: appliance self-management genuinely shells out (health checks, log rotation, upgrade helpers), so baseline the benign parent/child/command-line triples for a week before alerting.
// HUNT: POSIX shell spawned by the VCO web / application tier (command injection) // MITRE: T1190, T1059.004 | CONF: high FP: medium COST: low // REQUIRES: Falcon Linux sensor ON the VCO host - ProcessRollup2 // LOOKBACK: 90d // FALSE POSITIVES: appliance health checks, log rotation, backup and upgrade helpers // TUNING: baseline for 7d, then exclude the recurring ParentBaseFileName + CommandLine // TUNING: pairs that belong to the vendor's own maintenance scripts - exclude the exact // TUNING: command line, never the whole parent process #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | ParentBaseFileName=/^(node|nginx|httpd|apache2|java|python[0-9]*|uwsgi|gunicorn|supervisord|php-fpm)$/i | FileName=/^(sh|bash|dash|ksh|zsh|busybox)$/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine]) | sort(@timestamp, order=desc, limit=500)
Looks for: the interactive-access step that normally follows command injection — bash with a socket redirect, netcat with command execution, socat exec, or a Python one-liner spawning a pty. Scoped to Linux process telemetry across the management estate, not just the orchestrator. FP: administrators and monitoring plugins do use nc; the /dev/tcp and pty.spawn patterns are far rarer and should be triaged first.
// HUNT: Reverse-shell / shell-redirection command line on a Linux host // MITRE: T1059.004, T1219 | CONF: high FP: medium COST: medium // REQUIRES: Falcon Linux sensor - ProcessRollup2 with CommandLine capture // LOOKBACK: 90d // FALSE POSITIVES: admin troubleshooting, monitoring plugins that shell out to nc // TUNING: triage the dev/tcp and pty.spawn matches first - they are the rarest. // TUNING: exclude your monitoring agent by ParentBaseFileName once its exact nc // TUNING: invocation is baselined; keep the dev/tcp branch un-excluded always #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/(bash\s+-i|dev\/tcp|dev\/udp|nc\s+-[a-z]*e|ncat\s+-[a-z]*e|socat\s+.{0,40}exec|pty\.spawn|python[0-9]*\s+-c\s+.{0,80}socket)/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine]) | sort(@timestamp, order=desc, limit=500)
Looks for: curl/wget/python/perl/tftp pulling a remote URL on a management-plane Linux host — the staging step Arista implies when it flags "unexpected file creation" and "unexpected outbound HTTP or HTTPS activity". FP: high by construction. Package managers, license checks and health probes all do this. Scope it to the orchestrator's aid set first, and treat a download whose parent is a web process (correlate with Q3) as the real signal.
// HUNT: Download utility fetching a remote payload on a management-plane Linux host // MITRE: T1105 | CONF: medium FP: high COST: medium // REQUIRES: Falcon Linux sensor - ProcessRollup2 with CommandLine capture // LOOKBACK: 90d // FALSE POSITIVES: apt/yum/dnf mirrors, license and telemetry callbacks, health probes // TUNING: restrict to the orchestrator aid set, then exclude vendor update and licensing // TUNING: hostnames by CommandLine substring; prioritise rows whose ParentBaseFileName // TUNING: is a web/app process (same parents as Q3) - that pairing is the real signal #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(curl|wget|python[0-9]*|perl|tftp|scp|fetch)$/i | CommandLine=/(http:\/\/|https:\/\/|ftp:\/\/|urllib|urlretrieve)/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine]) | sort(@timestamp, order=desc, limit=500)
Looks for: execution of the utilities that plant Linux persistence on the orchestrator — crontab, systemctl/systemd-run, at, useradd/usermod, ssh-keygen, chattr. FP: high on any host under configuration management; the discriminator is who the parent is. Persistence tooling parented by a web/app process or an interactive shell that itself descends from one is the finding.
// HUNT: Linux persistence tooling executed on a management-plane host // MITRE: T1053.003, T1543.002, T1098.004, T1136.001 | CONF: medium FP: high COST: low // REQUIRES: Falcon Linux sensor - ProcessRollup2 // LOOKBACK: 90d // FALSE POSITIVES: Ansible/Puppet/Chef runs, vendor upgrade routines, package post-install // TUNING: exclude ParentBaseFileName of your config-management agent and the package // TUNING: manager; keep every row whose parent is a web/app process or a shell that // TUNING: descends from one - that is the pairing this hunt exists for #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(crontab|systemctl|systemd-run|at|atd|useradd|adduser|usermod|groupmod|ssh-keygen|chattr|update-rc\.d)$/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine]) | sort(@timestamp, order=desc, limit=500)
Looks for: an ELF binary or a monitored critical file written into world-writable staging directories, cron directories, systemd unit paths, or an authorized_keys file. FP: package installs and vendor upgrades write to systemd paths legitimately; the world-writable paths (/tmp, /dev/shm, /var/tmp) are the high-signal half.
// HUNT: ELF / critical-file write into staging or persistence paths // MITRE: T1105, T1053.003, T1543.002, T1098.004 | CONF: medium FP: medium COST: medium // REQUIRES: Falcon Linux sensor - ELFFileWritten, CriticalFileModified // NOTE: CriticalFileModified coverage on Linux varies by sensor version and policy. // If it returns nothing at all, that is a telemetry gap, not a clean result. // (!) validate in tenant: confirm both event types are populated before trusting a null result // LOOKBACK: 90d // FALSE POSITIVES: package installs, vendor upgrade bundles, backup extraction // TUNING: exclude writes whose ContextBaseFileName is the package manager (dpkg, rpm, // TUNING: apt, yum, dnf); keep every write into /tmp, /dev/shm and /var/tmp #event_simpleName=/^(ELFFileWritten|CriticalFileModified)$/ | TargetFileName=/(\/tmp\/|\/var\/tmp\/|\/dev\/shm\/|authorized_keys|\/etc\/cron|\/etc\/systemd\/|\/usr\/lib\/systemd\/|\/etc\/rc\.local)/i | table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, TargetFileName]) | sort(@timestamp, order=desc, limit=500)
Looks for: exactly the actions Arista lists as review items — database export, archive creation, and access to configuration, device inventory, credentials, certificates or key material on the VCO host. FP: scheduled backups and support-bundle generation look identical; the discriminator is timing and parentage, so correlate every hit against your backup window and against Q3.
// HUNT: Database export / archive / key-material access on the orchestrator host // MITRE: T1005, T1552.001, T1552.004, T1560.001 | CONF: medium FP: medium COST: medium // REQUIRES: Falcon Linux sensor - ProcessRollup2 with CommandLine capture // LOOKBACK: 90d // FALSE POSITIVES: nightly backup jobs, vendor support-bundle generation, cert renewal // TUNING: exclude the backup service account by UserName and the backup window by hour, // TUNING: then keep everything left - an off-schedule dump is the whole point of this hunt #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(mysqldump|mysql|mariadb-dump|pg_dump|pg_dumpall|psql|mongodump|tar|zip|gzip|xz|openssl|base64|scp)$/i | CommandLine=/(velocloud|vco|orchestrator|edge|inventory|\.pem|\.key|\.p12|\.pfx|\.crt|credential|passwd|shadow|keystore)/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine]) | sort(@timestamp, order=desc, limit=500)
Looks for: downstream abuse of harvested SD-WAN credentials — a burst of ssh/scp/sftp/curl/ansible invocations from a management host, which is what mass credential reuse against an Edge fleet looks like from the process side. Aggregated with a volume threshold rather than alerting per-event. FP: a legitimate mass config push or firmware campaign produces the same shape; correlate the burst window against your change calendar before escalating.
// HUNT: Abnormal remote-admin fan-out from a management-plane host (Edge credential reuse) // MITRE: T1078, T1021.004 | CONF: medium FP: medium COST: high // REQUIRES: Falcon Linux sensor - ProcessRollup2 // LOOKBACK: 30d, then narrow to any day that stands out // FALSE POSITIVES: scheduled mass config push, firmware campaign, inventory sweep // TUNING: raise or lower the Runs threshold to your fleet size - 25 suits a mid-size // TUNING: estate; exclude your automation service account by UserName once its normal // TUNING: daily volume is baselined, and always check the change calendar first #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(ssh|scp|sftp|curl|ansible|ansible-playbook|expect|sshpass)$/i | groupBy([aid, ComputerName, UserName, FileName], function=[count(as=Runs), collect(CommandLine, limit=20)], limit=500) | Runs > 25 | sort(Runs, order=desc, limit=100)
Looks for: the request-side signal Arista describes — unusual URL-like path components, encoded characters, and shell metacharacters against the orchestrator UI. This is the query that still works when the VCO appliance carries no Falcon sensor, because it runs against HTTP logs shipped into NG-SIEM from the appliance, reverse proxy, load balancer or WAF. FP: vulnerability scanners and broken clients generate encoded-path noise; pivot every hit by source IP and look for a follow-up 200 with an unusual response size.
// HUNT: Injection-shaped request against the VCO web interface (third-party HTTP logs) // MITRE: T1190 | CONF: medium FP: medium COST: medium // REQUIRES: VCO / reverse-proxy / WAF access logs ingested into NG-SIEM. // This query needs NO Falcon sensor on the appliance - it is the fallback path. // (!) validate in tenant: HTTP parser field names are tenant- and parser-specific. // Confirm url / src_ip / http_method / status against one real sample row and rename // to your parser's fields before scheduling this query. // LOOKBACK: maximum available retention // FALSE POSITIVES: vulnerability scanners, broken clients, internal monitoring probes // TUNING: exclude your scanner source ranges by src_ip, then rank what remains by // TUNING: source IP and keep any source that later receives a 200 with an odd body size url=/(%00|%2e%2e|%2f\.\.|%3b|%7c|%60|%24%28|\$\(|`|;\s*(curl|wget|bash|sh|nc|python)\s)/i | groupBy([src_ip, http_method, status], function=[count(as=Hits), collect(url, limit=20)], limit=500) | sort(Hits, order=desc, limit=200)
Field-verification note. Q7 and Q10 carry an explicit (!) validate in tenant line inside the query. CriticalFileModified coverage on Linux is sensor-version and policy dependent, and the HTTP parser fields in Q10 are tenant-specific by definition. Everything else in this pack uses core Falcon data-model fields that are stable across tenants.
Custom IOA Recommendations & Alert Package
Promotion decisions
| Query | Disposition | Rationale |
|---|---|---|
| Q1, Q2 | Scheduled Search — alert | Vendor-attributed atomic indicators. Near-zero FP. Alert immediately on any hit. |
| Q3 | Scheduled Search — alert after 7d baseline | Highest-value behavioural signal, but appliance maintenance shells out legitimately. Baseline first, then alert. |
| Q4 | Custom IOA candidate | Reverse-shell command lines are a durable, environment-independent pattern worth a preventative IOA on Linux hosts. |
| Q5, Q6, Q7, Q8, Q9, Q10 | Investigate-only hunt | FP profile too broad for an alert without tenant-specific exclusions. Run on a schedule and review as a hunt queue. |
Custom IOA — "Linux reverse shell from management-plane host"
- Rule group: Linux · Management plane (scope to the orchestrator and jump-host groups, not the whole estate).
- Rule type: Process Creation.
- Image filename pattern:
.*/(sh|bash|dash|nc|ncat|socat|python[0-9]*)$ - Command line pattern:
.*(bash\s+-i|dev/tcp|nc\s+-[a-z]*e|socat.{0,40}exec|pty\.spawn).* - Action: start at Detect · Informational-to-Medium for one week, review the hit set, then promote to Prevent only once the benign set is empty.
- Exclusions: your monitoring agent's exact
ncinvocation; never exclude thedev/tcpbranch.
Scheduled Search / alert package
| Field | Value |
|---|---|
| Scheduled Search name | DETECT — CVE-2026-16812 attacker IP contact (VeloCloud Orchestrator) |
| Description | Fires when any sensored host communicates with one of the three source IPs Arista published as conducting CVE-2026-16812 attacks against VeloCloud Orchestrator On-Prem. Inbound indicates targeting; outbound indicates probable compromise. |
| Schedule | Every 30 minutes, 1-hour window, plus one historical run across full retention. |
| Email subject | [CRITICAL] Detection: CVE-2026-16812 — VeloCloud Orchestrator attacker-IP contact |
| Escalation | Page on-call immediately for an outbound hit. Inbound-only hits go to the hunt queue within the hour. |
Alert email body (template)
WHAT FIRED A host in the estate communicated with an IP address that Arista Networks published as conducting attacks exploiting CVE-2026-16812 (VeloCloud Orchestrator On-Prem, unauthenticated OS command injection, CVSS 10.0, CISA KEV due 2026-07-30). WHY IT MATTERS The orchestrator holds SD-WAN configuration, device inventory, and the credentials and key material for every managed VeloCloud Edge. A compromise of the orchestrator is a compromise of the fabric, not of one virtual machine. IMMEDIATE ACTIONS (first 30 minutes) 1. Determine direction. Outbound = probable compromise. Inbound only = targeting. 2. Identify whether the host is, or routes to, a VeloCloud Orchestrator On-Prem VM. 3. Check the VCO build against 5.2.3.14 / 6.1.3.4 / 6.4.2.4 / 7.0.0.1. 4. PRESERVE FIRST: VCO web access logs, backend application logs, system logs, database logs and file-system timestamps - before any patch or reboot. 5. Block the three IPs at the perimeter and add them to Falcon IOC Management. 6. If compromise is suspected, escalate to IR and open the fabric-wide credential and key rotation workstream. Do not stop at patching. ESCALATION PATH L1 -> IR on-call -> network engineering (SD-WAN owner) -> CISO if Edge credential rotation is required.
L1 triage checklist
- Confirm the direction of the flow (Q1 inbound vs Q2 outbound) and record it in the ticket.
- Identify the asset: is it the VCO VM, a proxy in front of it, or an unrelated host?
- Record the running VCO version and whether it predates the fixed release for its train.
- Confirm whether the VCO web interface is reachable from outside the management network.
- Preserve logs and file-system timestamps before any remediation action.
- Run Q3 and Q4 scoped to that
aidfor the surrounding 24 hours. - Run Q6, Q7 and Q8 scoped to that
aidfor the surrounding 30 days. - If any behavioural query returns a hit, escalate to IR and treat Edge credentials as compromised until proven otherwise.
Pivot queries
- Host-scoped: take the
aidfrom the alert and re-run Q3 through Q8 with| aid = "<aid from alert>"appended after the event filter. - Estate-wide: re-run Q1 and Q2 across maximum retention to find every other host that ever touched the same infrastructure.
- Process-tree: pivot any Q3 hit into the Falcon process explorer for the parent and its full descendant tree.
Machine-Readable IOC Appendix
Three atomic indicators ship here, all three traceable to the Arista advisory snapshot. Everything else is a labelled placeholder or a behavioural signature — because Arista published no hashes, no domains and no payload artifacts, and a fabricated indicator in a blocklist is worse than an empty one.
type,value,action,severity,expiration,description,tags ipv4,8.19.75.217,detect,critical,2027-01-30,Arista-published attacker IP for CVE-2026-16812,campaign:CVE-2026-16812 ipv4,206.72.242.124,detect,critical,2027-01-30,Arista-published attacker IP for CVE-2026-16812,campaign:CVE-2026-16812 ipv4,206.72.242.162,detect,critical,2027-01-30,Arista-published attacker IP for CVE-2026-16812,campaign:CVE-2026-16812 sha256,REPLACE_WITH_PAYLOAD_SHA256,detect,critical,2027-01-30,No payload hash has been published - fill only from your own IR then raise to prevent,campaign:CVE-2026-16812 domain,REPLACE_WITH_C2_DOMAIN,detect,high,2026-10-30,No C2 domain has been published - fill only from your own IR,campaign:CVE-2026-16812 # Arista published no file hashes; no webshell names; no payload artifacts; no C2 domains. # The three IPv4 rows above are the complete published atomic indicator set.
BEH-01 POSIX shell (sh/bash/dash) parented by node|nginx|httpd|apache2|java|python|uwsgi
|gunicorn|php-fpm on a VeloCloud Orchestrator host [Q3] conf: high
BEH-02 Reverse-shell command line: bash -i, dev/tcp, nc -e, socat exec, pty.spawn
[Q4] conf: high
BEH-03 curl|wget|python|perl|tftp fetching an http(s)/ftp URL on the orchestrator
[Q5] conf: medium
BEH-04 crontab|systemctl|systemd-run|useradd|ssh-keygen executed with a web/app-tier
ancestor [Q6] conf: medium
BEH-05 ELF or critical-file write to /tmp, /var/tmp, /dev/shm, /etc/cron*, systemd
unit paths, or authorized_keys [Q7] conf: medium
BEH-06 mysqldump|pg_dump|mongodump|tar|zip|openssl invoked with velocloud|vco|edge|
inventory|.pem|.key|.p12 in the command line [Q8] conf: medium
BEH-07 Burst of ssh|scp|sftp|curl|ansible from a management host toward the Edge fleet
[Q9] conf: medium
BEH-08 VCO web request containing %00, %2e%2e, %3b, %7c, %60, backtick or $( followed
by a shell utility name [Q10] conf: medium
# Arista Security Advisory 0144 - IPs observed conducting CVE-2026-16812 attacks.
# Block bidirectionally at the perimeter AND log the denies - the deny log is evidence.
8.19.75.217
206.72.242.124
206.72.242.162
# nftables (adjust table/chain names to your ruleset)
nft add rule inet filter input ip saddr { 8.19.75.217, 206.72.242.124, 206.72.242.162 } log prefix \"CVE-2026-16812-in \" drop
nft add rule inet filter output ip daddr { 8.19.75.217, 206.72.242.124, 206.72.242.162 } log prefix \"CVE-2026-16812-out \" drop
# iptables equivalent
iptables -I INPUT -s 8.19.75.217 -j LOG --log-prefix \"CVE-2026-16812-in \"
iptables -I INPUT -s 8.19.75.217 -j DROP
iptables -I INPUT -s 206.72.242.124 -j DROP
iptables -I INPUT -s 206.72.242.162 -j DROP
iptables -I OUTPUT -d 8.19.75.217 -j DROP
iptables -I OUTPUT -d 206.72.242.124 -j DROP
iptables -I OUTPUT -d 206.72.242.162 -j DROP
# CVE-2026-16812 exposure audit - VeloCloud Orchestrator On-Prem
# CISA KEV: added 2026-07-27, FCEB due date 2026-07-30 (BOD 26-04)
[ ] Enumerate every VeloCloud Orchestrator On-Prem instance (prod, DR, lab, forgotten)
[ ] Record the running version of each
[ ] FIXED RELEASES - anything below these is vulnerable:
5.2 train -> 5.2.3.14 or later
6.1 train -> 6.1.3.4 or later
6.4 train -> 6.4.2.4 or later
7.0 train -> 7.0.0.1 or later
[ ] NOT affected, do not spend time on: VCO Hosted, VCO Dedicated, VeloCloud Gateway,
VeloCloud Edge, Arista EOS platforms, CloudVision, Wireless APs, NDR, NG Firewall
[ ] Is the VCO web interface reachable from the internet? (expected: NO)
[ ] Is it reachable from user/guest VLANs? (expected: NO)
[ ] Is it restricted to a trusted administrative network? (expected: YES)
[ ] Are VCO web/app/system/database logs shipped off-box to the SIEM? (expected: YES)
[ ] Is a Falcon Linux sensor installed on the VCO VM? (if NO, see 5)
[ ] Have the three attacker IPs been blocked and the denies logged?
[ ] Has a full-retention search for those IPs been run and documented?
Detection Validation Gates
| Gate | Check | Pass criterion |
|---|---|---|
| 1 · Telemetry ready | Does the VCO host report to Falcon at all? Run a bare #event_simpleName=/^ProcessRollup2$/ scoped to its aid for 24 hours. | Non-zero rows. If zero, Q3–Q9 are unusable and you must fall back to §7 and Q10 — record that in the ticket. |
| 2 · Event coverage | Confirm ELFFileWritten and CriticalFileModified are populated in your tenant for Linux. | Both return rows estate-wide over 7 days. If not, Q7 is advisory only. |
| 3 · Parser fields | Q10 only: pull one real row from the HTTP log repo and confirm the url, src_ip, http_method and status field names. | Field names match, or the query is renamed before scheduling. |
| 4 · Benign baseline | Run Q3, Q5, Q6, Q8, Q9 for 7 days without alerting and record the recurring benign rows. | A written exclusion list exists per query before any of them is promoted to an alert. |
| 5 · Positive test (safe) | On a lab Linux VM, run bash -c 'echo test' from a web-server parent and a benign curl https://example.com. | Q3 and Q5 return the lab rows within the expected latency. No exploitation of the CVE is required or permitted for this test. |
| 6 · Atomic test | Confirm the three IPs are loaded into Falcon IOC Management and that a synthetic detect fires. | IOC entries present with the correct expiry; Q1/Q2 syntax verified against a known-good IP substitution in a lab. |
| 7 · Promotion | Only after gates 4–6 pass: promote Q1/Q2 to alerting, Q3 to alerting, Q4 to a Detect-mode Custom IOA. | Documented owner, exclusion list, and a review date for each promoted rule. |
Do not build a proof-of-concept exploit to test these detections. The positive tests above are deliberately benign process-execution stand-ins. There is no published exploit path for CVE-2026-16812 and this pack does not supply one.
Hardening — Tiered
- Patch to a fixed VCO release. 5.2.3.14, 6.1.3.4, 6.4.2.4 or 7.0.0.1 (or later in each train). This is the vendor's recommended resolution and the CISA KEV required action, due 2026-07-30. Authority: Arista Advisory 0144; CISA BOD 26-04; MITRE M1051 Update Software.
- Restrict the VCO web interface to trusted administrative networks. Arista is explicit that VCO is exposed by default and no product setting removes that exposure — the control has to be applied in the network, with a firewall ACL or an equivalent. Authority: Arista Advisory 0144; MITRE M1035 Limit Access to Resource Over Network; NIST SP 800-53 SC-7.
- Block the three published attacker IPs bidirectionally and log the denies. The deny log is evidence of targeting even after the block is in place. Authority: Arista Advisory 0144; MITRE M1037 Filter Network Traffic.
- Preserve evidence before you remediate. VCO web access logs, backend application logs, system logs, database logs and file-system timestamps — Arista calls this out explicitly, and an upgrade destroys the timeline. Authority: Arista Advisory 0144. ⚠ best-practice, no formal benchmark.
- Run the full-retention IP search (Q1/Q2) and record the result. A documented negative is an asset; an undocumented one is nothing. Authority: ⚠ best-practice, no formal benchmark.
- Rotate orchestrator and Edge credentials, certificates and key material if compromise is suspected or cannot be ruled out. Arista's post-remediation guidance names credential rotation, administrator-activity review, managed-device state validation, and restoration from trusted sources. Authority: Arista Advisory 0144; MITRE M1027 Password Policies, M1032 Multi-factor Authentication.
- Put the VCO management UI behind VPN or ZTNA with MFA so that reaching the login page at all requires an authenticated tunnel. This is the control that would have blunted an unauthenticated pre-auth flaw. Authority: MITRE M1032; CIS Controls v8 §6.5, §12.7; NIST SP 800-207.
- Install a Falcon Linux sensor on the VCO virtual appliance if the vendor's support policy permits it — without it, six of the ten queries in this pack return nothing. If policy forbids it, formally accept the gap and compensate with host log shipping. Authority: ⚠ best-practice, no formal benchmark. Confirm supportability with Arista TAC before deploying.
- Ship VCO web, application, system and database logs off-box in near-real time. Local logs on a compromised orchestrator are attacker-writable. Authority: CIS Controls v8 §8.2, §8.9; MITRE M1029.
- Apply default-deny egress from the management VLAN, allowing only the Arista update and licensing destinations you actually need. Arista's own review checklist treats unexpected outbound HTTP/S from the VCO host as an IOC — enforce what you are being told to monitor. Authority: MITRE M1037; CIS Controls v8 §4.4, §13.4.
- Segment the network management plane into its own enclave with brokered administrative access (jump host, session recording, just-in-time elevation). An orchestrator that can only be reached from a hardened bastion is not "exposed by default" in any meaningful sense. Authority: MITRE M1030 Network Segmentation; CIS Controls v8 §12.2, §12.8; NIST SP 800-53 SC-7(21).
- Adopt a KEV-driven emergency patch SLA for internet- and management-plane-facing infrastructure, with a named owner and an out-of-hours path. This CVE gave federal agencies three days; a monthly patch cycle cannot meet that. Authority: CISA BOD 26-04; CIS Controls v8 §7.3, §7.4.
- Build and rehearse a fabric-wide credential and key rotation runbook for the SD-WAN estate, so that "rotate every Edge credential" is a tested procedure rather than a three-week improvisation during an incident. Authority: MITRE M1027; NIST SP 800-53 IA-5. ⚠ best-practice, no formal benchmark for SD-WAN specifically.
- Require rebuild-from-trusted-source, not clean-up, for compromised management appliances. Arista's guidance already contemplates "restoration or replacement of affected orchestrator instances from trusted sources" — make that the standing policy, with a tested rebuild time. Authority: Arista Advisory 0144; NIST SP 800-61r2 §3.4.
- Inventory every vendor appliance for agent coverage and log shipping, and treat "unsensored and unlogged" as a risk-accepted exception with an expiry date rather than a silent default. Authority: CIS Controls v8 §1.1, §8.2.
Deployable Playbooks
Playbook 1 — Preserve evidence before any remediation
Run this first. Patching or rebooting a VCO destroys the very logs Arista tells you to keep.
## Prerequisites: read-only shell or console access to the VCO host; an off-box ## destination with enough space; change ticket raised. ## Reboot required: no ## Rollback: none required - every command is read-only or writes to a new file ## under /var/tmp. To undo, delete the archive you created. # 1. Snapshot the VM at the hypervisor first if you can - it is the cleanest evidence. # (vSphere / KVM console action, not a shell command.) # 2. Capture logs and timestamps to a new archive mkdir -p /var/tmp/ir-cve-2026-16812 tar -czf /var/tmp/ir-cve-2026-16812/logs.tgz /var/log 2>/dev/null find / -xdev -mtime -60 -type f -printf '%TY-%Tm-%TdT%TH:%TM:%TS %p\n' 2>/dev/null \ > /var/tmp/ir-cve-2026-16812/timeline.txt # 3. Capture volatile state ps -eo pid,ppid,user,lstart,etime,cmd --sort=start_time > /var/tmp/ir-cve-2026-16812/ps.txt ss -tunap > /var/tmp/ir-cve-2026-16812/sockets.txt last -F -n 200 > /var/tmp/ir-cve-2026-16812/logins.txt crontab -l > /var/tmp/ir-cve-2026-16812/crontab.txt 2>/dev/null systemctl list-unit-files --state=enabled > /var/tmp/ir-cve-2026-16812/units.txt # 4. Hash and copy off-box, then verify the copy sha256sum /var/tmp/ir-cve-2026-16812/* > /var/tmp/ir-cve-2026-16812/SHA256SUMS scp -r /var/tmp/ir-cve-2026-16812 ir-collector.internal-host.example.com:/evidence/ # 5. Verify on the collector BEFORE you touch the orchestrator again # sha256sum -c SHA256SUMS
Playbook 2 — Restrict the VCO web interface to trusted admin networks
Apply upstream of the appliance wherever possible. The host-level rules below are a stopgap for when you cannot get a firewall change through in time.
## Prerequisites: the CIDR of your trusted administrative network; out-of-band or
## console access to the VCO in case you lock yourself out; a change
## window; Playbook 1 already completed.
## Reboot required: no
## Rollback: nftables - `nft delete table inet vcoguard` removes every rule added here.
## iptables - re-run each command with -D instead of -I/-A.
## Persistence is NOT saved by these commands, so a reboot also reverts them
## until you explicitly save the ruleset.
# ---- Option A: upstream firewall / load balancer (PREFERRED) ----
# Permit tcp/443 to the VCO management address ONLY from the admin CIDR.
# Deny and LOG everything else. Vendor syntax varies; the rule shape is:
# permit tcp <admin-cidr> host <vco-mgmt-ip> eq 443
# deny tcp any host <vco-mgmt-ip> eq 443 log
# ---- Option B: host-level nftables stopgap on the VCO VM ----
ADMIN_CIDR=\"REPLACE_WITH_ADMIN_CIDR\" # e.g. 192.0.2.0/24
nft add table inet vcoguard
nft add chain inet vcoguard input { type filter hook input priority 0 \; policy accept \; }
nft add rule inet vcoguard input ip saddr \$ADMIN_CIDR tcp dport { 80, 443 } accept
nft add rule inet vcoguard input tcp dport { 80, 443 } log prefix \"vco-webui-deny \" drop
# ---- Option C: iptables stopgap ----
iptables -I INPUT -p tcp -s \$ADMIN_CIDR --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j LOG --log-prefix \"vco-webui-deny \"
iptables -A INPUT -p tcp --dport 443 -j DROP
# ---- Verify from OUTSIDE the admin network (expect a timeout, not a login page) ----
# curl -sk --max-time 5 https://<vco-mgmt-ip>/ ; echo \"exit=\$?\"
Playbook 3 — Block the published attacker infrastructure
## Prerequisites: perimeter firewall change access; Falcon admin role for the IOC ## Management step; the CSV from section 10. ## Reboot required: no ## Rollback: remove the three IPs from the firewall ruleset and set their Falcon IOC ## entries to `no action` (or delete them). Keep the deny logs regardless - ## they are evidence, not noise. # 1. Perimeter - bidirectional, logged. See the "Perimeter block list" block in # section 10 for ready-to-paste nftables and iptables rules. # 2. Falcon IOC Management - import the CSV from section 10 (grab-csv): # Falcon console -> Endpoint security -> IOC management -> Import # Action: detect | Severity: critical | Expiry: 2027-01-30 # Leave the REPLACE_WITH_ rows OUT of the import - they are placeholders. # 3. Proxy / DNS - add the three addresses to the egress deny list and confirm the # proxy logs a block rather than silently failing open. # 4. Re-run Q1 and Q2 across full retention AFTER the block goes in, so that the # historical search is not truncated by the new rule.
Playbook 4 — Upgrade to a fixed VCO release
## Prerequisites: Playbook 1 completed (evidence preserved); a current VM snapshot or ## backup; the fixed image downloaded from Arista for your train; a ## maintenance window; Arista TAC engaged if you are on an unsupported ## release train. ## Reboot required: YES - a VCO upgrade restarts orchestrator services and the host. ## Managed Edges continue forwarding traffic while the orchestrator ## is down, but configuration changes and new Edge activations will ## not be possible during the window. ## Rollback: restore the pre-upgrade VM snapshot. Take and VERIFY that snapshot before ## starting - it is the only rollback path, and a snapshot you have not ## tested is not a rollback plan. # 1. Record the current version and confirm the target for your train: # 5.2 train -> 5.2.3.14 or later # 6.1 train -> 6.1.3.4 or later # 6.4 train -> 6.4.2.4 or later # 7.0 train -> 7.0.0.1 or later # 2. Snapshot the VM. Verify the snapshot is complete and consistent. # 3. Apply the vendor upgrade per Arista's documented procedure for your deployment # (image and steps differ by train - follow Arista, not this pack). # 4. Post-upgrade verification: # - confirm the reported version is at or above the fixed release # - confirm all managed Edges reconnect and report healthy # - confirm administrative login works from the trusted admin network ONLY # - re-confirm the Playbook 2 restriction survived the upgrade # 5. If exploitation is suspected, DO NOT stop here. Patching a compromised # orchestrator leaves the attacker's stolen credentials and keys valid. # Proceed to Playbook 5.
Playbook 5 — Fabric-wide credential and key rotation (post-compromise)
## Prerequisites: IR lead assigned; a confirmed or suspected compromise; Playbooks 1 ## and 4 complete; an approved maintenance window per Edge group; a ## tested rollback for each credential class. ## Reboot required: no for credential rotation itself; some Edge certificate changes ## require a tunnel re-establishment - treat that as a service impact. ## Rollback: rotation is intentionally one-way. The rollback is the PREVIOUS credential ## set, which must be exported and sealed BEFORE rotation begins so a failed ## rotation can be reversed. Do not start without that export. # 1. Rebuild rather than clean. Arista's own guidance contemplates "restoration or # replacement of affected orchestrator instances from trusted sources". Prefer a # fresh orchestrator from a trusted image with restored configuration over an # in-place cleanup of a host that ran attacker code. # 2. Rotate, in this order: # a) VCO operator and tenant administrator credentials # b) VCO API tokens and service-account secrets # c) Orchestrator database credentials # d) Edge activation keys / enrolment secrets # e) Certificates and private key material for the orchestrator and every Edge # 3. Validate managed device state per Arista's post-remediation guidance: # - compare each Edge's running configuration against a known-good baseline # - investigate any Edge whose config changed outside a change record # - confirm every tunnel re-established with the NEW key material # 4. Review administrator activity across the full suspected exposure window, not # just since the advisory - the exploitation start date is unpublished. # 5. Close the loop: re-run every query in section 8 after rotation. New hits after # rotation mean the attacker still has a foothold and the incident is not over.
Containment Runbook
| Phase | Actions | Owner | Evidence to capture |
|---|---|---|---|
| 0 · Preserve | Hypervisor snapshot. Collect VCO web access, backend application, system and database logs plus file-system timestamps. Capture volatile state (processes, sockets, logins, cron, systemd units). Hash and move off-box. Do this before anything else. | IR + platform owner | Snapshot ID, log archive with SHA256SUMS, collection timestamps |
| 1 · Isolate | Restrict the VCO web interface to the trusted admin network (Playbook 2). Block the three attacker IPs bidirectionally with logging (Playbook 3). Apply default-deny egress from the VCO host. Do not power off the VM before Phase 0 is complete. | Network engineering | Firewall change ID, before/after rule export, deny-log samples |
| 2 · Scope | Run Q1 and Q2 across maximum retention estate-wide. Run Q3–Q9 scoped to the orchestrator aid for 90 days. Run Q10 against web logs. Review §7 native hunts on the appliance. Establish whether the web interface was ever internet-reachable. | Hunt team | Query result exports with timestamps, a written negative where nothing was found |
| 3 · Eradicate | Upgrade to the fixed release (Playbook 4), or preferably rebuild the orchestrator from a trusted image. Remove any identified persistence: cron entries, systemd units, unauthorised accounts, injected SSH keys. | Platform owner + IR | Version before/after, list of artefacts removed, rebuild record |
| 4 · Rotate | Execute Playbook 5 in full: operator and tenant credentials, API tokens, database credentials, Edge activation keys, certificates and private keys. Treat every managed Edge as exposed until proven otherwise. | SD-WAN owner + IR | Rotation log per credential class, Edge re-enrolment confirmations |
| 5 · Validate | Compare every Edge config against a known-good baseline. Confirm all tunnels re-established with new key material. Re-run every section 8 query. Any post-rotation hit reopens the incident. | Network engineering | Config diff report, tunnel status, clean re-run evidence |
| 6 · Recover & report | Restore normal administrative access through the hardened path only. Record the KEV due date compliance position. Feed the §12 near-term and strategic items into the remediation backlog with owners and dates. | CISO / service owner | Closure ticket, KEV attestation, backlog items with owners |
The failure mode to avoid: patching the orchestrator, seeing no more inbound hits, and closing the ticket. If the box ran attacker code, the Edge credentials and keys it held are already gone and the patch does nothing about that. Phase 4 is not optional when Phase 2 finds anything.
Detection Coverage Map
| Technique | Behaviour | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1190 | Exploit request reaches the VCO web interface | Q10 (web logs), Q1 (known IPs) | — | PARTIAL — only if HTTP logs are ingested; no published exploit path to signature |
| T1190 / T1059.004 | Command executed on the VCO host | Q3 | — | PARTIAL — depends entirely on a Falcon sensor being on the appliance |
| T1059.004 / T1219 | Reverse shell established | Q4 | Yes (Detect mode) | GOOD |
| T1071.001 / T1041 | C2 and exfil over HTTP/S | Q2, Q5 | — | GOOD for the three known IPs; GAP for unknown C2 — no domains published |
| T1105 | Second-stage tooling staged | Q5, Q7 | — | PARTIAL — high FP without an orchestrator-scoped aid list |
| T1053.003 / T1543.002 / T1098.004 | Persistence planted | Q6, Q7 | — | PARTIAL — CriticalFileModified coverage varies by sensor version |
| T1005 / T1552 / T1560.001 | Orchestrator data and key material collected | Q8 | — | PARTIAL — indistinguishable from backups without a baseline |
| T1078 | Harvested Edge credentials reused | Q9 | — | GAP — Edges carry no Falcon sensor; real coverage needs Edge/AAA logs (§7E) |
| T1070 | Log tampering on the orchestrator | — | — | GAP — only off-box log shipping detects this; see §12 near term |
| Initial access timing | When exploitation began | — | — | GAP — Arista published no first-seen date; run maximum retention |
Known gaps, stated plainly
- No sensor on the appliance is the dominant gap. Q3 through Q9 — six of ten queries — assume a Falcon Linux sensor on the VCO VM. If there is none, those queries return zero rows and that zero is meaningless. Your coverage then rests on Q1/Q2 estate-wide, Q10 against ingested HTTP logs, the §7 native checks, and perimeter/NetFlow records. Write down which of those you actually have.
- No atomic indicators beyond three IPs. No hashes, no domains, no webshell names, no exploit path. Every other detection in this pack is behavioural by necessity, and behavioural detections need a baseline before they can alert.
- The Edge fleet is effectively dark. VeloCloud Edges do not run a Falcon sensor. Downstream credential abuse is detectable only through Edge syslog, config-change audit and AAA logs.
- The three IPs are perishable. Infrastructure rotates. A clean Q1/Q2 result three months from now says little about exploitation that happened in July.
Validation gates for every query above are in §11 — telemetry readiness, event coverage, parser-field confirmation, a 7-day benign baseline, safe positive tests, and the promotion criteria. Nothing in this pack should be promoted to an alert before gates 4 through 6 pass in your own tenant.
Hunt Summary Ticket
TITLE: CVE-2026-16812 - Arista VeloCloud Orchestrator On-Prem unauthenticated
OS command injection (CVSS 10.0, exploited in the wild, CISA KEV)
SEVERITY: CRITICAL - exploited in the wild; KEV due date 2026-07-30
SCOPE: All VeloCloud Orchestrator On-Prem instances (5.2.x below 5.2.3.14,
6.1.x below 6.1.3.4, 6.4.x below 6.4.2.4, 7.0.x below 7.0.0.1) plus
every Falcon-sensored host for the attacker-IP sweep. NOT in scope:
VCO Hosted, VCO Dedicated, VeloCloud Gateway, VeloCloud Edge, EOS
platforms, CloudVision.
HYPOTHESIS: An unauthenticated attacker reached privileged internal functionality
on the VCO web interface and executed OS commands on the orchestrator
host, then staged tooling, planted persistence, collected orchestrator
databases / configuration / device inventory / credentials / key
material, and may now hold valid credentials for every managed Edge.
QUERIES: Q1 Inbound from published attacker IPs (CONF high / FP low)
Q2 Outbound to published attacker IPs (CONF high / FP low)
Q3 Shell spawned by the web/app tier (CONF high / FP med)
Q4 Reverse-shell command lines (CONF high / FP med)
Q5 Download utility fetching a payload (CONF med / FP high)
Q6 Linux persistence tooling (CONF med / FP high)
Q7 ELF / critical-file writes to staging (CONF med / FP med)
Q8 DB export / archive / key-material access (CONF med / FP med)
Q9 Remote-admin fan-out toward the Edge fleet (CONF med / FP med)
Q10 Injection-shaped VCO web requests (CONF med / FP med)
DO FIRST: 1. Inventory every VCO On-Prem instance and its version.
2. Preserve logs and timestamps (Playbook 1) BEFORE patching.
3. Restrict the web interface to the admin network (Playbook 2).
4. Block the three published IPs, logged (Playbook 3).
5. Run Q1 and Q2 across maximum retention - estate-wide.
6. Patch to the fixed release for the train (Playbook 4).
FINDINGS: [ ] Vulnerable VCO instances found: ______
[ ] Attacker-IP contact - inbound: ______ outbound: ______
[ ] Behavioural hits (Q3-Q9): ______
[ ] Web-log hits (Q10): ______
[ ] Falcon sensor present on VCO? yes / no (if no, record the gap)
GAPS: No Falcon sensor on the appliance disables Q3-Q9. VeloCloud Edges carry
no sensor at all. No hashes, domains, webshell names or exploit path
have been published. Exploitation start date unknown - do not assume
the advisory date is the beginning.
ACTIONS: Patch or rebuild; restrict and segment the management plane; rotate
orchestrator and Edge credentials, certificates and keys if compromise
cannot be ruled out; ship VCO logs off-box; adopt a KEV-driven patch SLA.
OWNER: HuntPack
VERSION: v0.1 (2026-07-30)
Changelog
REPLACE_WITH_ placeholder rows in §10 only from first-party IR findings or a named, verifiable source.References
| Tier | Source | Used for | Access date |
|---|---|---|---|
| T1 | Arista Security Advisory 0144 — CVE-2026-16812 | Primary advisory: CVSS, CWE, affected and fixed versions, the three attacker IPs, IOC review checklist, mitigation, post-remediation guidance | 2026-07-30 |
| T1 | CISA Known Exploited Vulnerabilities catalog (feed snapshot) | KEV date added 2026-07-27, due date 2026-07-30, BOD 26-04 required action | 2026-07-30 |
| T1 | NVD — CVE-2026-16812 | CVSS v3.1 and v4.0 vectors, CWE-78, affected version ranges | 2026-07-30 |
| T2 | BleepingComputer — Arista patches VeloCloud Orchestrator zero-day exploited in attacks | Corroboration of IPs, fixed versions, CISA deadline | 2026-07-30 |
| T2 | The Hacker News — Attackers Exploit Arista VeloCloud Orchestrator Command Injection Flaw | Advisory quotations, log-preservation guidance, absence of exploitation detail | 2026-07-30 |
| T2 | SecurityWeek — Critical Arista VeloCloud Orchestrator Vulnerability Exploited as Zero-Day | Defender checklist detail, BOD 26-04 three-day deadline | 2026-07-30 |
| T2 | The Register — Arista patches actively exploited VeloCloud bug as CISA puts admins on the clock | On-prem-only scope, exposed-by-default confirmation, absence of attribution | 2026-07-30 |
| T2 | Security Affairs — CISA adds Arista VeloCloud Orchestrator and Fortinet FortiOS flaws to KEV | IP corroboration only. Its stated KEV due date is wrong (see §2) and is not used. | 2026-07-30 |
| T3 | Cybersecurity News — Hackers Exploiting Arista VeloCloud Orchestrator 0-Day in the Wild | IP and CVSS-vector corroboration only. Its version strings are corrupted (see §2) and are not used. | 2026-07-30 |
Source snapshots for all nine references are stored alongside this pack in Arista-VeloCloud-CVE-2026-16812-Hunt-sources/, one plain-text file per source, so that every atomic indicator in §10 can be traced back to the text it came from.