Someone left a mail slot in your PBX and attackers are sliding webshells through it
CVE-2026-20230 is an unauthenticated server-side request forgery (SSRF) in the WebDialer component of Cisco Unified Communications Manager (CUCM) and Unified CM Session Management Edition (SME). An attacker sends a crafted HTTP request that abuses improper input validation to force the server to issue internal requests via file:// URI schemes, enabling arbitrary file writes to the underlying Linux OS. The chain then pivots through an internal Apache Axis service to deploy a JSP webshell and escalate to root. Affected releases are Unified CM 14 prior to 14SU6 and Unified CM 15 prior to 15SU5. WebDialer is disabled by default but is commonly activated for click-to-call integrations in enterprise telephony deployments.
Cisco assigned a CVSS 8.6 (HIGH) but labeled the advisory Critical in narrative text—a contradiction that reflects the gap between the CVSS vector (C:N/I:H/A:N) and the real-world outcome of full root compromise. The vector undersells the impact because it scores only the SSRF primitive, not the chained file-write-to-root escalation. In practice, the severity matches HIGH for the general population (WebDialer off by default, most instances internal-only) but escalates to effectively CRITICAL for any deployment that has WebDialer enabled and reachable. Active exploitation has been confirmed since late June 2026, with webshells landing on honeypots and production systems via Tor infrastructure.
5 steps from start to impact.
Identify target and obtain hostname
- Network access to CUCM WebDialer HTTP/HTTPS port
- WebDialer service must be enabled
- WebDialer is disabled by default; must be explicitly activated by an administrator
- ~1,300 internet-exposed instances per Hunter scans—most CUCM deployments are internal-only
Cisco Unified CM WebDialer landing pages; Shadowserver tracks ~200 exposed instancesSend crafted SSRF request via WebDialer
file:// URI, causing it to write attacker-controlled content to an arbitrary filesystem path on the underlying Linux OS. No authentication or session tokens are required. SSD Secure Disclosure published a working PoC for this step.- Valid hostname from step 1
- WebDialer endpoint reachable
- WAF rules blocking
file://in request bodies would interrupt the chain - IDS/IPS signatures for CVE-2026-20230 are available from Cisco, Snort, and Suricata
file:// in WebDialer POST bodies in proxy/WAF logsDeploy rogue Apache Axis service
- Successful file write from step 2
- Apache Axis libraries present on the appliance (default)
- File integrity monitoring (FIM) on CUCM would alert on new service descriptors
- Application allowlisting would block unexpected service activation
/opt/cisco/ and Tomcat webapps/ directories; anomalous Axis endpoint registration in Tomcat access logsWrite JSP webshell via Axis
/platform-services/axis2-web/. This webshell provides persistent command execution on the appliance with the privileges of the Tomcat process (typically ccmservice or equivalent).- Rogue Axis service from step 3
- Write access to Tomcat webapps directory
- Endpoint detection on the CUCM appliance is uncommon but Cisco Security Agent or third-party EDR would catch JSP writes
- Network segmentation limiting egress from CUCM restricts C2 utility
.jsp files in /opt/cisco/ or Tomcat webapps/ directories with recent modification timestamps; HTTP requests to /platform-services/axis2-web/ in access logsEscalate to root
- Command execution from step 4
- Local privilege escalation vector or direct file-write to privileged paths
- CUCM appliance OS is hardened and restricts shell access, but root file-write bypasses most controls
- Audit logging may capture privilege escalation events
file:// in request bodies to the WebDialer endpoint. Deploy within hours given KEV status—this overrides the noisgate mitigation SLA./opt/cisco/, Tomcat webapps/ directories, and system files (/etc/cron*, /etc/sudoers, ~/.ssh/authorized_keys) for unauthorized writes. This does not prevent exploitation but provides near-real-time detection of webshell deployment (steps 3-4 of the attack chain). Deploy within 30 days per noisgate mitigation SLA for HIGH.- Network segmentation alone — while it limits internet exposure, CUCM must be reachable by IP phones, softphones, and admin workstations on internal networks. Any attacker with a foothold on the voice VLAN or management network can reach WebDialer. Segmentation reduces but does not eliminate the attack surface.
- CUCM's built-in OS hardening — the CUCM appliance restricts shell access and runs a hardened RHEL derivative, but the file-write primitive bypasses application-layer controls entirely. Root escalation from arbitrary file write is well-understood on this platform.
- TLS/certificate pinning on WebDialer — the SSRF is triggered by inbound HTTP requests to the WebDialer service, not by intercepting outbound connections. TLS does not prevent exploitation; it merely encrypts the malicious payload in transit.
The supporting signals.
| In-the-wild status | Actively exploited. Cisco PSIRT confirmed exploitation on July 2, 2026. Defused Cyber observed webshell deployment via Tor infrastructure starting the weekend of June 21–22, 2026. CISA KEV listed June 25, 2026 with BOD 26-04 remediation deadline of June 28. |
|---|---|
| Proof-of-concept | Public. SSD Secure Disclosure published a technical write-up and working PoC. Multiple GitHub repositories aggregate the PoC (e.g., SecureWithUmer/CVE-2026-PoCs). Exploitation tooling uses file:// payloads for the SSRF primitive. |
| EPSS | 0.882 — 88th percentile. This places CVE-2026-20230 in the top 12% of CVEs most likely to be exploited, consistent with observed in-the-wild activity. |
| KEV status | Listed. Added June 25, 2026. CISA BOD 26-04 required federal remediation by June 28, 2026—a 3-day window reflecting urgency. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N — Network-accessible, no auth, no user interaction, scope change (SSRF crosses trust boundary). The C:N underscores this scores only the SSRF+file-write primitive, not the chained root outcome. |
| Affected versions | Cisco Unified CM and Unified CM SME Release 14 (all versions prior to 14SU6) and Release 15 (all versions prior to 15SU5). Older releases (11.5, 12.5) are end-of-support and likely vulnerable but unpatched. |
| Fixed versions | 14SU6 (available June 3, 2026) and 15SU5 (available September 2026; COP1 interim fix available). No backports to 12.x or earlier. |
| Internet exposure | ~1,300 instances visible via Hunter (nearly half in the US); ~200 instances tracked by Shadowserver (Asia and North America). Most enterprise CUCM deployments are internal-only, but exposed WebDialer endpoints are directly exploitable. |
| Disclosure date | June 3, 2026. Cisco advisory cisco-sa-cucm-ssrf-cXPnHcW published alongside patches. SSD Secure Disclosure credited with discovery. |
| Reporting researcher | Independent researcher working with SSD Secure Disclosure. Horizon3.ai published independent technical analysis. Defused Cyber provided first in-the-wild exploitation telemetry. |
Sources.
- Cisco Security Advisory cisco-sa-cucm-ssrf-cXPnHcW
- Horizon3.ai — CVE-2026-20230 Attack Research
- BleepingComputer — Cisco Unified CM flaw now exploited in attacks
- Help Net Security — Cisco Unified CM flaw exploited to drop webshells
- CISA KEV Catalog — June 25, 2026 additions
- The Hacker News — Cisco Patches CVE-2026-20230 as Exploit Code Goes Public
- Threat-Modeling.com — CVE-2026-20230 SSRF to RCE analysis
- Cisco WebDialer Feature Configuration Guide (Release 15)
Why this verdict
- Active exploitation with public PoC: KEV-listed since June 25 with a 3-day CISA deadline. Webshells are being deployed via Tor. SSD Secure Disclosure PoC is public and weaponized. EPSS 0.882 confirms the exploitation probability is not theoretical—this is happening now.
- Unauthenticated remote chain to root: The attack requires zero credentials and zero user interaction. The full chain—SSRF → file write → Axis abuse → webshell → root—is well-documented and reproducible. The CVSS vector undersells the impact by scoring only the SSRF primitive (C:N), but the real outcome is complete appliance compromise.
- WebDialer default-off is real friction that caps the blast radius: WebDialer is disabled by default and must be explicitly activated. This meaningfully narrows the vulnerable population. Organizations that never enabled WebDialer are not exploitable via this chain, which prevents a blanket CRITICAL rating across the entire installed base.
- Most deployments are internal-only: Of the tens of thousands of CUCM deployments globally, only ~1,300 are internet-facing per Hunter scans. Internal-only deployments require the attacker to already have network access (post-initial-access), which compounds friction. However, internal reachability is common for any attacker with a foothold.
- Role multiplier: CUCM is enterprise telephony infrastructure, not a canonical high-value-role component (it is not a DC, hypervisor, PAM, CI/CD, CA, or network edge appliance). However, CUCM commonly holds AD/LDAP integration credentials, SIP trunk secrets, and provides call-interception capability. Root compromise of CUCM yields host-level + credential-harvesting blast radius with potential for lateral movement into the AD domain, but does not directly produce domain takeover or fleet compromise. This places it firmly in HIGH territory—significant but not fleet-scale by default. For organizations where CUCM is federated across sites or integrated with contact-center platforms, the blast radius expands toward the high end of HIGH.
Why not higher?
CRITICAL would require the vulnerable condition (WebDialer enabled) to be the default state or overwhelmingly common, AND the affected component to be canonically fleet-scale or identity-scale. WebDialer is disabled by default, which means a significant share of the installed base is not exploitable without configuration changes. CUCM, while critical telephony infrastructure, does not directly control identity (AD/DC), secrets (PAM), or compute (hypervisor). Root on CUCM is serious but contained—it does not inherently cascade to domain takeover without additional exploitation of harvested credentials.
Why not lower?
Active exploitation is confirmed and KEV-listed with a 3-day CISA deadline. The chain is unauthenticated, remote, requires no user interaction, and ends in root. Public PoC is weaponized and being used in the wild. EPSS 0.882 places this well above the exploitation threshold. Downgrading below HIGH would be indefensible given these signals—even with WebDialer default-off, any deployment that has it enabled is immediately and trivially exploitable.
Crowdsourced verification payload.
Run this script on the CUCM publisher or subscriber node via the CLI/SSH admin shell (requires admin or root access). Execute with: bash check_cve_2026_20230.sh. The script checks whether the WebDialer service is active and whether the installed CUCM version is vulnerable.
#!/bin/bash
# CVE-2026-20230 Checker for Cisco Unified Communications Manager
# Checks WebDialer service status and installed version against fixed releases.
# Run on CUCM publisher/subscriber via admin CLI (SSH).
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
RESULT="UNKNOWN"
WEBDIALER_ACTIVE="unknown"
VERSION="unknown"
# --- Check WebDialer service status ---
if command -v utils 2>/dev/null | grep -q utils; then
# CUCM CLI environment
WD_STATUS=$(echo 'utils service list' | sudo -u admin cli 2>/dev/null | grep -i 'webdialer' || true)
else
# Direct OS check for Tomcat-based WebDialer
WD_STATUS=$(ps aux 2>/dev/null | grep -i '[w]ebdialer' || true)
if [ -z "$WD_STATUS" ]; then
WD_STATUS=$(systemctl is-active cisco-webdialer 2>/dev/null || true)
fi
fi
if echo "$WD_STATUS" | grep -iqE '(started|running|active)'; then
WEBDIALER_ACTIVE="yes"
elif echo "$WD_STATUS" | grep -iqE '(stopped|inactive|deactivated|not)'; then
WEBDIALER_ACTIVE="no"
fi
# --- Check installed version ---
if [ -f /usr/local/cm/version.txt ]; then
VERSION=$(cat /usr/local/cm/version.txt 2>/dev/null | head -1)
elif [ -f /usr/local/platform/.version ]; then
VERSION=$(cat /usr/local/platform/.version 2>/dev/null | head -1)
elif command -v show 2>/dev/null | grep -q show; then
VERSION=$(echo 'show version active' | sudo -u admin cli 2>/dev/null | grep -i 'active' | head -1 || true)
fi
# --- Version comparison ---
# Fixed: 14SU6+ or 15SU5+
VULN_BY_VERSION="unknown"
if echo "$VERSION" | grep -qE '^14\.'; then
SU_NUM=$(echo "$VERSION" | grep -oP 'SU\K[0-9]+' || echo "0")
if [ "$SU_NUM" -ge 6 ] 2>/dev/null; then
VULN_BY_VERSION="no"
else
VULN_BY_VERSION="yes"
fi
elif echo "$VERSION" | grep -qE '^15\.'; then
SU_NUM=$(echo "$VERSION" | grep -oP 'SU\K[0-9]+' || echo "0")
if [ "$SU_NUM" -ge 5 ] 2>/dev/null; then
VULN_BY_VERSION="no"
else
VULN_BY_VERSION="yes"
fi
elif echo "$VERSION" | grep -qE '^(11|12|10)\.'; then
VULN_BY_VERSION="yes" # EoS releases, no patch available
fi
# --- Check for webshell IOCs ---
IOC_FOUND="no"
if find /opt/cisco/ /usr/local/thirdparty/jakarta-tomcat/webapps/ -name '*.jsp' -newer /usr/local/cm/version.txt 2>/dev/null | grep -qE '(axis2-web|cmd|shell|upload)'; then
IOC_FOUND="yes"
fi
if [ -f /tmp/cve-2026-20230-test.txt ]; then
IOC_FOUND="yes"
fi
# --- Determine result ---
echo "=== CVE-2026-20230 Assessment ==="
echo "CUCM Version: $VERSION"
echo "WebDialer Active: $WEBDIALER_ACTIVE"
echo "Vulnerable (ver): $VULN_BY_VERSION"
echo "IOC artifacts: $IOC_FOUND"
echo ""
if [ "$IOC_FOUND" = "yes" ]; then
echo "!! COMPROMISE INDICATORS DETECTED — investigate immediately !!"
RESULT="VULNERABLE"
elif [ "$VULN_BY_VERSION" = "no" ]; then
RESULT="PATCHED"
elif [ "$VULN_BY_VERSION" = "yes" ] && [ "$WEBDIALER_ACTIVE" = "yes" ]; then
RESULT="VULNERABLE"
echo "** WebDialer is ACTIVE on a vulnerable version — actively exploitable **"
elif [ "$VULN_BY_VERSION" = "yes" ] && [ "$WEBDIALER_ACTIVE" = "no" ]; then
RESULT="VULNERABLE"
echo "** Version is vulnerable but WebDialer is inactive — not currently exploitable **"
echo "** Patch anyway: WebDialer could be re-enabled **"
else
RESULT="UNKNOWN"
fi
echo ""
echo "$RESULT"
case $RESULT in
PATCHED) exit 0 ;;
VULNERABLE) exit 1 ;;
*) exit 2 ;;
esac