TailwindRG/cve-2026-0300-audit
GitHub: TailwindRG/cve-2026-0300-audit
针对 PAN-OS CVE-2026-0300 漏洞的只读审计工具,支持单机审计和 Panorama 驱动的大规模并发群集扫描,通过解析防火墙配置评估 User-ID Authentication Portal 的暴露风险。
Stars: 0 | Forks: 0
# CVE-2026-0300 审计工具
针对 [CVE-2026-0300](https://security.paloaltonetworks.com/CVE-2026-0300) 的只读审计工具——这是 PA-Series 和 VM-Series 防火墙的 PAN-OS User-ID Authentication Portal(原“Captive Portal”)中存在的一个未授权缓冲区溢出漏洞。
本代码库伴随 Tailwind Resource Group 的安全公告 **TRG-SA-2026-003** 一同发布,并提供以下工具:
- `audit_portal.py` — Tier 1:单台防火墙审计
- `audit_fleet.py` — Tier 2:Panorama 驱动的并发大规模设备扫描
- `panos_audit.py` — 供两个 CLI 共用的共享库
这些脚本均为**只读**。它们仅向 PAN-OS XML API 发起 `show` 类查询,绝不修改配置。API 密钥通过 `X-PAN-KEY` HTTP 标头发送,而非作为 URL 查询参数,因此它不会出现在 PAN 管理平面的访问日志、TLS 检测代理日志或审计员的进程参数中。
## 本工具存在的原因
CVE 记录使用了现代功能名称“User-ID Authentication Portal”。而 PAN-OS XML 架构、CLI 旋钮以及文档 URL 路径仍在使用旧的 `captive-portal` 词汇。运维人员如果使用 `show config running | match authentication-portal` 来审计群集,将会毫无提示地遗漏所有配置,因为该字符串从未作为配置元素出现过。本工具会搜索符合架构定义的正确元素名称,无论配置是何时编写的。
关于此命名陷阱的完整 Tailwind 分析详见 TRG-SA-2026-003 中的“Captive Portal's legacy footprint”章节。
## 环境要求
- Python 3.10 或更高版本
- 仅使用标准库 —— 无需 `pip install`
- 具有防火墙(或在 Tier 2 情况下对 Panorama 具备)只读权限的 PAN-OS API 密钥
- 防火墙管理接口上配置了受信任 CA 签名(或被运维人员信任)的证书;`--insecure` 选项仅供一次性开通审计使用
## Tier 1 — 单台防火墙
```
export PAN_API_KEY=""
./audit_portal.py --hostname fw1.example.com
```
表格输出示例:
```
vsys: vsys1
configured: True
enabled: True
redirect_host: auth-portal.internal.example.com
mode: redirect
bound: ethernet1/3(internal-trust), ethernet1/4(guest)
tls_verified: True
risk: EXPOSED_LIKELY
```
其他输出格式:`--output json` 或 `--output csv`。
其他标志:`--vsys ` 用于单 vsys 审计,`--timeout`/`--retries` 用于响应缓慢的上游设备,`--debug` 用于在 stderr 中输出详细的错误信息。
## Tier 2 — Panorama 群集扫描
```
export PAN_API_KEY=""
./audit_fleet.py --hostname panorama.example.com --workers 16 --output csv > fleet-audit.csv
```
CSV 中的每一行代表一个 device-vsys,包含 portal 状态、重定向主机、模式、接口绑定以及风险分类。该脚本使用 Panorama 的 `target=` API 参数,因此它永远不会直接连接到受管防火墙 —— 只需一次到 Panorama 的连接即可扫描整个群集。
常用标志:
- `--workers N` — 并发审计线程数(默认 8,最大 32)。一个 1000 台设备的群集可以在几分钟内完成扫描,而串行扫描则需要一个多小时。
- `--timeout`, `--retries` — 单次 API 调用设置。瞬态的 `URLError` 和 HTTP 5xx 错误将通过有界限的退避机制进行重试。
- `--exclude-disconnected` — 默认情况下,已断开连接的设备也会被包含在内,并标记为 `risk=DISCONNECTED`,以便在补丁窗口期间它们仍然可见。使用此标志可将它们从结果中剔除。
- `--min-expected-devices N` — 如果 Panorama 返回的设备数量少于 `N`,则发出警告(通过 stderr)。有助于根据已知的群集大小检测响应是否被截断。
- `--serial-filter '0007*'` — 按序列号的 glob 模式过滤,以审计特定的设备子集。
- `--debug` — 在 stderr 中打印详细的逐设备错误信息(包含上游的 `reason` 字符串;默认关闭,以避免将主机名泄露到面向客户的 CSV 中)。
## 风险分类
输出中的 `risk` 列取值如下:
| 标签 | 含义 |
| --- | --- |
| `INFO_NOT_CONFIGURED` | 设备上没有 `` 配置块。不在 CVE-2026-0300 的范围内。 |
| `INFO_DISABLED` | Portal 已配置但 `enabled=no`。易受攻击的代码路径未激活。 |
| `REVIEW_POLICY_NO_BINDINGS` | Portal 已启用,但在配置中未找到接口绑定。需通过 WebUI 进行确认。 |
| `EXPOSED_LIKELY` | Portal 已启用,并绑定到了名称暗示其暴露在不受信任网络中的区域(如 `untrust`、`dmz`、`guest`、`external`、`internet`、`wan`、`public`)。需优先调查。 |
| `REVIEW_POLICY` | Portal 已启用,并绑定到了内部命名区域。需梳理安全策略以确认可达性。 |
`EXPOSED_LIKELY` 仅是一个**提示**,而非最终结论 —— 区域名称只是运维约定,并不具有强制效力。本脚本无法取代安全策略的梳理;它的作用是对群集输出进行排序,指示应优先关注哪些设备。
## 脚本的功能与边界
**会做:**
- 查询每个 vsys 的 `` 配置块(无论 UI 命名或 PAN-OS 版本如何,架构元素名称始终为 `captive-portal`)。
- 报告启用/禁用状态、重定向主机、模式和经过区域解析的接口绑定。
- 通过区域名称启发式方法对风险进行分类,以便在群集输出中优先显示 `EXPOSED_LIKELY` 行。
- 通过 `X-PAN-KEY` 标头发送 API 密钥,使其不会出现在 URL 访问日志和进程参数中。
- 限制响应体大小(50 MB),以防御针对 XML 解析器的实体扩展攻击。
- 通过有界限的退避机制重试瞬态错误。
**不会做:**
- 全面梳理安全策略。Portal 是否能从不受信任的网络访问,取决于策略规则、NAT 和区域绑定 —— 运维人员必须根据审计输出自行完成梳理。
- 通过网络探测测试可达性。纯粹仅为配置审计。
- 修改任何配置。所有 API 调用均为只读。
## 生成 PAN-OS API 密钥
PAN-OS API 密钥将继承生成该密钥的用户的角色和权限。
规范的 PAN 参考:[获取您的 API 密钥 (PAN-OS XML API)](https://docs.paloaltonetworks.com/pan-os/11-0/pan-os-panorama-api/get-started-with-the-pan-os-xml-api/get-your-api-key)。
### 通过 WebUI
在防火墙(或者如果您使用的是 `audit_fleet.py`,则在 Panorama)上执行:
1. **创建管理员角色。** 导航至 **Device > Admin Roles**(或 **Panorama > Admin Roles**)。点击 **Add**。
- 为该角色命名,例如 `audit-config-and-op`。
- 在 **Web UI** 选项卡中,将所有内容设置为 **None**(审计用户无需任何 UI 访问权限)。
- 在 **XML API** 选项卡中,启用 **Configuration** 和 **Operational Requests**。保持 Commit、Export、Import、Report、Log 和 User-ID Agent 处于禁用状态。
- 点击 **OK**。生成的角色将授予完整的 XML API Configuration 和 Operational Requests 权限 —— 请参阅上文所述的注意事项。
2. **创建审计用户。** 导航至 **Device > Administrators**(或 **Panorama > Administrators**)。点击 **Add**。
- 名称:例如 `audit-cve-2026-0300`。
- 设置一个强密码或将其绑定到某个 Authentication Profile。
- 管理员类型:**Role Based** → 选择 `audit-config-and-op`。
- 点击 **OK**,然后 **Commit** 候选配置。
3. **使用新用户的凭据生成 API 密钥。** PAN-OS 在 WebUI 中没有暴露“生成 API 密钥”的按钮 —— 密钥生成端点是受支持的路径。请使用 POST 请求体发送凭据,以免其被记录在 URL 访问日志中:
read -rs AUDIT_PW; echo
export PAN_API_KEY="$(curl -ksX POST "https://fw1.example.com/api/" \
--data-urlencode "type=keygen" \
--data-urlencode "user=audit-cve-2026-0300" \
--data-urlencode "password=$AUDIT_PW" \
| grep -oE '[^<]+' | cut -c6-)"
unset AUDIT_PW
`read -rs` 读取密码时不会将其回显到终端,也不会将其放入 shell 历史记录中。脚本从环境变量中读取生成的 `PAN_API_KEY`,并通过 `X-PAN-KEY` HTTP 标头进行发送 —— 在脚本运行期间,无论是密码还是密钥都不会出现在 URL 访问日志或 `ps auxww` 的输出中。
4. **在审计工作完成后禁用该用户。** 导航至 **Device > Administrators**,找到 `audit-cve-2026-0300`,点击 **Delete**(或禁用该用户)。然后进行 Commit。这会使为该用户生成的所有密钥失效。
### 安全加固说明
- **避免密码和密钥泄露到 shell 历史记录中。** `read -rs` 可以保护密码。至于 `PAN_API_KEY` 中的密钥,建议通过上述代码片段交互式设置,而不是从文件中粘贴。如果必须从文件中加载,请在该会话中使用 `set +o history`。
- **在防火墙管理接口上使用 CA 签名的证书。** 两个审计脚本中的 `--insecure` 标志会完全禁用 TLS 主机名检查和证书验证。路径上的任何攻击者都可以对审计响应进行中间人攻击 (MITM),从而为已被入侵的设备报告 `portal_enabled=False`。`audit_fleet.py` 脚本在进行群集扫描时要求在使用 `--insecure` 的同时必须加上 `--accept-mitm-risk`,因为被篡改的响应影响范围将是整个群集。
- **完成后轮换密钥。** 禁用或删除审计用户将使该用户下生成的所有密钥失效。
## 退出代码
- `0` — 所有受审计的 vsys 均未启用 portal
- `2` — 未找到 vsys(瞬态故障或不支持的配置)
- `3` — 至少有一个 vsys 启用了 portal(需要进行审查)
- `4` — API 调用失败(身份验证、TLS、网络问题)
在“portal 已启用”时返回非零退出代码是刻意设计的 —— 这允许您将脚本接入需要明确信号的 CI / fleet-sweep 流水线中。
## 许可证
根据 Apache License, Version 2.0 授权。有关完整条款,请参见 [`LICENSE`](LICENSE)。
允许商业使用;要求注明出处(在演绎作品中保留版权声明和许可证文件)。
Copyright 2026 Tailwind Resource Group.
## 另请参阅
- **TRG-SA-2026-003** — Tailwind Resource Group 关于 CVE-2026-0300 的安全公告
- **PAN PSIRT** —
- **PAN 最佳实践(限制 portal 访问)** —
- **Tailwind Resource Group** —
标签:Captive Portal, CVE-2026-0300, Linux安全, Maven, Palo Alto Networks, Panorama, PAN-OS, PA-Series, User-ID Authentication Portal, VM-Series, XML API, 企业安全, 只读审计, 安全合规, 安全基线检查, 安全检测工具, 批量安全巡检, 无线安全, 未授权访问, 漏洞审计, 漏洞验证, 缓冲区溢出, 网络代理, 网络安全, 网络资产管理, 防火墙安全, 隐私保护