针对 UniFi OS 服务器(≤ 5.0.6)中未认证远程代码执行链的安全检测器,该漏洞披露于 Ubiquiti 安全公告 064:
| CVE | 类别 | 链中的作用 |
|---|---|---|
| CVE-2026-34908 / CVE-2026-34909 | 不恰当的访问控制 / 路径遍历 | 认证网关绕过(立足点) |
| CVE-2026-34910 | 不恰当的输入验证 → 命令注入 | 通过绕过实现未认证 RCE |
已在 UniFi OS 服务器 5.0.8 中修复。
是的。该检测器专为生产环境和评估用途设计:
GET 请求。VULNERABLE 需要同时满足:认证绕过程序到达了漏洞处理程序,并且基线请求(相同端点,无绕过)被正确拒绝并返回 401。UniFi OS 使用 nginx 作为服务前置,通过子请求强制进行身份验证。该认证检查将任何 原始 URI 以 /api/auth/validate-sso/ 开头的请求视为公共请求,但 nginx 使用 规范化 URI 路由到后端(它会进行百分比解码 %2f→/ 并折叠 ../)。例如如下请求:
GET /api/auth/validate-sso/..%2f..%2f..%2fproxy/users/api/v2/ucs/update/latest_package
因此被当作公共请求(原始前缀),但却被路由到需要认证的内部软件包更新端点(规范化路径)。由于未提供 pkg_name,该端点回复 query param pkg_name required — 证明绕过成功且漏洞处理程序可达。
检测器还会向同一端点发送一个不带绕过的基线请求,并要求其返回 401,然后才声明主机存在漏洞。该检查直接测试漏洞行为 — 判定为 VULNERABLE 意味着绕过确实到达了接收端。
每当探测器未能明确确认为 VULNERABLE 或 PATCHED 时,检测器会获取根页面并查找 UniFi OS 管理门户指纹(
<title>UniFi OS</title>、window.UNIFI_OS_MANIFEST、id="portal-root"、
id="site-manager_portal-container")。这也适用于 401 响应:对绕过强制认证的 UniFi OS 主机判定为 INCONCLUSIVE,但对于仅返回 401 且不带指纹的非 UniFi 代理,则报告为 UNAFFECTED。因此,每个“非漏洞”结果都基于指纹:存在标记 → INCONCLUSIVE;无标记 → UNAFFECTED(CVE 不适用)。
# single host (default port 11443)
./cve_2026_34908_check.py 192.168.1.10
# explicit port / URL forms
./cve_2026_34908_check.py host-a:11443 https://host-b
# scan a list, one target per line ('#' comments allowed), compact output
./cve_2026_34908_check.py -f targets.txt --brief
# machine-readable output for pipelines
./cve_2026_34908_check.py -f targets.txt --json > results.json
存在漏洞的控制台(详细模式,默认)。第二行是判定的详细说明;[!] 标记和 VULNERABLE 在 TTY 上显示为红色:
$ ./cve_2026_34908_check.py 192.168.1.10
[!] 192.168.1.10:11443: VULNERABLE
auth bypass reached the vulnerable handler (no command executed); baseline correctly 401
已修补的控制台(5.0.8+):
$ ./cve_2026_34908_check.py 192.168.1.11
[+] 192.168.1.11:11443: PATCHED
nginx rejected the normalized-path divergence (HTTP 400) — 5.0.8+ behavior
探测无法分类的已确认 UniFi OS 主机 → INCONCLUSIVE。详细行区分两种情形(认证已强制 与 意外响应):
$ ./cve_2026_34908_check.py 192.168.1.12 192.168.1.13
[?] 192.168.1.12:11443: INCONCLUSIVE
bypass blocked / auth enforced (HTTP 401) on a confirmed UniFi OS host — not confirmed vulnerable
[?] 192.168.1.13:11443: INCONCLUSIVE
UniFi OS detected, but probe returned an unexpected response: HTTP 302 text/html
根本不是 UniFi OS 的主机 → UNAFFECTED(该公告不适用):
$ ./cve_2026_34908_check.py 203.0.113.9:443
[-] 203.0.113.9:443: UNAFFECTED
no UniFi OS web fingerprint on / (probe HTTP 404) — target is not a UniFi OS Server
扫描列表,每个主机单行对齐(--brief)。如果任何主机为 VULNERABLE,则退出状态为 1,否则为 0 — 在脚本中很方便:
$ ./cve_2026_34908_check.py -f targets.txt --brief; echo "exit: $?"
VULNERABLE 192.168.1.10:11443
PATCHED 192.168.1.11:11443
INCONCLUSIVE 192.168.1.12:11443
UNAFFECTED 203.0.113.9:443
ERROR 10.0.0.1:11443 timeout
exit: 1
用于管道的机器可读输出(--json)。每个结果包含 verdict 以及背后的 bypass.state/bypass.detail;ERROR 结果包含 error 字段而非 bypass:
$ ./cve_2026_34908_check.py 192.168.1.10 192.168.1.11 10.0.0.1 --json
[
{
"target": "192.168.1.10:11443",
"bypass": {
"state": "vulnerable",
"detail": "auth bypass reached the vulnerable handler (no command executed); baseline correctly 401"
},
"verdict": "VULNERABLE"
},
{
"target": "192.168.1.11:11443",
"bypass": {
"state": "patched",
"detail": "nginx rejected the normalized-path divergence (HTTP 400) — 5.0.8+ behavior"
},
"verdict": "PATCHED"
},
{
"target": "10.0.0.1:11443",
"verdict": "ERROR",
"error": "timeout"
}
]
| 代码 | 含义 |
|---|---|
0 | 无目标返回 VULNERABLE |
1 | 至少一个目标为 VULNERABLE |
2 | 用法错误(参数错误 / 无法读取目标文件) |
INCONCLUSIVE 并非安全保证 — 它确认了 UniFi OS 主机但无法分类(绕过被强制认证,或意外响应)。经过严格过滤或由意外代理前置的主机可能无法仅通过网络分类。尽可能确认运行版本。UNAFFECTED 意味着根页面未携带 UniFi OS 门户指纹(包括返回 401 但无指纹的主机)。因此,隐藏在反向代理后面且该代理剥离或重写门户 HTML 的 UniFi OS 控制台可能会被误报;如果预期目标是 UniFi OS,请直接确认。将 UniFi OS 服务器更新到 5.0.8 或更高版本。修复添加了 nginx 原始 URI 与规范化 URI 的比较(关闭认证绕过)以及软件包更新路径中的输入验证(关闭命令注入)。
此代码根据 MIT 许可证 分发。
未经事先相互同意,使用此工具攻击目标是违法的。最终用户有责任遵守所有适用的地方、州和联邦法律。开发人员不承担任何责任,并且不对因使用本程序而导致的任何误用或损害负责。
| 探测响应 | 判定 |
|---|
200 + 处理程序错误标志 | VULNERABLE |
400(nginx 拒绝差异) | PATCHED(5.0.8+) |
401,存在 UniFi OS 指纹 | INCONCLUSIVE(认证已强制 / 绕过被阻止) |
401,无 UniFi OS 指纹 | UNAFFECTED(不是 UniFi OS 服务器) |
| 其他响应,无 UniFi OS 指纹 | UNAFFECTED(不是 UniFi OS 服务器) |
| 其他响应,存在 UniFi OS 指纹 | INCONCLUSIVE(意外响应) |
| 标志 | 描述 |
|---|
targets | 一个或多个 host、host:port 或 https://host:port |
-f, --targets-file FILE | 从文件读取目标(每行一个;支持 # 注释) |
--brief | 每个目标单行对齐输出 — 适用于扫描大量主机 |
--json | 输出结构化 JSON 结果 |
--timeout SECS | 每个请求的超时时间(默认:10) |
--no-color | 禁用彩色输出(同时遵循 NO_COLOR 和非 TTY 环境) |
| 判定 | 含义 |
|---|
VULNERABLE | 认证绕过以未认证方式到达漏洞处理程序。请修补至 5.0.8+。 |
PATCHED | nginx 拒绝了规范化路径差异(5.0.8+ 行为)。 |
UNAFFECTED | 根页面无 UniFi OS 门户指纹 — 目标不是 UniFi OS 服务器,因此公告不适用。包括返回 401 但无指纹的主机(例如拒绝所有请求的不相关代理)。 |
INCONCLUSIVE | 确认为 UniFi OS 主机但无法分类 — 请手动验证版本。判定的详细行会说明情况:(a) 绕过被阻止/认证已强制(401),或 (b) 探测返回了意外响应。 |
ERROR | 连接/超时/TLS 失败。 |