
CVE-2026-92805 के लिए Python PoC: अनधिकृत UVdesk इंस्टॉलेशन विज़ार्ड XHR, फिंगरप्रिंट और एडमिन मोड के माध्यम से 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 | Helpdesk बेस URL (आवश्यक)। http:// या https://। बिना स्कीम वाला होस्टनेम पहले HTTPS के रूप में, फिर HTTP के रूप में आज़माया जाता है। http→https रीडायरेक्ट POST को बनाए रखते हैं। खराब TLS सर्टिफ़िकेट बिना verify के फिर से आज़माए जाते हैं; --insecure शुरू से ही verify छोड़ देता है |
--test | केवल फ़िंगरप्रिंट: POST /wizard/xhr/check-requirements (specification=php-version)। कोई .env राइट नहीं, कोई उपयोगकर्ता नहीं |
--admin | पूरी विज़ार्ड चेन: PHP सत्र में DB + सुपर-यूज़र संग्रहीत करें, DATABASE_URL लिखें, माइग्रेट करें, ROLE_SUPER_ADMIN बनाएँ |
--email / --password / --name | बनाने के लिए सुपर-एडमिन (डिफ़ॉल्ट [email protected] / PwnedAdmin1! / Pwned Admin) |
--db-host / --db-port / --db-user / --db-pass / --db-name | MySQL जैसा PHP ऐप देखता है (डिफ़ॉल्ट 127.0.0.1:3306 / uvdesk / uvdesk / uvdesk) |
--create-db | यदि स्कीमा अनुपस्थित है तो विज़ार्ड से CREATE DATABASE करने के लिए कहें |
--insecure | TLS verify छोड़ें |
--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 कनेक्ट कर सके (समान-होस्ट 127.0.0.1 सामान्य मामला है)।
आपको किसी मौजूदा स्कीमा नाम को खोजने की आवश्यकता नहीं है। --db-name एक नाम है जिसे आप चुनते हैं (डिफ़ॉल्ट uvdesk)। --create-db विज़ार्ड का createDatabase फ़्लैग सेट करता है ताकि यदि वह नाम अनुपस्थित हो तो PHP CREATE DATABASE चलाए। --create-db के बिना, अनुपस्थित नाम NEED_DB है ("The requested database was not found")। एक नया नाम बनाने के लिए CREATE अधिकार वाले MySQL उपयोगकर्ता की आवश्यकता होती है (एक लॉक-डाउन uvdesk@localhost जिसके पास केवल uvdesk.* पर अधिकार हैं, uvdesk का पुन: उपयोग कर सकता है, लेकिन uvdesk_pwn नहीं बना सकता)। --test कभी MySQL से बात नहीं करता।
यदि उस स्कीमा पर पहले से ही एक सुपर-एडमिन मौजूद है, तो load/super-user एक नो-ऑप है — --create-db के साथ एक नया --db-name आपके स्वामित्व वाला स्कीमा खड़ा करता है और DATABASE_URL को उस पर इंगित करता है।
Stdout: UVDESK, WIZARD_PAGE, PHP, STATUS, PRESENT, VULNERABLE, NOT_VULNERABLE, NOT_FOUND, NEED_DB, ADMIN, LOGIN।

CVE: CVE-2026-92805। उत्पाद: uvdesk/community-skeleton।