A talkative front desk that says "never heard of him" differently than "wrong password"
CVE-2026-20195 is an *observable response discrepancy* (CWE-204) in an identity-management API endpoint of Cisco Identity Services Engine. The endpoint returns subtly different responses — body content, status code, or response time — depending on whether a queried identity exists, lets an unauthenticated remote caller enumerate valid usernames/identities or infer whether an authorization decision applies. The bug is reachable on ISE 3.3 < P11, 3.4 < P6, and 3.5 < P3; fixes shipped April 13–22, 2026 ahead of the May 6 disclosure.
Cisco's MEDIUM (5.3) rating is accurate. The CVSS vector AV:N/AC:L/PR:N/UI:N/C:L/I:N/A:N correctly captures the impact: information disclosure only, no write, no DoS, no auth bypass. There is no privilege gain from this bug standing alone — it is a *recon primitive* that an attacker chains with a password-spraying or relay attack. The vendor severity does not need adjusting; the practitioner question is whether the ISE admin/PSN interface that exposes this endpoint is reachable to the attacker at all.
4 steps from start to impact.
Reach the ISE identity API endpoint
- Network path to ISE admin/PSN interface
- TLS handshake permitted (no mutual-TLS gating)
- Cisco's own hardening guide recommends restricting ERS and admin APIs to a management subnet
- Most enterprises front ISE with an internal-only ACL
Probe the vulnerable identity endpoint
ffuf, Burp Intruder, or a hand-rolled Python httpx loop suffice — no public weaponized PoC has been published.- A candidate username wordlist (LinkedIn scrape, common-name dictionary)
- Stable network path for timing comparisons
- Rate-limiting on ISE API can throttle enumeration
- Response variance over WAN connections erodes timing oracles
Pivot to credential attack
- Spray-capable auth endpoint reachable (RADIUS, 802.1X, VPN, OWA, etc.)
- Account lockout policy that does not lock on bad usernames
- MFA on perimeter auth blocks the chain
- Smart lockout / risk-based auth (Azure AD, Duo) detects the spray
Leverage harvested identity
- Compromised account has meaningful entitlements
- Conditional access policies
- Segmentation between user VLAN and crown jewels
The supporting signals.
| In-the-wild exploitation | None observed as of 2026-06-30 — no GreyNoise tag, no Talos/Mandiant campaign attribution |
|---|---|
| Public PoC | No weaponized PoC published; the bug class (response discrepancy) is trivially reproducible with Burp/ffuf but no named researcher has dropped a tool |
| EPSS | 0.00275 (~0.3%) — bottom-quartile likelihood of exploitation over the next 30 days |
| CISA KEV | Not listed |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N — network, unauth, low-complexity, low confidentiality only |
| CWE | CWE-204 (Observable Response Discrepancy) — i.e. user-enumeration class |
| Affected versions | Cisco ISE 3.3 < P11, 3.4 < P6, 3.5 < P3 |
| Fixed versions | ISE 3.3 P11 (2026-04-17), 3.4 P6 (2026-04-22), 3.5 P3 (2026-04-13) |
| Internet exposure | Shodan/Censys queries for ISE admin/ERS portals (TCP/443, TCP/9060) typically return <500 hosts globally — ISE is overwhelmingly an internal appliance |
| Disclosed / Bug ID | 2026-05-06, internal bug CSCwr77445; reporter credited as Cisco internal security testing |
noisgate verdict.
This is a username-enumeration oracle (CWE-204) with confidentiality-only impact and no path to code execution, privilege escalation, or DoS — the single decisive factor is that the chain ends in *reconnaissance*, not compromise. The affected interface is almost universally deployed on an internal management network, further capping real-world exposure.
Why this verdict
- Confidentiality-only, no integrity/availability impact — CVSS vector cleanly bounds the blast radius at username/identity disclosure.
- ISE management plane is rarely internet-exposed — Shodan/Censys data shows a low-hundreds population, and Cisco's own deployment guidance restricts admin/ERS APIs to management subnets.
- Role multiplier — ISE is canonically an identity/NAC component, but THIS bug does not grant any identity-trust primitive. It only reveals which usernames exist. The chain to fleet compromise requires a separate spray/MFA-bypass step that this CVE does not provide — the floor stays at MEDIUM rather than escalating.
- No KEV listing, EPSS 0.00275, no public PoC — exploitation pressure is low and there is no indication of mass scanning.
- Patch shipped weeks before disclosure (April 13–22 vs. May 6 advisory) — defenders had a head start and the fix is a standard ISE patch bundle, not a version upgrade.
Why not higher?
Upgrading to HIGH would require either a credential or auth-bypass primitive (this bug has neither), KEV listing, or evidence of mass enumeration campaigns — none are present. The ISE role multiplier does not trigger because the bug yields no identity-trust impact; it only narrows the attacker's spray dictionary.
Why not lower?
Downgrading to LOW would be wrong because ISE underpins NAC and 802.1X for the entire enterprise — any reconnaissance primitive against the identity store has compounding value to a determined attacker, and unauthenticated network-reachable info disclosure on an identity appliance is not backlog hygiene.
What to do — in priority order.
- Restrict ISE admin and ERS API interfaces (TCP/443, TCP/9060) to a hardened management subnet — An ACL on the upstream switch or firewall denying everything outside the mgmt VLAN eliminates the reachable population for this bug. Deploy within the 365-day noisgate remediation window if not already in place — this is also baseline Cisco hardening guidance regardless of this CVE.
- Enable API rate limiting and lockout on ISE — Caps the rate at which a discrepancy oracle can be probed and produces signal for SOC alerting. Configure under Administration → System → Settings → API Settings.
- Apply the ISE patch bundle (3.3 P11 / 3.4 P6 / 3.5 P3) — Standard in-place patch via the ISE GUI or
application patch installCLI. No data migration, brief services restart on PSN. Schedule within the 365-day noisgate remediation SLA for MEDIUM. - Force MFA on every downstream auth surface — Removes the value of harvested usernames by breaking step 3 of the attack path. Layer Duo/Azure Conditional Access on VPN, OWA, and RDP gateways.
- WAF signatures — the request pattern is indistinguishable from legitimate ERS API queries; signature tuning produces false positives faster than catches.
- Renaming default usernames — the oracle reveals ANY existing identity, not just defaults.
- Strong password policies alone — they raise the spray cost but do not block enumeration itself.
Crowdsourced verification payload.
Run on an auditor workstation with network reach to the ISE node. Invoke as ./check_cve_2026_20195.sh <ise-host> — e.g. ./check_cve_2026_20195.sh ise-pan01.corp.example.com. No credentials required; this only fingerprints the ISE build via the unauthenticated TLS service banner and the /admin/login.jsp build string.
#!/usr/bin/env bash
# noisgate verifier — CVE-2026-20195 (Cisco ISE observable response discrepancy)
# Usage: ./check_cve_2026_20195.sh <ise-host>
# Output: VULNERABLE | PATCHED | UNKNOWN
set -u
HOST="${1:-}"
if [[ -z "$HOST" ]]; then
echo "UNKNOWN: usage $0 <ise-host>" >&2
exit 2
fi
# Pull build banner from the admin login page (unauth-readable)
BODY=$(curl -sk --max-time 10 "https://${HOST}/admin/login.jsp" || true)
if [[ -z "$BODY" ]]; then
echo "UNKNOWN: no response from https://${HOST}/admin/login.jsp"
exit 2
fi
# Build strings look like: ise-version-3.4.0.608 patch-5
VER=$(echo "$BODY" | grep -oE 'ise-version-[0-9.]+' | head -1 | sed 's/ise-version-//')
PATCH=$(echo "$BODY" | grep -oE 'patch-[0-9]+' | head -1 | sed 's/patch-//')
if [[ -z "$VER" ]]; then
echo "UNKNOWN: could not parse ISE version banner — check manually in GUI Administration → System → Maintenance"
exit 2
fi
PATCH=${PATCH:-0}
MAJ=$(echo "$VER" | cut -d. -f1)
MIN=$(echo "$VER" | cut -d. -f2)
status="UNKNOWN"
case "${MAJ}.${MIN}" in
3.3) [[ "$PATCH" -ge 11 ]] && status="PATCHED" || status="VULNERABLE" ;;
3.4) [[ "$PATCH" -ge 6 ]] && status="PATCHED" || status="VULNERABLE" ;;
3.5) [[ "$PATCH" -ge 3 ]] && status="PATCHED" || status="VULNERABLE" ;;
*) status="UNKNOWN" ;;
esac
echo "Host: ${HOST} Version: ${VER} Patch: ${PATCH} => ${status}"
case "$status" in
PATCHED) exit 0 ;;
VULNERABLE) exit 1 ;;
*) exit 2 ;;
esac
If you remember one thing.
Sources
- Cisco Community — ISE CVE-2026-20193 & 20195 KB
- Cisco PSIRT — ISE Multi-CVE Advisory (cisco-sa-ise-multi-G5WP8vv)
- Cisco PSIRT — ISE RCE & Path Traversal (cisco-sa-ise-rce-traversal-8bYndVrZ)
- CVE Details — Cisco ISE vulnerability list
- MITRE CWE-204 — Observable Response Discrepancy
- FIRST CVSS v3.1 Specification
- CISA KEV Catalog
- FIRST EPSS
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.