Concrete CMS 9.5.0 and below is vulnerable to Remote Code Execution due to insecure deserialization occurring in the ExpressEntryList block controller. An rogue administrator with privileges to add blocks to an area can bypass the intended protection mechanism (_fromCIF === true), which normally restricts malicious inputs over form POST requests, by leveraging the REST API functionality. Because the REST API parses requests using json_decode(), the string "true" is evaluated as a strict PHP Boolean(true). This bypass allows the attacker to inject a malicious serialized payload into the block's filterFields database column. The payload will subsequently be executed when the block's data is viewed or edited by an administrator leading to complete server takeover (RCE).The Concrete CMS security team gave this vulnerability a CVSS v.4.0 score of 8.9 with a vector of CVSS:4.0/AV:N/AC:H/AT:P/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H. Thanks Nguyễn Văn Thiện https://github.com/Thien225409 for reporting
Concrete CMS versions 9.5.0 and below contain a critical remote code execution vulnerability in the ExpressEntryList block controller. A rogue administrator can bypass security protections by exploiting insecure deserialization through the REST API, injecting malicious serialized payloads that execute when administrators view or edit blocks, leading to complete server compromise. This vulnerability requires administrative privileges but poses severe risk to organizations using Concrete CMS for content management.
IMMEDIATE ACTIONS:
1. Audit all Concrete CMS installations to identify version 9.5.0 and below
2. Review administrator account access logs for suspicious REST API activity, particularly POST requests to block-related endpoints
3. Restrict administrative access to only trusted personnel; disable unnecessary admin accounts
4. Monitor database for suspicious serialized payloads in block filterFields columns
PATCHING GUIDANCE:
1. Upgrade to Concrete CMS 9.5.1 or later when available (currently no patch released)
2. Until patch is available, implement compensating controls:
- Disable REST API endpoints for block management if not required
- Implement strict input validation on all block controller inputs
- Apply Web Application Firewall (WAF) rules to detect serialized PHP objects in requests
COMPENSATING CONTROLS:
1. Implement role-based access control (RBAC) limiting block creation/editing to essential personnel only
2. Enable detailed logging and monitoring of all block-related database modifications
3. Implement file integrity monitoring on Concrete CMS installation directories
4. Use PHP configuration to disable dangerous functions: disable_functions = unserialize, eval
5. Apply network segmentation to isolate CMS servers from critical infrastructure
DETECTION RULES:
1. Monitor for REST API requests containing 'O:' or 'a:' patterns (serialized object indicators) in POST bodies
2. Alert on any modifications to block filterFields column in database
3. Monitor for PHP execution from unexpected locations within CMS directories
4. Track administrator login patterns and REST API usage anomalies
الإجراءات الفورية:
1. تدقيق جميع تثبيتات Concrete CMS لتحديد الإصدار 9.5.0 وما دونه
2. مراجعة سجلات وصول حساب المسؤول للنشاط المريب في REST API، خاصة طلبات POST المتعلقة بنقاط نهاية الكتل
3. تقييد وصول المسؤول للموظفين الموثوقين فقط؛ تعطيل حسابات المسؤول غير الضرورية
4. مراقبة قاعدة البيانات للحمولات المسلسلة المريبة في أعمدة filterFields للكتل
إرشادات التصحيح:
1. الترقية إلى Concrete CMS 9.5.1 أو أحدث عند توفره (لا يوجد تصحيح حالياً)
2. حتى توفر التصحيح، تطبيق الضوابط البديلة:
- تعطيل نقاط نهاية REST API لإدارة الكتل إذا لم تكن مطلوبة
- تطبيق التحقق الصارم من المدخلات على جميع مدخلات متحكم الكتل
- تطبيق قواعد جدار الحماية (WAF) للكشف عن كائنات PHP المسلسلة في الطلبات
الضوابط البديلة:
1. تطبيق التحكم في الوصول القائم على الأدوار (RBAC) لتقييد إنشاء/تحرير الكتل للموظفين الأساسيين فقط
2. تفعيل السجلات التفصيلية ومراقبة جميع تعديلات قاعدة البيانات المتعلقة بالكتل
3. تطبيق مراقبة سلامة الملفات على دلائل تثبيت Concrete CMS
4. استخدام تكوين PHP لتعطيل الوظائف الخطرة: disable_functions = unserialize, eval
5. تطبيق تقسيم الشبكة لعزل خوادم CMS عن البنية التحتية الحرجة
قواعد الكشف:
1. مراقبة طلبات REST API التي تحتوي على أنماط 'O:' أو 'a:' (مؤشرات الكائن المسلسل) في أجسام POST
2. التنبيه على أي تعديلات على عمود filterFields للكتل في قاعدة البيانات
3. مراقبة تنفيذ PHP من مواقع غير متوقعة داخل دلائل CMS
4. تتبع أنماط تسجيل دخول المسؤول وشذوذ استخدام REST API