BishopFox/CVE-2026-22557-check

GitHub: BishopFox/CVE-2026-22557-check

安全检测 UniFi Network Application 控制器是否存在 CVE-2026-22557 未授权路径遍历漏洞的专用评估工具。

Stars: 1 | Forks: 0

# CVE-2026-22557 漏洞评估工具 安全检测 [UniFi Network Application](https://ui.com/download/software/network-application) 控制器是否存在 CVE-2026-22557 漏洞,且不会造成任何中断。 请参阅 Bishop Fox 博客上的[完整分析文章](https://bishopfox.com/blog/looting-unifi-controllers-detecting-and-weaponizing-cve-2026-22557)。 ## 描述 CVE-2026-22557 是 UniFi Network Application 访客 captive portal 中的一个未授权路径遍历漏洞,允许远程攻击者以控制器进程用户的身份读取任意文件(CVSS 10.0)。该漏洞影响 10.1.x 分支上的 UniFi Network Application 10.1.85 及更早版本,以及 10.2.x 和 9.0.x 分支上对应的早期版本。Ubiquiti 已在 10.1.89、10.2.97 和 9.0.118 中发布了修复程序([SAB-062](https://community.ui.com/releases/Security-Advisory-Bulletin-062-062/c29719c0-405e-4d4a-8f26-e343e99f931b))。 访客 portal 的失败页面渲染器会读取 `page_error` 请求参数,并原封不动地将其作为 portal 资源加载器上的相对路径使用,没有任何验证。当被查询的站点设置了 `portal_customized: true` 时(任何带有品牌的 captive portal,例如酒店、零售或咖啡馆部署,最终都会采用此配置),加载器会针对磁盘上的 portal 目录解析该路径,并且该路径可以逃逸出该目录。 此工具通过以下方式进行非破坏性漏洞测试: 1. 从 `/status` 读取控制器报告的版本,并将其与 SAB-062 修复版本进行比较 2. 确认在提供的 URL 上调度了访客 portal 3. 在 `/guest//wechat/sign` 上针对 `page_error` 参数,探测 `../` 深度为 1-8 的双分支文件名,以确定遍历是否生效 4. 如果遍历生效,则对非敏感的运行时目录文件(`firmware.json`)执行一次额外读取,以确定自定义 portal 的文件系统分支是否处于活动状态 该工具仅请求运行时目录文件作为分支活动的判定依据。它**不会**读取凭据、TLS 材料、数据库状态或备份,也不会将任何文件内容写入 stdout 或磁盘。仅打印最终结论。 - **存在漏洞的控制器**,如果在被查询的站点上设置了 `portal_customized: true`,则会在校准深度返回目录文件,从而确认为 `VULNERABLE`。 - **部分暴露的控制器**,如果运行的是易受攻击的版本,但在被查询的站点上设置了 `portal_customized: false`,则会在校准步骤中触发遍历,但在确认步骤中不会返回磁盘内容 → `PARTIALLY EXPOSED`。应用程序二进制文件仍然存在漏洞;即使该站点未处于可利用状态,也需要进行修补。 - **已修补的控制器**(10.1.89+ / 10.2.97+ / 9.0.118+)会在所有深度上拒绝遍历 → `NOT VULNERABLE`。 - **无法访问**的站点或连接器会产生 `NOT EXPOSED` 的结果。 ## 安装 ``` git clone https://github.com/BishopFox/CVE-2026-22557-check cd CVE-2026-22557-check ``` 需要 Python 3.9+。该工具仅使用 Python 标准库,因此不需要执行 `pip install` 步骤。 ## 用法 测试位于 `` 的 UniFi Network Application 控制器。将该工具指向能够访问控制器 Web UI 的任意 URL;易受攻击的处理程序将在管理端口(默认为 8443/TCP)以及专用的访客 portal 端口(8843、8880)上进行调度。 ``` python3 cve_2026_22557_check.py [--site NAME] ``` 默认的 site slug 是 `default`。配置了多个站点的 UniFi 部署应为每个站点使用 `--site ` 重新运行该工具。只要控制器的*任何*一个站点设置了 `portal_customized: true`,该控制器就是可被利用的。 以下示例使用 `--brief` 来获取每个主机一行的结果。如果不使用 `--brief` 运行,将获取完整的横幅信息、分步进度以及包含建议修复操作的结果块。 ### 示例:存在漏洞的控制器 控制器处于易受攻击的版本上,并且被查询站点的自定义 portal 前置条件处于活动状态,因此可以访问该未授权读取路径。 ``` $ python3 cve_2026_22557_check.py https://192.168.1.100:8443 --brief [VULNERABLE] https://192.168.1.100:8443 site=default ``` ### 示例:部分暴露的控制器 控制器处于易受攻击的版本上,但被查询的站点未启用 `portal_customized: true`,因此该站点不满足磁盘读取的前置条件。应用程序二进制文件仍需修补;同一控制器上的另一个站点可能仍处于可利用状态。 ``` $ python3 cve_2026_22557_check.py https://192.168.1.100:8443 --brief [PARTIAL] https://192.168.1.100:8443 site=default ``` ### 示例:已修补的控制器 控制器处于已修复的版本上(10.1.89、10.2.97、9.0.118 或更高版本),因此遍历不会在任何查询深度上生效。 ``` $ python3 cve_2026_22557_check.py https://192.168.1.200:8443 --brief [NOT VULNERABLE] https://192.168.1.200:8443 site=default ``` ### 选项 ``` --site NAME UniFi site slug to probe (default: "default") --max-depth N maximum ../ traversal depth to try (default: 8) --no-tls-recon skip TLS certificate subject/SAN display --no-color disable ANSI color output (also honored: NO_COLOR env var) --timeout N per-request timeout in seconds (default: 20) --brief print a single-line result, no banner or steps ``` 退出代码:`0` VULNERABLE(存在漏洞),`1` partially exposed(部分暴露)/ not vulnerable(不存在漏洞)/ not exposed(未暴露),`2` transport error(传输错误)。 ## 前置条件 只有在满足以下条件的情况下,该工具才会返回 `VULNERABLE` 结论: - 目标正在运行易受攻击的 UniFi Network Application 版本(10.1.x 分支上的 10.1.85 或更早版本,或 10.2.x / 9.0.x 上对应的早期点版本)。 - 访客 portal 可以在提供的 URL 上访问。`/guest/*` 处理程序在管理端口(8443)以及专用的访客 portal 端口(8843、8880)上进行调度;该工具仅探测其提供的 URL。 - 被查询的站点在其 `guest_access` 设置中具有 `portal_customized: true`,这是磁盘读取代码路径的前置条件。如果控制器的*任何*站点启用了此设置,则该控制器可被利用。 如果不满足任何条件,该工具将退回到更保守的结论。`PARTIALLY EXPOSED` 结果仍然意味着应用程序存在漏洞且必须进行修补;只是被查询的站点碰巧没有公开磁盘读取路径。 ## 修复 1. **升级**至 UniFi Network Application 10.1.89、10.2.97、9.0.118 或更高版本。 2. **如果无法立即修补**,请限制对端口 8443 / 8843 / 8880(及其前面的任何反向代理)的网络访问,以便只能从受信任的管理网络访问它们。 3. **修补后,轮换在控制器可访问期间可能已泄露的任何凭据**:管理员密码、控制器推送到受管设备的 SSH 凭据、控制器的 TLS keystore、RADIUS 共享密钥、VPN / WireGuard 密钥、SSL 检查 CA 材料、SMTP 中继密码以及任何支付网关密钥。 ## 在日志中进行检测 易受攻击的请求模式为: ``` GET /guest/s//wechat/sign?page_error= ``` 合法客户端仅通过 `POST` 访问 `/guest/s//wechat/sign`(调度程序接受此方式而不引发失败页面渲染器)。任何携带 `page_error=` 查询参数的对此端点的 `GET` 请求,特别是包含 `../`、`%2e%2e` 或前导 `/` 的请求,都是异常的,应被视为利用尝试。Tomcat 的标准访问日志会捕获完整的请求行,包括查询字符串。 ## 许可证 此代码在 [MIT 许可证](LICENSE) 下分发。 ## 法律免责声明 未经事先双方同意,使用此工具攻击目标是非法的。最终用户有责任遵守所有适用的地方、州和联邦法律。开发者不承担任何责任,也不对因使用此程序造成的任何误用或损坏负责。 ## 另请参阅 - [Ubiquiti SAB-062 公告](https://community.ui.com/releases/Security-Advisory-Bulletin-062-062/c29719c0-405e-4d4a-8f26-e343e99f931b) - [Bishop Fox 博客:完整技术分析](https://bishopfox.com/blog/looting-unifi-controllers-detecting-and-weaponizing-cve-2026-22557)
标签:CISA项目, Maven, UniFi, 漏洞验证, 路径穿越, 逆向工具