CVE-2026-20182: Unauthenticated Cisco SD-WAN Control Plane Compromise via vHub Authentication Bypass¶
Ch12.066 CVE-2026-20182: Unauthenticated Cisco SD-WAN Control Plane Compromise via vHub Authentication Bypass¶
📊 Level ⭐⭐ | 7.3KB |
entities/cve-2026-20182-cisco-sd-wan-vhub-bypass.md
CVE-2026-20182: Unauthenticated Cisco SD-WAN Control Plane Compromise via vHub Authentication Bypass¶
摘要¶
CVE-2026-20182 是一个 CVSS 10.0 的严重认证绕过漏洞,影响 Cisco Catalyst SD-WAN Controller 和 Manager。漏洞位于 vdaemon 服务的 vbond_proc_challenge_ack() 函数中,当连接对端声明自己为 vHub 设备(device_type = 2)时,会完全跳过证书验证和信任验证逻辑,直接将 peer->authenticated 设为 true。远程未认证攻击者可利用此漏洞成为受信任的 SD-WAN 控制平面对端,进而操纵路由、注入 SSH 密钥实现持久化访问。Rapid7 的 Jonah Burgess 和 Stephen Fewer 发现了该漏洞。
核心要点¶
受影响组件¶
Cisco Catalyst SD-WAN 平台由四个核心组件构成:
| 组件 | 功能 | 受影响 |
|---|---|---|
| vManage | 集中管理仪表板 | ✅ |
| vSmart | 控制平面控制器(路由策略分发) | ✅ |
| vBond | 编排服务(设备认证与连接) | ✅(信任锚) |
| WAN Edge Routers | 分支/云环境的物理/虚拟路由器 | 间接影响 |
漏洞影响所有部署模型:本地部署、Cisco 托管云、FedRAMP 政府云。
漏洞根因¶
vdaemon 服务通过 DTLS(UDP/12346)进行控制平面通信。认证流程中,vbond_proc_challenge_ack() 函数对不同设备类型执行不同的验证逻辑:
| 设备类型 | 值 | 验证逻辑 | 结果 |
|---|---|---|---|
| vEdge | 1 | 硬件证书 + TPM + board-ID + OTP | 验证后认证 |
| vHub | 2 | 无验证 | 直接设为已认证 |
| vSmart | 3 | 证书链 + 序列号查重 + DTLS 对端证书 | 验证后认证 |
| vBond | 4 | 信任锚处理(独立逻辑路径) | 其他路径验证 |
| vManage | 5 | 证书链 + 序列号查重 + DTLS 对端证书 | 验证后认证 |
关键缺陷:device_type == 2(vHub)没有对应的验证代码块,函数直接跳过所有验证逻辑,最终执行 peer->authenticated = 1。
攻击流程¶
- DTLS 握手:攻击者使用任意/无效证书发起 DTLS 连接到 vSmart(UDP/12346)
- CHALLENGE 响应:vdaemon 发送 CHALLENGE 消息(msg_type=8),包含 256 字节随机数据
- 伪造 CHALLENGE_ACK:攻击者回复 CHALLENGE_ACK(msg_type=9),设置
device_type = 2 - 认证状态设置:控制器发送 CHALLENGE_ACK_ACK(msg_type=10),标记
peer->authenticated = true - Hello 交换:攻击者发送 Hello(msg_type=5),对端状态转为
UP - 加入 SD-WAN Fabric:攻击者成为受信任的控制平面对端
后渗透能力¶
成功利用后,攻击者获得以下能力:
- 路由操纵:修改路由通告、改变路径选择、操纵 SD-WAN 流量
- 流量重定向:将企业流量重定向或拦截到攻击者控制的基础设施
- SSH 密钥注入:通过
MSG_VMANAGE_TO_PEER(msg_type=14)向vmanage-admin账户的authorized_keys注入公钥,实现持久化访问 - NETCONF 滥用:通过注入的 SSH 密钥访问 TCP/830 的 NETCONF 管理接口
- 全控制平面妥协:vSmart 编排整个企业 WAN 的路由和信任关系,被攻陷意味着整个 SD-WAN 基础设施沦陷
深度分析¶
CHALLENGE_ACK 可达性分析¶
漏洞利用的前提是未认证的 CHALLENGE_ACK 消息能到达 vbond_proc_challenge_ack() 处理器。vdaemon 的预分发认证门控(vbond_proc_msg())实现了一个白名单机制:
if (peer->authenticated != 1
&& msg_type != 5 // Hello
&& msg_type != 8 // CHALLENGE
&& msg_type != 9 // CHALLENGE_ACK
&& msg_type != 10 // CHALLENGE_ACK_ACK
&& msg_type != 7 // NEW_CHALLENGE_ACK
&& msg_type != 11 // TEAR_DOWN
) { return 20; } // 拒绝
CHALLENGE_ACK(msg_type=9)在白名单中,因此未认证攻击者可以直接发送此消息到达漏洞函数。
SSH 密钥注入机制¶
后渗透阶段的 SSH 密钥注入通过 vbond_proc_vmanage_to_peer() 实现:
- 文件以
a+(追加)模式打开/home/vmanage-admin/.ssh/authorized_keys - 攻击者控制的 SSH 公钥通过
fputs()直接写入 - 消息结构为固定的 769 字节:768 字节密钥缓冲区 + 1 字节 TLV 计数
- 前导换行符确保追加正确,嵌入的 null 字节终止字符串
- 无消毒、过滤或验证(仅基本重复检查)
- 追加模式不替换现有密钥,允许在不中断合法管理访问的情况下实现持久化
Metasploit 利用模块¶
Rapid7 已发布 Metasploit 辅助模块,自动化完整的利用流程:
- 使用自签名证书进行 DTLS 握手
- 发送伪造的 vHub CHALLENGE_ACK
- 绕过 SD-WAN 认证
- 转换为 UP 状态
- 注入 SSH 公钥到
vmanage-admin的authorized_keys - 建立持久化特权访问
- 提供 NETCONF 管理服务访问(TCP/830)
已在 Cisco Catalyst SD-WAN Controller 20.12.6.1 上成功测试。
实践启示¶
修复优先级¶
紧急修补 — Cisco 已发布修复版本,无可用的配置级变通方案:
| SD-WAN 版本 | 修复版本 |
|---|---|
| 20.9 | 20.9.9.1 |
| 20.10 | 20.12.7.1 |
| 20.12 | 20.12.5.4 / 20.12.6.2 / 20.12.7.1 |
| 20.15 | 20.15.4.4 / 20.15.5.2 |
| 20.18 | 20.18.2.2 |
| 26.1.1 | 26.1.1.1 |
事件响应检查清单¶
- 立即升级所有外部可达的 vSmart/vBond/vManage 控制器
- 审查 DTLS 和认证日志:异常 DTLS 连接、未知对端标识、可疑 CHALLENGE_ACK 活动、意外的
state = UP转换 - 审计 SSH 授权密钥:检查
/home/vmanage-admin/.ssh/authorized_keys中的未知公钥 - 检查控制平面对端:异常的 vHub 对端、对端序列号、控制器关系
- 轮换凭据和信任材料:SSH 密钥、证书、API 凭据、SD-WAN 信任关系
- 保留取证证据:控制器日志、DTLS 会话数据、内存快照、配置快照
安全设计启示¶
- 设备类型验证不应有"空路径":每种设备类型都应有明确的验证逻辑,默认拒绝未验证的类型
- 认证状态不应由单一标志位控制:
peer->authenticated = true不应仅基于设备类型声明 - 后渗透原语应有额外授权:SSH 密钥注入等高危操作应有独立的授权检查
- 协议设计中的信任模型:vHub 作为"中心路由器"角色被隐式信任,这种信任假设在安全设计中是危险的