← Back to Feed CACHED · 2026-09-26 23:04:31 · CACHE_KEY CVE-2026-20230
CVE-2026-20230 · CWE-918 · Disclosed 2026-06-03

Cisco Unified Communications Manager WebDialer SSRF to Root Privilege Escalation

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

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.

"Actively exploited SSRF-to-root chain on enterprise telephony—patch or disable WebDialer now."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Identify target and obtain hostname

The attacker locates an internet-facing or network-accessible CUCM instance and queries a known endpoint to retrieve the appliance's internal hostname—a prerequisite for crafting the SSRF payload. This step is trivial: the hostname is exposed by a specific URL on the WebDialer interface itself without authentication.
Conditions required:
  • Network access to CUCM WebDialer HTTP/HTTPS port
  • WebDialer service must be enabled
Where this breaks in practice:
  • 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
Detection/coverage: Shodan/Censys/FOFA dork for Cisco Unified CM WebDialer landing pages; Shadowserver tracks ~200 exposed instances
STEP 02

Send crafted SSRF request via WebDialer

The attacker sends a specially crafted HTTP request to the WebDialer endpoint that exploits CWE-918 (SSRF). Improper input validation allows the server to process a 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.
Conditions required:
  • Valid hostname from step 1
  • WebDialer endpoint reachable
Where this breaks in practice:
  • 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
Detection/coverage: Snort SID for cisco-sa-cucm-ssrf-cXPnHcW; look for file:// in WebDialer POST bodies in proxy/WAF logs
STEP 03

Deploy rogue Apache Axis service

Using the file-write primitive, the attacker writes a configuration or service descriptor that bootstraps a rogue Apache Axis instance on the CUCM appliance. This service provides a secondary upload vector that bypasses CUCM's application-level controls. The Axis service is already present on the appliance as part of the Tomcat stack; the attacker merely activates an additional endpoint.
Conditions required:
  • Successful file write from step 2
  • Apache Axis libraries present on the appliance (default)
Where this breaks in practice:
  • File integrity monitoring (FIM) on CUCM would alert on new service descriptors
  • Application allowlisting would block unexpected service activation
Detection/coverage: FIM alerts on /opt/cisco/ and Tomcat webapps/ directories; anomalous Axis endpoint registration in Tomcat access logs
STEP 04

Write JSP webshell via Axis

Through the rogue Axis service, the attacker uploads a JSP file-writer component to the Tomcat web root at a path like /platform-services/axis2-web/. This webshell provides persistent command execution on the appliance with the privileges of the Tomcat process (typically ccmservice or equivalent).
Conditions required:
  • Rogue Axis service from step 3
  • Write access to Tomcat webapps directory
Where this breaks in practice:
  • 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
Detection/coverage: Hunt for .jsp files in /opt/cisco/ or Tomcat webapps/ directories with recent modification timestamps; HTTP requests to /platform-services/axis2-web/ in access logs
STEP 05

Escalate to root

With command execution via the webshell, the attacker leverages local privilege escalation paths on the CUCM Linux appliance to achieve root. CUCM's hardened OS has known local escalation vectors, and the file-write primitive itself can target sensitive system files (cron, sudoers, SSH authorized_keys) to achieve root without a separate kernel exploit. Root access grants full control of telephony, access to LDAP/AD integration credentials, SIP trunk secrets, and call interception capabilities.
Conditions required:
  • Command execution from step 4
  • Local privilege escalation vector or direct file-write to privileged paths
Where this breaks in practice:
  • CUCM appliance OS is hardened and restricts shell access, but root file-write bypasses most controls
  • Audit logging may capture privilege escalation events
Detection/coverage: CUCM RTMT (Real-Time Monitoring Tool) audit logs; syslog forwarding for auth/privilege events; anomalous SSH sessions to CUCM
03 · Compensating Control

1
HIGH 8.6→IGNORE 0.0
SEVERITY REDUCED
Disable WebDialer service immediately — Navigate to Cisco Unified Serviceability > Tools > Service Activation and deactivate the Cisco WebDialer Web Service on all CUCM and CM SME nodes. This eliminates the attack surface entirely with no exploit path remaining. WebDialer is a convenience feature for click-to-call; disabling it breaks that integration but does not affect core call processing, voicemail, or phone registration. Given active exploitation and KEV listing, deploy within hours—this overrides the standard noisgate mitigation SLA.
2
HIGH 8.6→MEDIUM 5.5
SEVERITY REDUCED
Block external access to CUCM management and WebDialer ports — If WebDialer cannot be disabled (e.g., contact-center dependency), restrict access to CUCM HTTP/HTTPS ports (TCP 443, 8443, 80) at the perimeter firewall to only authorized internal networks. Add WAF rules blocking file:// in request bodies to the WebDialer endpoint. Deploy within hours given KEV status—this overrides the noisgate mitigation SLA.
3
HIGH 8.6→HIGH 7.5
Deploy file integrity monitoring on CUCM appliance — Configure FIM (Tripwire, OSSEC, or Cisco Security Agent) to monitor /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.
4
HIGH 8.6→IGNORE 0.0
SEVERITY REDUCED
Apply vendor patch (14SU6 or 15SU5/COP1) — Apply Cisco's fixed release to remediate the root cause. CUCM upgrades require maintenance windows due to call-processing restart. For Release 14, apply 14SU6 (available since June 3, 2026). For Release 15, apply 15SU5 or the interim COP1 fix. Given KEV listing with active exploitation, the noisgate remediation SLA is overridden—patch immediately, targeting completion within days, not the standard 180-day HIGH window.
5
HIGH 8.6→HIGH 7.0
Rotate AD/LDAP integration and SIP trunk credentials — If you suspect compromise or cannot confirm WebDialer was disabled before exploitation began, rotate all credentials stored on or accessible from CUCM: LDAP bind accounts, SIP trunk authentication secrets, SNMP community strings, and any service accounts. Root access to CUCM means all stored credentials should be considered exposed. Complete within 72 hours of patching.
What doesn't work
  • 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.
04 · Intelligence Metadata

The supporting signals.

In-the-wild statusActively 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-conceptPublic. 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.
EPSS0.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 statusListed. Added June 25, 2026. CISA BOD 26-04 required federal remediation by June 28, 2026—a 3-day window reflecting urgency.
CVSS vectorCVSS: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 versionsCisco 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 versions14SU6 (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 dateJune 3, 2026. Cisco advisory cisco-sa-cucm-ssrf-cXPnHcW published alongside patches. SSD Secure Disclosure credited with discovery.
Reporting researcherIndependent researcher working with SSD Secure Disclosure. Horizon3.ai published independent technical analysis. Defused Cyber provided first in-the-wild exploitation telemetry.

Sources.

  1. Cisco Security Advisory cisco-sa-cucm-ssrf-cXPnHcW
  2. Horizon3.ai — CVE-2026-20230 Attack Research
  3. BleepingComputer — Cisco Unified CM flaw now exploited in attacks
  4. Help Net Security — Cisco Unified CM flaw exploited to drop webshells
  5. CISA KEV Catalog — June 25, 2026 additions
  6. The Hacker News — Cisco Patches CVE-2026-20230 as Exploit Code Goes Public
  7. Threat-Modeling.com — CVE-2026-20230 SSRF to RCE analysis
  8. Cisco WebDialer Feature Configuration Guide (Release 15)
05 · The Call

Final Verdict
= UNCHANGED to HIGH (8.6/10)

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.

06 · Verification

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.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/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