
Analyzes CVE-2026-20230 SSRF to arbitrary file write and RCE in Cisco Unified Communications Manager, providing PoC derivation, detection logic, and defensive guidance.
Scope: This content is intended solely for local test environments, authorized reproduction environments, vulnerability verification, and protection rule analysis. Do not use against unauthorized targets. This article primarily analyzes the exploitation chain, verifiable phenomena, judgment logic, and defense approaches for CVE-2026-20230. It does not provide directly copyable attack payloads, WebShell content, or command execution payloads.
CVE-2026-20230 is a server-side request forgery vulnerability in Cisco Unified Communications Manager (Unified CM / CUCM) and Cisco Unified Communications Manager Session Management Edition (Unified CM SME). This vulnerability stems from insufficient input validation in the processing flow of certain HTTP requests. An unauthenticated attacker can craft requests that cause the affected device to access internal interfaces or local resources on behalf of the attacker.
The impact of this vulnerability is not limited to ordinary SSRF probing. Public technical analysis shows that under specific versions and service activation conditions, SSRF can be further chained into arbitrary file write capability. The attacker can write controlled content to underlying OS paths, and then leverage Web container accessible directories or server-side component loading mechanisms to convert file writing into code execution.
Cisco has assigned a CVSS v3.1 score of 8.6 for this vulnerability, with the vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N
Although the CVSS score indicates High severity, Cisco marked the Security Impact Rating as Critical. The reason is that successful exploitation can lead to writing files to the underlying OS and potentially escalate to root privileges.
It is important to note that a key prerequisite for this vulnerability is that the WebDialer service must be enabled. WebDialer is disabled by default, so simply seeing a CUCM asset does not directly indicate the vulnerability is exploitable. Proper risk assessment requires confirming the product version, patch status, WebDialer service status, and whether related interfaces are accessible.
This vulnerability is not an ordinary Web vulnerability where "accessing a fixed URL and returning 200 means it exists." Its exploitation chain involves at least three layers:
Therefore, simply accessing an interface and getting HTTP 200, 302, 401, 404, or 500 cannot directly prove the existence or absence of the vulnerability.
For example, the fact that the WebDialer WSDL interface is accessible only indicates that the target exposes WebDialer-related functionality; it does not prove that subsequent SSRF will necessarily bypass filtering. Similarly, the fact that the installClusterStatusExecute interface is accessible only indicates that the entry point exists, but does not independently prove that arbitrary file writing has been achieved. Conversely, if a step returns an anomaly, it could be caused by the target version, patch, hostname resolution, path permissions, proxy device, or service status, and does not necessarily mean the entire exploitation chain does not exist.
A more reliable judgment should adopt a multi-stage evidence combination:
Only when "WebDialer enabled + affected version + SSRF behavior confirmed + controlled file write confirmed" all appear together should it be judged as high-confidence exploitable.
The core of the currently public exploitation chain is not simple SSRF, but a combined use of SSRF with Axis/Java Web service mechanisms, log writing, or deployment descriptor processing logic.
The overall approach can be summarized as:
WebDialer information gathering
↓
Obtain the target's real hostname
↓
Trigger SSRF through cmplatform-related interfaces
↓
Access internal WebDialer / Axis management paths
↓
Write or deploy controlled service descriptor content
↓
Form new callable services or file write capability
↓
Convert file write capability into Web-accessible scripts
↓
Under specific conditions, further achieve command execution
From the chain design perspective, hostname is a key point. Some filtering logic may block common local addresses such as 127.0.0.1 and localhost, but the target's real hostname might be allowed into subsequent request processing. Therefore, the PoC first extracts the real hostname from the WebDialer WSDL information, then uses it as the internal access prefix in the SSRF chain.
The second key point is the Axis service-related logic. The PoC does not directly upload files to the Web directory; instead, through the internal service processing chain, it causes server-side components to write attacker-controlled content to specific paths. This process is essentially a combination of "server-side internal request + component configuration/log writing behavior + path traversal/path control."
The third key point is the two-stage writing. The first stage is usually used to establish a more stable file write entry point, and the second stage writes the command execution script to a Web-accessible directory. The reason is that directly writing a complete command execution logic in one step through SSRF may be affected by encoding, length, XML structure, path permissions, and server-side parsing behavior. The two-stage approach makes it easier to break down complex payloads.
This article does not provide complete exploitation payloads or WebShell content. For protection and verification, it is only necessary to understand the following core characteristics:
External request entry point: cmplatform installation status related interfaces
Information gathering entry point: WebDialer WSDL / services related interfaces
Internal forwarding target: WebDialer / Axis / AdminService related paths
Key behaviors: SSRF, server-side internal requests, controlled file writing, Web-accessible file landing
Final risks: arbitrary file write, WebShell landing, command execution, root privilege escalation path
The PoC first needs to obtain the target's real hostname, not just its IP address or external domain name.
The reason is that SSRF filtering logic may not only check the final connection target but also validate the hostname field, URL string, local address keywords, etc. Common local addresses like 127.0.0.1 and localhost may be blocked, while the device's real hostname may be considered a legitimate node name in some scenarios.
Interfaces that can assist in this determination are usually related to WebDialer WSDL information. After accessing such WSDL, the response may contain service addresses, location fields, or other parsable host identifiers. The PoC extracts the hostname from the URL in the response text and uses it as the internal access target for the next SSRF stage.
The judgment criteria for this stage should be:
If hostname parsing fails, the PoC may fall back to the target IP, but this significantly lowers the success rate. In real environments, common reasons for hostname parsing failure include WebDialer not being enabled, the interface being restricted by access controls, the response being rewritten by a reverse proxy, or incomplete certificate or service configuration.
The SSRF trigger point is located in the logic for querying cmplatform installation status. This functionality is originally used to query the installation status of cluster nodes. The server assembles an internal request based on the node identifier or hostname submitted by the user.
The core problem is that the attacker-controlled hostname parameter is not strictly restricted to legitimate node names or trusted hosts, allowing this parameter to be crafted into more complex internal access paths. The server then initiates requests to internal interfaces on behalf of the attacker.
At this stage, the key is not "being able to access an external URL," but "being able to make the CUCM device itself access its internally reachable WebDialer / Axis management interfaces." Therefore, the value of SSRF comes from two aspects:
During authorized verification, SSRF success cannot be judged solely by the HTTP status code. More reliable evidence includes:
In the public chain, SSRF is further used to access Axis-related service interfaces and attempt to write service deployment descriptor content. By constructing special XML/WSDD structures, the attacker causes the server-side components to write controlled content to specified paths during processing.
The essence of this stage is not traditional file upload, but abusing the processing logic of server-side components:
Attacker-controlled parameters
↓
SSRF internal request
↓
Axis / Web service processing
↓
Controlled deployment descriptor or log write
↓
File generation at specified path
From a security analysis perspective, here are several key points:
Therefore, the high-risk point of CVE-2026-20230 is not just SSRF, but that SSRF can cross trust boundaries, enter internal management/service deployment chains, and ultimately trigger controlled file writing.
PoC designs typically adopt a two-stage write approach rather than completing command execution in one step.
The first stage is used to create a simple file write capability. The goal of this stage is to allow the attacker to write content to a specified location on the server through a Web-accessible path.
The second stage then uses the write capability from the first stage to write the command execution script to a Web-accessible directory. Subsequently, the attacker can trigger system command execution via HTTP parameters.
The advantages of the two-stage design are:
However, from a defense perspective, the two-stage write also creates clearer detection points:
The current PoC flow can be summarized as:
From the exploitation success rate perspective, the most critical failure points usually concentrate on:
Therefore, this PoC has high exploitability on specific affected versions with matching default paths, but it is not a stable one-size-fits-all for all CUCM assets.
Success judgment for CVE-2026-20230 cannot simply be based on whether the script completes. A more reasonable judgment should be divided into four tiers.
Conditions:
WebDialer WSDL accessible
or services page accessible
or cmplatform-related interfaces accessible
This only indicates the target has an associated attack surface; it does not prove the vulnerability is exploitable.
Conditions:
Target version within affected range
WebDialer enabled
Hostname can be parsed
SSRF entry point returns anomalous but reasonable server response
In this case, further verification should be performed with server logs or authorized test environments.
Conditions:
After SSRF, controlled files appear on the server
or anomalous files created by the server process appear in the Web directory
or anomalous new services appear on the services page
or logs contain controlled deployment descriptor content
At this tier, it can be confirmed that the exploitation chain has broken through the ordinary SSRF stage and entered the arbitrary file write risk.
Conditions:
The written Web-accessible script is successfully parsed and executed
and the server-side execution result can be observed through authorized test commands
Only this tier confirms remote command execution. Successful file write does not necessarily equal successful RCE, but in high-privilege service environments like CUCM, file write alone is sufficient to pose a serious risk.
This article does not provide exploit execution examples that can be directly used for attacks.
In authorized environments, it is recommended to use "read-only checks" or "non-destructive verification" methods, for example:
python3 CVE-2026-20230-check.py https://127.0.0.1 --check
Recommended checks include:
It is not recommended to perform full file write or command execution verification on production systems. Even for authorized tests, priority should be given to isolated test environments, snapshot environments, or the verification process recommended by the vendor.
The security boundaries of such PoC must be clearly defined.
First, command execution should not be the default. The command execution stage is a high-risk verification that can easily cause system state changes, log contamination, service anomalies, or responses from security devices.
Second, WebShell should not be written by default. Even if a test file is written, it may be flagged by EDR, WebShell detection, file integrity monitoring, or compliance audit systems as a real intrusion.
Third, batch scanning against public network targets should not be performed. This vulnerability requires no authentication, and targets are mostly enterprise communication infrastructure. Unauthorized scanning and exploitation carry extremely high risk.
Fourth, check mode should be separated from exploitation mode. It is recommended to split the PoC into two scripts: one only for asset identification and service status judgment, and the other for file write verification only in local test environments or explicitly authorized environments.
Fifth, the target scope should be restricted. The PoC can include protection mechanisms such as local addresses, private network segments, whitelisted domains, authorization confirmation parameters, etc., to avoid accidentally affecting third-party systems.
Sixth, the RCE stage should be disabled by default. Even if research code is retained, it should require the user to explicitly pass an authorization confirmation parameter before allowing file write or command execution verification.
From a traffic detection perspective, it is not sufficient to simply match a fixed file name, service name, or JSP name. The service names, file names, and paths in public PoCs can be modified, making single-string rules prone to missing detections.
A more reasonable detection approach is to extract features based on attack chain stages.
Focus on:
/webdialer/Version.jws?wsdl
/webdialer/services
WebDialer WSDL
Axis services listing
If an external client accesses the WSDL and then the cmplatform installation status interface within a short time, the risk level should be raised.
Focus on:
/cmplatform/installClusterStatusExecute
action=clusterNodeInstallStatus
hostname parameter abnormally long
hostname parameter contains URL-encoded path separators
hostname parameter contains internal path features such as webdialer, services, AdminService, platformcom, installstages
The key at this stage is that the hostname parameter no longer looks like a normal hostname but exhibits path-like, URL-like, encoded, or XML-like characteristics.
Focus on:
deployment
wsdd
java:RPC
requestFlow
LogHandler
allowedMethods
className
fileName
writeToConsole
When these fields appear together, there should be high suspicion that the attacker is attempting to write controlled content via Axis service deployment descriptors.
Focus on:
axis2-web
platform-services
JSP file write
Parameters containing combinations of file name and file content
Web directory path traversal
common/log/taos-log-a
tomcat/webapps
If the attack traffic contains extensive ../, URL-encoded path traversal, JSP extensions, and Tomcat WebApp paths, it should be judged as high-risk.
Focus on:
Newly added JSP accessed
Request parameters containing pwd, cmd, command, exec, i, etc.
Response containing system command output format
Same source IP completing WSDL retrieval, SSRF, write, and execute actions in a short time
From a rule design perspective, stage-based detection is recommended:
During emergency investigation, it is recommended to focus on the following locations and phenomena:
installClusterStatusExecute requests./tmp, WebApp directories, log directories.If exploitation is suspected, priority should be given to isolating management plane access, retaining logs and file system evidence, and then performing patch upgrades, WebShell cleanup, anomalous service cleanup, and account/credential rotation.
The fundamental fix is to upgrade to Cisco's official fixed version or apply the official temporary fix package.
General handling recommendations are as follows:
The key to CVE-2026-20230 is not the exposure of a single interface, but the trust boundary failure formed by the combinable chain among CUCM WebDialer, cmplatform installation status query logic, internal Axis service processing, and file write capability.
This chain can be summarized as:
Unauthenticated external request
↓
WebDialer exposure surface confirmation
↓
Real hostname retrieval
↓
cmplatform SSRF
↓
Internal Axis service access
↓
Controlled service descriptor or log write
↓
Web-accessible file landing
↓
Command execution and root privilege escalation risk
Practical exploitability depends on whether WebDialer is enabled, whether the target version is affected, whether hostname filtering can be bypassed, whether the path landing matches, whether the Web container executes the written file, and whether the target has applied patches.
From a defense perspective, it is insufficient to rely solely on "whether a certain JSP file exists" to judge an attack. A more reliable approach is to perform correlation detection across the multi-stage chain: WSDL information gathering, cmplatform anomalous hostname, Axis/WSDD characteristics, path traversal write, JSP landing access, and command parameter access. If multiple stages appear consecutively from the same source within a short time, it should be treated as a high-risk intrusion event.