This is a spare key taped under the SD-WAN manager, and attackers already know where to look
Cisco says CVE-2026-20128 is in the Data Collection Agent (DCA) feature of Cisco Catalyst SD-WAN Manager and stems from a recoverable credential file that can be fetched with a crafted HTTP request. The important version reality is: affected releases are before 20.18 for this CVE, with train-specific fixes including 20.9.8.2 and 20.12.5.3, while Cisco explicitly says releases 20.18 and later are not affected.
The vendor's HIGH 7.5 label is directionally right, but the user-supplied CVSS vector is stale/misleading for operational prioritization. Cisco's March 18, 2026 advisory update describes unauthenticated remote access to the credential file and Cisco later confirmed active exploitation in March 2026, so this is not a theoretical local-only password-storage issue anymore; it is a remotely reachable management-plane secret exposure with real intrusion evidence.
4 steps from start to impact.
Reach the SD-WAN Manager web/API surface
- Cisco Catalyst SD-WAN Manager is deployed on an affected release
- The management interface is reachable from the attacker network
- HTTP(S) access to the relevant endpoint is allowed
- Many mature enterprises keep SD-WAN Manager behind VPN, ACLs, or jump hosts
- Two-layer firewalling and trusted-host restrictions materially shrink the reachable population
- If the interface is private-only, this becomes post-initial-access instead of internet RCE-style exposure
Pull the DCA credential file with a crafted request
/reports/data/opt/data/containers/config/data-collection-agent/.dca, and successful access returns the secret needed for the next step. Tooling here is trivial: curl, python-requests, or any HTTP client.- The vulnerable endpoint is exposed through the service proxy
- The target is running an affected release before the relevant fixed build
- Reverse proxies, path filtering, or management-plane ACLs can block the request entirely
- Some environments do not expose this interface outside admin workstations
- Blue teams monitoring service-proxy logs can spot the path quickly if retention exists
/var/log/nms/containers/service-proxy/serviceproxy-access.log for requests to the .dca path; the sample user-agent in Cisco's example was python-requests/2.31.0.Recover the DCA secret and authenticate as DCA
- The file read succeeded
- The retrieved material contains valid DCA credentials
- Credential rotation or emergency account disablement after detection can burn the stolen secret
- If DCA access is segmented to only local or tightly filtered peers, privilege utility drops
Use DCA privileges for follow-on access
- Another affected system or reachable DCA target exists
- The stolen DCA credentials are valid in the environment
- DCA user privileges are narrower than full admin or root
- Segmentation between controllers/management nodes can contain the blast radius
- Follow-on abuse often needs additional weaknesses or misconfigurations
The supporting signals.
| In-the-wild status | Confirmed active exploitation. Cisco PSIRT says it became aware in March 2026 of active exploitation of CVE-2026-20128. |
|---|---|
| KEV status | Yes. NVD change history shows a CISA KEV update on 2026-04-21; Cisco's exploitation update predates that and is the stronger signal. |
| PoC availability | No authoritative public PoC located in the primary-source set reviewed. That does not buy you safety here because the exploit path is simple HTTP file retrieval and exploitation is already confirmed. |
| EPSS | 0.00069 (~0.069%). Low EPSS is believable for broad internet spray, but it underweights this case because attacker value comes from a niche, high-value control-plane target rather than mass exploitation economics. |
| CVSS reality check | The user-provided vector CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H conflicts with Cisco's advisory text. Cisco's advisory describes unauthenticated remote file read behavior and scores it 7.5 / AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N. |
| Affected versions | Cisco says releases before 20.18 are affected for CVE-2026-20128, with train-specific vulnerable ranges called out in NVD/Cisco data including <20.9.8.2, 20.10.x, 20.11.x, and parts of 20.12.x, 20.13.x, 20.14.x, 20.15.x, and 20.16.x. |
| Fixed versions | First fixed releases in Cisco's table include 20.9.8.2, 20.12.5.3, and for some trains migration to 20.12.6.1, 20.15.4.2, or 20.18.2.1. Cisco also states 20.18 and later are not affected for this CVE. |
| Detection clues | Cisco's published hunt path is /var/log/nms/containers/service-proxy/serviceproxy-access.log for requests to /reports/data/opt/data/containers/config/data-collection-agent/.dca. |
| Exposure population | No authoritative public Shodan/Censys count was verified from primary sources reviewed. Operationally, exposure is bounded by whether SD-WAN Manager is reachable from untrusted networks; Cisco hardening guidance explicitly says to prevent internet access or restrict it to trusted hosts. |
| Disclosure and reporter | Disclosed 2026-02-25. Cisco says the issues were found during internal security testing by Arthur Vidineyev of Cisco ASIG. |
noisgate verdict.
The decisive amplifier is confirmed active exploitation against a management-plane product that can be remotely reached in the wrong deployments. The main downward pressure is that the reachable population is much smaller than a mass-market internet service and the immediate privilege gained is DCA, not instant root.
Why this verdict
- Up from the user-supplied local-only story: Cisco's March 18, 2026 advisory text says the attacker can send a crafted HTTP request and read the DCA credential file remotely and unauthenticated, which is a materially more dangerous starting point than
AV:L/PR:H. - KEV beats EPSS here: active exploitation and KEV listing are hard evidence of operational attacker interest; low EPSS is downward pressure for mass exploitation probability, not proof of low enterprise risk.
- Management-plane exposure is the amplifier: if SD-WAN Manager is exposed, this hits a control component with outsized follow-on value for lateral movement and policy abuse across the fabric.
- But friction is real: many enterprises do not expose SD-WAN Manager broadly, and Cisco's own hardening guidance assumes it should sit behind filtering devices and trusted-host controls.
- Impact is meaningful but not maximal: the immediate win is DCA privileges and access to another affected system, not guaranteed root on every controller from a single packet.
Why not higher?
This is not an every-host wormable internet RCE. The attack still depends on the SD-WAN Manager management surface being reachable and the resulting privilege is narrower than full administrative or root control, so it does not justify a CRITICAL bucket on exposure mechanics alone.
Why not lower?
Dropping this to MEDIUM would ignore the two strongest signals in patch triage: confirmed exploitation and management-plane value. When attackers are already using a remotely reachable path against SD-WAN infrastructure, the right mental model is 'crown-jewel exposure with friction,' not 'just another credential-storage weakness.'
What to do — in priority order.
- Block untrusted access to SD-WAN Manager now — Put SD-WAN Manager behind VPN, jump host, or explicit trusted-host ACLs and remove direct internet reachability immediately, within hours because exploitation is confirmed. This is the fastest way to break step 1 of the attack path while patching is scheduled.
- Hunt the Cisco IoC path — Review
/var/log/nms/containers/service-proxy/serviceproxy-access.logfor requests to the published.dcapath and preserve logs centrally immediately, within hours. This gives you a direct, vendor-supplied signal for attempted or successful exploitation. - Restrict management-plane protocols — Allow only known admin workstations and required control-plane peers to reach the Manager on required ports immediately, within hours. Even if you cannot patch today, shrinking the source IP set sharply reduces exploitability.
- Rotate exposed secrets and review DCA use — After any suspected hit, rotate credentials associated with DCA workflows and validate whether unexpected DCA sessions or lateral access occurred immediately, within hours. The vulnerability's value is the stolen secret; burn it fast.
- Upgrade to a fixed release — Move each affected train to Cisco's first fixed release or to an unaffected later train as the durable fix. Because this is KEV-listed/actively exploited, treat remediation as patch immediately, within hours rather than waiting for the normal HIGH deadline.
- MFA on the admin portal alone doesn't solve this, because Cisco's abuse path is an unauthenticated HTTP file read rather than a normal interactive login.
- Generic perimeter IDS signatures without product-specific path visibility are weak here; the exploit can look like a simple GET unless you key on the exact endpoint.
- Relying on EPSS-based deprioritization is a mistake; the low EPSS reflects population economics, not the risk of a reachable SD-WAN control node already under active exploitation.
Crowdsourced verification payload.
Run this from an auditor workstation that can SSH to each Cisco Catalyst SD-WAN Manager node. Invoke it as ./check_cve_2026_20128.sh sdwan-mgr01.example.com admin and use an account allowed to run request nms application-server version in privileged EXEC; no root shell is required.
#!/usr/bin/env bash
# check_cve_2026_20128.sh
# Determine likely exposure to CVE-2026-20128 on Cisco Catalyst SD-WAN Manager.
# Usage: ./check_cve_2026_20128.sh <host> [user]
# Exit codes: 0 PATCHED, 1 VULNERABLE, 2 UNKNOWN, 3 USAGE/SSH ERROR
set -u
HOST="${1:-}"
USER="${2:-admin}"
if [[ -z "$HOST" ]]; then
echo "UNKNOWN - usage: $0 <host> [user]"
exit 3
fi
SSH_OPTS=( -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new )
CMD='request nms application-server version'
RAW_OUTPUT=$(ssh "${SSH_OPTS[@]}" "${USER}@${HOST}" "$CMD" 2>/dev/null)
SSH_RC=$?
if [[ $SSH_RC -ne 0 || -z "$RAW_OUTPUT" ]]; then
echo "UNKNOWN - unable to run version command over SSH on ${HOST}"
exit 3
fi
# Expected sample: "NMS application server is running version ... on vManage version 20.12.5.2"
VERSION=$(echo "$RAW_OUTPUT" | sed -nE 's/.*vManage version ([0-9]+\.[0-9]+(\.[0-9]+){0,2}).*/\1/p' | head -n1)
if [[ -z "$VERSION" ]]; then
echo "UNKNOWN - could not parse vManage version from: $RAW_OUTPUT"
exit 2
fi
ver_ge() {
# returns 0 if $1 >= $2
local IFS=.
local i
local -a a=($1) b=($2)
local len=${#a[@]}
(( ${#b[@]} > len )) && len=${#b[@]}
for ((i=${#a[@]}; i<len; i++)); do a[i]=0; done
for ((i=${#b[@]}; i<len; i++)); do b[i]=0; done
for ((i=0; i<len; i++)); do
((10#${a[i]} > 10#${b[i]})) && return 0
((10#${a[i]} < 10#${b[i]})) && return 1
done
return 0
}
MAJOR_MINOR=$(echo "$VERSION" | awk -F. '{print $1"."$2}')
# Cisco advisory logic for CVE-2026-20128:
# - 20.18 and later: not affected for this CVE
# - 20.9 fixed in 20.9.8.2
# - 20.10.x and 20.11.x: vulnerable; fix requires move to 20.12.6.1
# - 20.12 fixed in 20.12.5.3 (and 20.12.6.1 also fixed)
# - 20.13.x and 20.14.x: vulnerable; fix requires move to 20.15.4.2
# - 20.15 fixed in 20.15.4.2
# - 20.16.x: vulnerable; fix requires move to 20.18.2.1
# - Earlier than 20.9: treat as vulnerable/migrate
if ver_ge "$VERSION" "20.18.0"; then
echo "PATCHED - ${HOST} is running ${VERSION}; Cisco states 20.18 and later are not affected by CVE-2026-20128"
exit 0
fi
case "$MAJOR_MINOR" in
20.9)
if ver_ge "$VERSION" "20.9.8.2"; then
echo "PATCHED - ${HOST} is running ${VERSION}; fixed for CVE-2026-20128 in 20.9.8.2"
exit 0
else
echo "VULNERABLE - ${HOST} is running ${VERSION}; 20.9 requires at least 20.9.8.2"
exit 1
fi
;;
20.10|20.11)
echo "VULNERABLE - ${HOST} is running ${VERSION}; this train requires upgrade to 20.12.6.1 or later fixed train"
exit 1
;;
20.12)
if ver_ge "$VERSION" "20.12.5.3"; then
echo "PATCHED - ${HOST} is running ${VERSION}; 20.12 fixed in 20.12.5.3"
exit 0
else
echo "VULNERABLE - ${HOST} is running ${VERSION}; 20.12 requires at least 20.12.5.3"
exit 1
fi
;;
20.13|20.14)
echo "VULNERABLE - ${HOST} is running ${VERSION}; this train requires upgrade to 20.15.4.2 or later fixed train"
exit 1
;;
20.15)
if ver_ge "$VERSION" "20.15.4.2"; then
echo "PATCHED - ${HOST} is running ${VERSION}; 20.15 fixed in 20.15.4.2"
exit 0
else
echo "VULNERABLE - ${HOST} is running ${VERSION}; 20.15 requires at least 20.15.4.2"
exit 1
fi
;;
20.16)
echo "VULNERABLE - ${HOST} is running ${VERSION}; this train requires upgrade to 20.18.2.1 or later fixed train"
exit 1
;;
20.17)
echo "UNKNOWN - ${HOST} is running ${VERSION}; 20.17 train not explicitly covered in the reviewed advisory text, verify with Cisco TAC"
exit 2
;;
*)
# Any version below 20.9 or unrecognized pre-20.18 build: conservative call
if ver_ge "$VERSION" "20.0.0"; then
echo "VULNERABLE - ${HOST} is running ${VERSION}; pre-20.18 release not known-safe for CVE-2026-20128"
exit 1
else
echo "UNKNOWN - parsed unusual version ${VERSION}; verify manually"
exit 2
fi
;;
esac
If you remember one thing.
.dca access-log indicator immediately, within hours, because KEV/active exploitation overrides the normal HIGH timing. For formal tracking, the noisgate mitigation SLA is superseded here by 'patch / mitigate immediately, within hours,' and the noisgate remediation SLA should also be accelerated to the same immediate window for exposed nodes; for non-exposed internal-only nodes, still complete the Cisco fixed-version upgrade on an emergency basis rather than letting this sit in the normal 180-day HIGH queue.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.