
Python PoC لـ CVE-2026-92805: يسمح XHR الخاص بمعالج تثبيت UVdesk غير المصادق عليه بإعادة كتابة DATABASE_URL وإنشاء ROLE_SUPER_ADMIN عبر وضعي fingerprint و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 الأساسي لـ Helpdesk (مطلوب). 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 | MySQL كما يراه تطبيق PHP (الافتراضيات 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 ("The requested database was not found"). إنشاء اسم جديد يتطلب مستخدم MySQL يملك صلاحية CREATE (مستخدم 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.