分析 CVE-2026-20230 中 Cisco Unified Communications Manager 的 SSRF 到任意文件写入及 RCE 漏洞,提供 PoC 推导、检测逻辑与防御指导。
适用范围:仅用于本地靶场、授权复现环境、漏洞验证和防护规则分析。不要对未授权目标使用。本文主要分析 CVE-2026-20230 的利用链条、可验证现象、判断逻辑和防护思路,不提供可直接复制执行的攻击报文、WebShell 内容或命令执行载荷。
CVE-2026-20230 是 Cisco Unified Communications Manager(Unified CM / CUCM)和 Cisco Unified Communications Manager Session Management Edition(Unified CM SME)中的服务端请求伪造漏洞。该漏洞源于特定 HTTP 请求处理流程中的输入校验不足,攻击者可以在未认证的情况下构造请求,使受影响设备代表攻击者访问内部接口或本地资源。
该漏洞的影响并不止于普通 SSRF 探测。公开技术分析显示,在特定版本和服务启用条件下,SSRF 可以被进一步串联到任意文件写入能力,攻击者可将可控内容写入底层操作系统路径,再借助 Web 容器可访问目录或服务端组件加载机制,将文件写入转化为代码执行。
Cisco 对该漏洞给出的 CVSS v3.1 评分为 8.6,向量为:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N
虽然 CVSS 分数显示为 High,但 Cisco 将该漏洞的 Security Impact Rating 标记为 Critical。原因是成功利用后可写入底层操作系统文件,并可能进一步提升到 root 权限。
需要特别注意的是,该漏洞的关键前置条件是 WebDialer 服务必须启用。WebDialer 默认关闭,因此不能只看到 CUCM 资产就直接判断漏洞可利用。真正的风险判断需要同时确认产品版本、补丁状态、WebDialer 服务状态以及相关接口是否可访问。
这个漏洞不是普通的“访问某个固定 URL 返回 200 就存在”的 Web 漏洞。它的利用链至少包含三个层次:
因此,单独访问某个接口得到 HTTP 200、302、401、404 或 500,都不能直接证明漏洞存在或不存在。
例如,WebDialer WSDL 接口可访问只能说明目标暴露了 WebDialer 相关功能,并不能证明后续 SSRF 一定能穿透过滤。installClusterStatusExecute 接口可访问也只能说明存在相关入口,不能单独证明任意文件写入已经成立。反过来,如果某一步返回异常,也可能是目标版本、补丁、hostname 解析、路径权限、代理设备或服务状态导致,并不一定代表整个漏洞链不存在。
更稳妥的判断应当采用多阶段证据组合:
只有“WebDialer 启用 + 受影响版本 + SSRF 行为成立 + 受控文件写入成立”同时出现时,才应将其判断为高可信可利用。
当前公开利用链的核心不是单纯 SSRF,而是 SSRF 与 Axis/Java Web 服务机制、日志写入或部署描述文件处理逻辑之间的组合利用。
整体思路可以概括为:
WebDialer 信息获取
↓
获取目标真实 hostname
↓
通过 cmplatform 相关接口触发 SSRF
↓
访问内部 WebDialer / Axis 管理路径
↓
写入或部署可控服务描述内容
↓
形成新的可调用服务或文件写入能力
↓
将文件写入能力转化为 Web 可访问脚本
↓
在特定环境下进一步达到命令执行
从链路设计看,hostname 是一个关键点。部分过滤逻辑会拦截 127.0.0.1、localhost 等常见本地地址,但目标真实 hostname 可能被允许进入后续请求流程。因此,PoC 会先从 WebDialer 的 WSDL 信息中提取真实主机名,再将其作为 SSRF 链路中的内部访问前缀。
第二个关键点是 Axis 服务相关逻辑。PoC 并不是直接向 Web 目录上传文件,而是通过内部服务处理链,使服务端组件将攻击者可控内容写入到特定路径。该过程本质上是“服务端内部请求 + 组件配置/日志写入行为 + 路径穿越/路径控制”的组合。
第三个关键点是二阶段写入。第一阶段通常用于建立一个更稳定的文件写入入口,第二阶段再将命令执行脚本写入 Web 可访问目录。这样做的原因是,直接通过 SSRF 一步写入完整命令执行逻辑可能受编码、长度、XML 结构、路径权限和服务端解析行为影响,而二阶段方式更容易把复杂载荷拆开。
本文不提供完整利用报文和 WebShell 内容。防护与验证时只需要理解以下核心特征:
外部请求入口:cmplatform 安装状态相关接口
信息获取入口:WebDialer WSDL / services 相关接口
内部转发目标:WebDialer / Axis / AdminService 相关路径
关键行为:SSRF、服务端内部请求、可控文件写入、Web 可访问文件落地
最终风险:任意文件写入、WebShell 落地、命令执行、root 权限提升路径
PoC 首先需要获得目标的真实 hostname,而不是只使用 IP 地址或外部域名。
原因在于 SSRF 过滤逻辑并不一定只判断最终连接目标,还可能对 hostname 字段、URL 字符串、本地地址关键字等进行校验。常见的 127.0.0.1、localhost 等本地地址可能会被阻断,而设备真实 hostname 在某些场景下会被视为合法节点名。
可用于辅助判断的接口通常与 WebDialer WSDL 信息有关。访问该类 WSDL 后,响应中可能包含服务地址、location 字段或其他可解析的主机标识。PoC 会从响应文本中提取 URL 中的 hostname,并将其作为下一阶段 SSRF 的内部访问目标。
这个阶段的判断口径应当是:
如果 hostname 解析失败,PoC 可能会回退到目标 IP,但这会显著降低成功率。真实环境中,hostname 解析失败常见原因包括 WebDialer 未启用、接口被访问控制限制、响应被反向代理改写、证书或服务配置不完整。
SSRF 触发点位于 cmplatform 相关安装状态查询逻辑中。该功能原本用于查询集群节点安装状态,服务端会根据用户提交的节点标识或 hostname 组装内部请求。
漏洞的核心问题在于,攻击者可控的 hostname 参数没有被严格限制为合法节点名或受信任主机,导致该参数可以被构造成更复杂的内部访问路径。服务端随后会代表攻击者向内部接口发起请求。
这个阶段的关键不是“能访问一个外部 URL”,而是“能让 CUCM 设备自身访问它内部可达的 WebDialer / Axis 管理接口”。因此,SSRF 的价值来自两个方面:
在授权验证中,不能仅凭 HTTP 状态码判断 SSRF 成功。更可靠的证据包括:
公开链路中,SSRF 被进一步用于访问 Axis 相关服务接口,并尝试写入服务部署描述内容。攻击者通过构造特殊的 XML/WSDD 结构,使服务端组件在处理过程中把可控内容写入指定路径。
这一阶段的本质不是传统文件上传,而是滥用服务端组件的处理逻辑:
用户可控参数
↓
SSRF 内部请求
↓
Axis / Web 服务处理
↓
可控部署描述或日志写入
↓
指定路径文件生成
从安全分析角度看,这里有几个关键点:
因此,CVE-2026-20230 的高危点并不只是 SSRF,而是 SSRF 能跨越信任边界,进入内部管理/服务部署链路,并最终触发可控文件写入。
PoC 设计中通常会采用二阶段写入,而不是一步完成命令执行。
第一阶段用于创建一个简单的文件写入能力。这个阶段的目标是让攻击者可以通过一个 Web 可访问路径向服务器指定位置写入内容。
第二阶段再利用第一阶段写入能力,将命令执行脚本写入到 Web 可访问目录。随后攻击者即可通过 HTTP 参数触发系统命令执行。
二阶段设计的优势是:
但从防护角度看,二阶段写入也带来更清晰的检测面:
当前 PoC 的流程可以概括为:
从利用成功率看,最关键的失败点通常集中在:
因此,该 PoC 在特定受影响版本和默认路径匹配时可利用性较高,但并不是对所有 CUCM 资产都稳定通杀。
CVE-2026-20230 的成功判断不能只看脚本是否跑完。更合理的判断应分为四档。
条件是:
WebDialer WSDL 可访问
或 services 页面可访问
或 cmplatform 相关接口可访问
这只能说明目标存在相关攻击面,不能证明漏洞可利用。
条件是:
目标版本处于受影响范围
WebDialer 已启用
hostname 能被解析
SSRF 入口返回异常但合理的服务端响应
这种情况下应继续结合服务端日志或授权靶场做验证。
条件是:
SSRF 后服务端出现受控文件
或 Web 目录出现由服务端进程创建的异常文件
或 services 页面出现异常新增服务
或日志中出现可控部署描述内容
到这一档时,可以确认漏洞链已经突破普通 SSRF 阶段,进入任意文件写入风险。
条件是:
写入的 Web 可访问脚本被成功解析执行
并且能够通过授权测试命令观察到服务端执行结果
只有这一档才能判断为远程命令执行成立。文件写入成功不必然等于 RCE 成功,但在 CUCM 这类高权限服务环境中,文件写入已经足以构成严重风险。
本文不提供可直接用于攻击的 exploit 执行示例。
在授权环境中,建议优先使用“只读式检查”或“非破坏性验证”方式,例如:
python3 CVE-2026-20230-check.py https://127.0.0.1 --check
建议检查项包括:
不建议在生产系统上执行完整写文件或命令执行验证。即使是授权测试,也应优先在隔离靶场、快照环境或厂商建议的验证流程中进行。
该类 PoC 的安全边界必须明确。
第一,不应默认执行命令。命令执行阶段属于高风险验证,容易造成系统状态改变、日志污染、服务异常或安全设备联动响应。
第二,不应默认写入 WebShell。即使写入的是测试文件,也可能被 EDR、WebShell 查杀、文件完整性监控或合规审计系统判定为真实入侵行为。
第三,不应对公网目标批量探测。该漏洞无需认证,且目标多为企业通信基础设施,未授权扫描和利用风险极高。
第四,检查模式应与利用模式分离。建议将 PoC 拆成两个脚本:一个只用于资产识别和服务状态判断,另一个只在本地靶场或明确授权环境中验证文件写入。
第五,应限制目标范围。PoC 可以加入本地地址、私有网段、白名单域名、授权确认参数等保护机制,避免误打第三方系统。
第六,应默认禁用 RCE 阶段。即使保留研究代码,也应要求用户显式传入授权确认参数后才允许进入文件写入或命令执行验证。
从流量检测角度看,不能只匹配某一个固定文件名、固定服务名或固定 JSP 名称。公开 PoC 中的服务名、文件名和路径都可以被修改,单一字符串规则容易漏报。
更合理的检测思路是围绕攻击链阶段提取特征。
重点关注:
/webdialer/Version.jws?wsdl
/webdialer/services
WebDialer WSDL
Axis services listing
如果短时间内外部客户端访问 WSDL 后又访问 cmplatform 安装状态接口,应提高风险级别。
重点关注:
/cmplatform/installClusterStatusExecute
action=clusterNodeInstallStatus
hostname 参数异常增长
hostname 参数中出现 URL 编码后的路径分隔符
hostname 参数中包含 webdialer、services、AdminService、platformcom、installstages 等内部路径特征
这个阶段的关键是 hostname 参数不再像普通主机名,而是出现路径化、URL 化、编码化和 XML 化特征。
重点关注:
deployment
wsdd
java:RPC
requestFlow
LogHandler
allowedMethods
className
fileName
writeToConsole
这些字段同时出现时,应高度怀疑攻击者正在尝试通过 Axis 服务部署描述文件写入可控内容。
重点关注:
axis2-web
platform-services
JSP 文件写入
参数中出现文件名与文件内容组合
Web 目录路径穿越
common/log/taos-log-a
tomcat/webapps
攻击流量中如果出现大量 ../、URL 编码路径穿越、JSP 扩展名和 Tomcat WebApp 路径,应判定为高危。
重点关注:
新增 JSP 被访问
请求参数中出现 pwd、cmd、command、exec、i 等命令参数
响应中出现系统命令输出格式
同一源 IP 在短时间内完成 WSDL 获取、SSRF、写入、执行连续动作
从规则设计角度看,建议采用分阶段检测:
应急排查时建议重点检查以下位置和现象:
installClusterStatusExecute 异常请求。/tmp、WebApp 目录、日志目录中是否出现测试文件或未知文件。如果怀疑已被利用,应优先隔离管理面访问,保留日志和文件系统证据,再进行补丁升级、WebShell 清理、异常服务清理和账户/凭证轮换。
根本修复方式是升级到 Cisco 官方修复版本或应用官方提供的临时修复包。
通用处置建议如下:
CVE-2026-20230 的关键不在于单个接口暴露,而在于 CUCM WebDialer、cmplatform 安装状态查询逻辑、内部 Axis 服务处理和文件写入能力之间形成了可串联的信任边界失效。
这条链路可以概括为:
未认证外部请求
↓
WebDialer 暴露面确认
↓
真实 hostname 获取
↓
cmplatform SSRF
↓
内部 Axis 服务访问
↓
可控服务描述或日志写入
↓
Web 可访问文件落地
↓
命令执行与 root 权限提升风险
实际可利用性取决于 WebDialer 是否启用、目标版本是否受影响、hostname 过滤是否可绕过、路径落点是否匹配、Web 容器是否执行写入文件,以及目标是否已应用补丁。
从防守角度看,不能只依赖“是否存在某个 JSP 文件”来判断攻击。更稳妥的方式是围绕多阶段链路进行关联检测:WSDL 信息获取、cmplatform 异常 hostname、Axis/WSDD 特征、路径穿越写入、JSP 落地访问和命令参数访问。只要其中多个阶段在短时间内由同一来源连续出现,就应按高危入侵事件处理。