Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-61505 — إلغاء تسلسل غير آمن في e107 CMS install.php | Kitploit
أدوات/GitHubGitHub/pescada-dev/cve-2025-61505
تحليل الثغرات الأمنيةتحليل الكودالاستغلالأمن الويبالأوراق والأبحاثالتعلم والتعليم
GitHubpescada-dev/cve-2025-61505

CVE-2025-61505

إلغاء تسلسل غير آمن في e107 CMS install.php

عرض المستودع
1منذ 6 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2025-61505 – حقن كائنات PHP في e107 CMS 2.x

تاريخ الإبلاغ: 18 سبتمبر 2025
تاريخ إسناد CVE: 9 أكتوبر 2025
تاريخ النشر: 02 فبراير 2026
معرّف CVE: CVE-2025-61505
المكتشف: Anas Abderrahman Benbarek

الملخص

تم اكتشاف ثغرة حقن كائنات PHP (CWE-502: إلغاء تسلسل بيانات غير موثوقة) في سكربت التثبيت (install.php) الخاص بـ e107 CMS الإصدار 2.3.3.

تسمح هذه الثغرة للمهاجمين عن بُعد غير المصادق عليهم بتشكيل بيانات متسلسلة خبيثة، مما قد يؤدي إلى تنفيذ أكواد عشوائية، أو التلاعب بالبيانات، أو إجراءات خبيثة أخرى — اعتمادًا على وجود فئات أدوات (gadget) قابلة للاستغلال في قاعدة أكواد e107 أو تبعياتها.

تنبع هذه المشكلة من الاستخدام غير الآمن لدالة unserialize() في PHP على مدخلات يتحكم فيها المستخدم دون أي قيود (مثل خيار allowed_classes). وعلى الرغم من أن ذلك يقتصر على مرحلة التثبيت، فإنه يشكل خطرًا كبيرًا أثناء الإعداد على الخوادم المكشوفة، حيث يتعامل المثبِّت مع عمليات حساسة مثل إنشاء قاعدة البيانات وكتابة الملفات.

البرمجيات المتأثرة

  • المنتج: e107 CMS
  • الإصدارات: ≤ 2.3.3
  • المكوّن: سكربت التثبيت (install.php)

تفاصيل الثغرة

عملية تثبيت e107 CMS متعددة المراحل. يتم الاحتفاظ بمدخلات المستخدم (اللغة، وبيانات اعتماد قاعدة البيانات، وتفاصيل المدير، وما إلى ذلك) عبر الخطوات باستخدام مصفوفة متسلسلة مخزنة في معامل POST المسمى previous_steps. هذه البيانات مشفّرة بترميز base64 للإرسال ويتم فك ترميزها/إلغاء تسلسلها على الخادم.

المشكلة الأساسية هي تمرير مدخلات المستخدم المفكوكة مباشرةً إلى unserialize() دون تحقق أو تنظيف أو قائمة بيضاء للفئات. يحدث هذا في موضعين:

1. النطاق العام (معالجة التجاوز الأولية)

php if(isset($_POST['previous_steps'])) { $tmp = unserialize(base64_decode($_POST['previous_steps'])); $override = (isset($tmp['paths']) && isset($tmp['paths']['hash'])) ? array('site_path'=>$tmp['paths']['hash']) : array(); unset($tmp); }

تحليل معمّق:

يفترض السكربت أن previous_steps يحتوي على بيانات متسلسلة موثوقة من خطوات النموذج السابقة. ولكن نظرًا لأنه معامل POST عادي، يتحكم فيه المهاجم بالكامل. تقوم base64_decode() بتحويل المدخلات إلى بيانات ثنائية، وتعيد unserialize() بناءها إلى كائنات أو مصفوفات PHP. إذا كانت المدخلات تحتوي على ترميز كائن (يبدأ بـ O:)، فإن PHP تنشئ تلك الفئات إذا كانت موجودة في النطاق الحالي أو تم تحميلها تلقائيًا. وهذا يمكن أن يؤدي فورًا إلى تشغيل __wakeup() أو دوال سحرية أخرى، مما قد يسبب آثارًا جانبية مثل كتابة ملفات أو استدعاءات قاعدة بيانات غير متوقعة في حال وجود سلاسل أدوات (gadget chains). ملاحظة حول قابلية الاستغلال: يعتمد النجاح على فئات الأدوات المتاحة. بدونها، قد يقتصر الأثر على تعطل أو تلف البيانات.

2. مُنشئ فئة e_install (استعادة الحالة الرئيسية)

PHPif(isset($_POST['previous_steps'])) { $this->previous_steps = unserialize(base64_decode($_POST['previous_steps'])); // ... (filtering and password restoration logic) unset($_POST['previous_steps']); }

تحليل معمّق:

هذه الحالة أكثر خطورة لأن البيانات غير المتسلسلة تصبح جزءًا من حالة الكائن ($this->previous_steps) وتؤثر على إجراءات المثبِّت اللاحقة (إعداد MySQL، إنشاء المدير، توليد ملف الإعدادات). يمكن لحقن الكائنات هنا أن يستمر عبر عملية التثبيت ويؤثر على العمليات ذات الامتيازات العالية. مرة أخرى، عدم وجود قيد allowed_classes يعني أنه يمكن إنشاء أي فئة محمّلة تلقائيًا (الأساسية، والمعالجات، والإضافات، والمكتبات). ملاحظة حول قابلية الاستغلال: يتطلب الاستغلال الفعلي عادةً ربط عدة كائنات معًا (سلسلة أدوات أو "gadget chain") للوصول إلى سلوك خطير مثل تنفيذ الأكواد. على سبيل المثال، قد تستدعي __wakeup() في إحدى الفئات دالة أخرى تقيّم سلاسل يتحكم فيها المستخدم. وبدون هذه السلاسل، قد يبقى الأثر عند حد رفض الخدمة (مثل استنزاف الموارد في الدوال المدمرة). السياق عالي الامتيازات للمثبِّت (كتابة e107_config.php، إنشاء الدلائل) يضخّم المخاطر، لكن إزالة السكربت بعد التثبيت تقلل من التعرض طويل الأمد. يمكن الوصول إلى الثغرة عبر طلبات HTTP POST غير مصادق عليها إلى /install.php في أي مرحلة من مراحل الإعداد.

التخفيف

  • إزالة install.php — احذف السكربت أو أعد تسميته فورًا بعد التثبيت.
  • تقييد الوصول — استخدم .htaccess أو قواعد nginx أو انقل الملف خارج جذر الويب أثناء النشر.
  • توصية التصحيح — استبدل unserialize() بـ json_decode() للاحتفاظ بالحالة، أو على الأقل استخدم:

unserialize($data, ['allowed_classes' => false]);

  • أضف توقيع HMAC/التحقق من صحة البيانات لضمان تكامل إضافي.

المراجع

  • الموقع الرسمي لـ e107 CMS: https://e107.org
  • مستودع e107 CMS على GitHub: https://github.com/e107inc/e107
  • سجل CVE: CVE-2025-61505 (سيتم تحديثه عند النشر)
  • CWE-502: إلغاء تسلسل بيانات غير موثوقة: https://cwe.mitre.org/data/definitions/502.html
تنزيل الأداة