
ثغرة Zip Slip في PluckCMS 4.7.20 تؤدي إلى RCE
يوثق هذا التقرير ثغرة أمنية حرجة تم اكتشافها في PluckCMS تسمح للمهاجمين المصدقين بتحقيق تنفيذ التعليمات البرمجية عن بعد من خلال ناقل هجوم Zip Slip. توجد الثغرة في وظيفة رفع الوحدات ويمكن استغلالها عن طريق رفع أرشيف ZIP معد خصيصاً يحتوي على كود PHP ضار.
4.7.20
نوع الثغرة: Zip Slip يؤدي إلى تنفيذ التعليمات البرمجية عن بعد (RCE)
المكون المتأثر: نظام إدارة الوحدات (الخيارات → إدارة الوحدات)
متجه الهجوم: تحميل ملف ZIP ضار
مطلوب المصادقة: نعم (الوصول إلى لوحة الإدارة)
الخطورة: حرجة
تنشأ الثغرة من عدم كفاية التحقق والتنظيف لمحتويات أرشيف ZIP أثناء عملية رفع الوحدات. يسمح PluckCMS للمسؤولين برفع الوحدات بصيغة ZIP دون التحقق بشكل صحيح من مسارات الملفات الموجودة داخل الأرشيف. وهذا يمكّن المهاجم من إنشاء ملف ZIP ضار يستغل ثغرات اجتياز المسار (Path Traversal)، مما يسمح بوضع ملفات عشوائية على نظام ملفات الخادم.
عند استخراج أرشيف ZIP، تفشل التطبيق في التحقق من بقاء الملفات المستخرجة ضمن هيكل الدليل المقصود. يمكن للمهاجم استغلال هذا الضعف لكتابة ملفات PHP ضارة إلى مواقع يمكن الوصول إليها عبر الويب، ثم تنفيذ تعليمات برمجية عشوائية على الخادم.
يمكن إعادة إنتاج الثغرة باستخدام البيئة التالية:
git clone https://github.com/pluck-cms/pluck.git
cd pluck
ddev config --project-type=php --docroot=.
ddev start
الرابط المستضاف: http://pluck.ddev.site
تم استخدام حمولة إثبات مفهوم توضح القدرة على تنفيذ الأوامر أثناء الاختبار. تستفيد الحمولة من دوال تنفيذ النظام في PHP لتشغيل أوامر نظام التشغيل.
<?php
$fn = "sys" . "tem";
(string) $fn("id");
?>
الاستغلال الناجح لهذه الثغرة يسمح لمهاجم مصدق بصلاحيات المسؤول بـ:
على الرغم من أن الثغرة تتطلب مصادقة إدارية، إلا أنها تمثل خطراً أمنياً حرجاً لأنها توفر مساراً مباشراً لاختراق النظام بالكامل.