روز چهارشنبه بهروزرسانی برای Apache Struts 2 منتشر شد که یک آسیبپذیری بحرانی را در این چارچوب توسعهی متنباز وصله میکرد. بهرهبرداری موفق از این آسیبپذیری امکان اجرای کد از راه دور را در اختیار مهاجمان قرار میدهد. به این آسیبپذیری شناسهی CVE-2018-11776 اختصاص داده شده و Struts 2.3 تا ۲٫۳٫۳۴ و Struts 2.5 تا ۲٫۵٫۱۶ و احتمالا نسخههایی را که از آنها پشتیبانی نمیشود، تحت تاثیر قرار داده است.
این آسیبپذیری در نسخههای Struts 2.3.35 و ۲٫۵٫۱۷ وصله شده است. به کاربران توصیه شده است هرچه سریعتر آخرین بهروزرسانیهای این چارچوب را دریافت و نصب کنند. این آسیبپذیری در هستهی Struts وجود دارد و تمامی برنامههایی که از آن استفاده میکنند، حتی اگر افزونههای جانبی زیادی نداشته باشند نیز تحت تاثیر این آسیبپذیری قرار گرفتهاند.
این آسیبپذیری به این دلیل وجود دارد که ورودیهایی که از سمت کاربر دریافت میشود، به طور مناسب اعتبارسنجی نشده و پردازش میشود. محققان توضیح دادند دو بردار حملهی مختلف برای بهرهبرداری از این آسیبپذیری وجود دارد. آنها توضیح دادند ابتدا باید بررسی شود که سیستم شما دارای این آسیبپذیری هست یا خیر. برای آسیبپذیر بودن باید ۲ شرط زیر برقرار باشد.
- در تنظیمات Struts باید پرچم alwaysSelectFullNamespace برابر با مقدار True باشد. توجه داشته باشید اگر از افزونهی محبوب Struts Convention استفاده شده باشد، این مقدار بهطور خودکار تنظیم شده است.
- برنامه از اکشنهایی استفاده میکند که در پیکربندی آنها namespace مشخص نشده و یا به صورت مبهم به صورت “/*” مشخص شده است.
اگر در پیکربندی برنامه این شرایط وجود نداشته باشد، احتمالا سیستم آسیبپذیر نیست. ولی اگر این شرایط در پیکربندی وجود داشته باشد، دو بردار حمله که در ادامه توضیح میدهیم، بر روی سیستم عملیاتی خواهد بود.
بردار حملهی ۱: result بدون namespace
در Struts سه نوع result وجود دارد که اگر بدون namespace مورد استفاده قرار بگیرد، ناامن است. result ها در فایل پیکربندی و یا در داخل کدهای جاوا قابل تعریف هستند. ۳ نوع از result های زیر آسیبپذیر هستند:
- اکشن Redirect : این اکشن بازدیدکنندگان را به سمت URL دیگری هدایت میکند.
- زنجیرهی اکشن: متدی است که در آن چندین اکشن بهطور پشت سرهم و یا جریانی باهم یک زنجیره تشکیل میدهند.
- Postback result: پارامترهای درخواست را به فرمی پردازش میکند که فورا یک postback را به زنجیرهی مقصد و یا postback مشخصی ارسال میکند.
بردار حملهی ۲: استفاده از تگ url در تمپلیت
Apache Struts در فایل پیکربندی و در داخل تگ <result> از تمپلیت صفحه پشتیبانی میکند. اگر تمپلیت از بستهای ارجاع داده شده باشد که در آن ویژگی namespace تعریف نشده باشد، استفاده از تگ url پتانسیل ناامن بودن را دارد.
این آسیبپذیری چند روزی است که بهطور عمومی منتشر شده است. به تازگی محققان امنیتی متوجه شدند یک کد اثبات مفهومی از این آسیبپذیری در گیتهاب منتشر شده که مهاجمان به راحتی میتوانند از آن بهرهبرداری کنند. این کد اثبات مفهومی در این لینک، در گیتهاب منتشر شده و به همراه آن یک اسکریپت پایتون نیز وجود دارد که فرآیند بهرهبرداری را تسهیل میکند. یک آسیبپذیری دیگر در چارچوب Apache Struts 2 سال قبل شناسایی و در نقض دادهی شرکت Equifax بهطور گسترده مورد بهرهبرداری قرار گرفته بود. با این حال محققان امنیتی اعلام کردهاند آسیبپذیری جدید بسیار خطرناکتر از قبلی است.