
CVE-2026-92805 の Python PoC: 認証不要の UVdesk インストールウィザード XHR により、fingerprint モードと admin モードを介した DATABASE_URL の書き換えと ROLE_SUPER_ADMIN の作成が可能。
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 | 完全なウィザードチェーン: DB + スーパーユーザーを 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。"version" / "status" を含む 200 JSON は PRESENT / VULNERABLE です。load/configurations や load/super-user には決してアクセスしません。インストール完了後、GET / はウィザード HTML からリダイレクトされますが、XHR ルートは依然として応答します。これがバグです。
--admin は未認証です。ウィザードは自分が初回インストーラーだと思い込んでいます。--db-* はあなたのマシン上の MySQL クライアントではなく、PHP が接続できるようにアプリへ POST されます(通常は同一ホストの 127.0.0.1 の場合です)。
既存のスキーマ名を発見する必要はありません。--db-name はあなたが選ぶ名前です(デフォルト uvdesk)。--create-db はウィザードの createDatabase フラグを設定し、その名前が存在しない場合に PHP が CREATE DATABASE を実行するようにします。--create-db なしでは、存在しない名前は NEED_DB(「要求されたデータベースが見つかりませんでした」)となります。新しい名前を作成するには CREATE 権限を持つ MySQL ユーザーが必要です(uvdesk.* のみに権限を持つロックダウンされた uvdesk@localhost は uvdesk を再利用できますが、uvdesk_pwn は作成できない場合があります)。--test は MySQL と一切通信しません。
そのスキーマにスーパー管理者が既に存在する場合、load/super-user は no-op です — --create-db と新しい --db-name を組み合わせることで、あなたが所有するスキーマを立ち上げ、DATABASE_URL をそこに向けます。
標準出力: UVDESK、WIZARD_PAGE、PHP、STATUS、PRESENT、VULNERABLE、NOT_VULNERABLE、NOT_FOUND、NEED_DB、ADMIN、LOGIN。

CVE: CVE-2026-92805。製品: uvdesk/community-skeleton。