
CVE-2024-34832
في لوحة الإدارة، تُستخدم المعاملات مثل _g و node لبناء المسار لتضمين ملفات .inc.php وتنفيذ كود PHP. يمكن لمستخدم ضار لديه القدرة على رفع ملفات .inc.php في أي مكان على الخادم استغلال ثغرة اجتياز المسار لتضمينها وتنفيذ كود ضار.
.inc.php في أي مكان على الخادم (مثل الوصول إلى FTP، تطبيق آخر على نفس الخادم يسمح برفع الملفات، ثغرات جديدة في ميزات الرفع في CubeCart، إلخ).لنفترض أن هناك خادم FTP يعمل على نفس الخادم الذي تم تثبيت CubeCart عليه، وأن المستخدم قادر على رفع الملفات إلى موقع محدد. في حالتنا، لنفترض أن أي شيء يتم رفعه عبر FTP سينتهي في /opt/FTP_Example.
لنفترض أيضًا أن هذا المستخدم قام برفع ملف باسم path_traversal.inc.php عبر FTP، ومحتوياته هي كود PHP التالي <?php system('whoami;id;hostname;ls') ?>.

في البداية لا يوجد خطر في رفع مثل هذا الملف لأنه لن يتم تنفيذه ولا هو في دليل خادم ويب - مثل Apache - يمكنه تنفيذه.
قد يكون لهذا المستخدم نفسه صلاحيات محدودة جدًا أو حتى لا صلاحيات على الإطلاق في لوحة إدارة CubeCart، لكنه لا يزال قادرًا على تسجيل الدخول إليها. على سبيل المثال، أنشأنا مستخدمًا باسم julio بدون أي صلاحيات على الإطلاق.

بعد تسجيل الدخول إلى التطبيق باسم julio، بدأنا في اختبار المعاملات _g و node. لاحظنا أن هذه المعاملات تضيف .inc.php تلقائيًا إلى نهاية المسار وتبدو أنها تستخدم include() على ذلك الملف لتنفيذ كود PHP.
كما هو موضح أدناه، عندما لا يتم العثور على الملف، يتم إرجاع رسالة الخطأ التالية.

بدأنا نتساءل عما إذا كان بإمكاننا اجتياز المسار والوصول إلى ملف .inc.php في دليل آخر في الخادم - مثل مجلد FTP الخاص بنا.
نظرًا لأن لدينا ملفًا باسم path_traversal.inc.php في مجلد /opt/FTP_Example، حاولنا إضافة الكثير من /../../../ حتى وصلنا إلى الدليل الجذر، ثم أضفنا /opt/FTP_Example/path_traversal وأضاف التطبيق تلقائيًا .inc.php إلى نهاية المسار.
كما هو موضح أدناه، تم تنفيذ الكود بنجاح.

لاحظنا أن معامل node يقوم بالفعل بترميز الشرطات المائلة (/)، لكن _g لا يفعل. يجب على جميع المعاملات المستخدمة في بناء المسارات أن تقوم بترميز الشرطات المائلة لمنع ثغرات اجتياز المسار.
على الرغم من وجود متطلبات أساسية للاستغلال الناجح لهذه الثغرة - مما يقلل المخاطر بشكل كبير - إلا أنها لا تزال تستفيد من تصحيح. يمكنك الاطلاع في المراجع على كيفية قيام مؤلفي CubeCart بإصلاح هذه الثغرة وتطبيق الإصلاحات على نسختك الخاصة من CubeCart حتى يأتي إصدار رسمي معها مصححة بالفعل.