آسیب پذیری روز صفر در Spring Java framework با عنوان Spring4Shell

یک آسیب‌پذیری روز صفر جدید در چارچوب Spring Core Java به نام «Spring4Shell» به صورت عمومی افشا شده که امکان اجرای کد از راه دور بدون احراز هویت را در برنامه‌ها برای مهاجمین فراهم می‌کنه.فریمورک Spring یک فریمورک کاربردی بسیار محبوب است که به توسعه دهندگان نرم افزار اجازه می ده تا به سرعت و راحتی برنامه های جاوا را با ویژگی هایی در سطح Enterprise توسعه دهند.سپس این برنامه ها می توانند بر روی سرورهایی مانند Apache Tomcat به عنوان پکیج های مستقل با تمام وابستگی های (dependency) مورد نیاز قرار داده و استفاده شوند.دیروز یک آسیب پذیری در Spring Cloud Function با شناسه CVE-2022-22963 شناسایی شد که منجر به دسترسی به اطلاعات محلی روی ماشین هدف می شد و بلافاصله یک PoC برای آن نیز منتشر شد.پس از این آسیب پذیری ،در ادامه اطلاعاتی مربوط به یک آسیب‌پذیری حیاتی ،اجرای کد از راه دور در Spring Core ، در سرویس چت QQ و یک سایت امنیت سایبری چینی منتشر شد. پس از این افشاء یک محقق امنیتی ، اکسپلویت روز صفر آنرا در گیت هاب منتشر کرد که البته بعد از مدتی از دسترسی خارج و پاک شد.به دلیل محبوبیت این فریمورک و انتشار اکسپلویت آن ، اغلب محققین و شرکت های امنیتی در خصوص این آسیب پذیری اعلام نگرانی کرده اند.آسیب پذیری Spring RCE که با نام Spring4Shell نیز شناخته می شود یک آسیب پذیری unsafe deserialization در ارسال آرگومانها می باشد و یک روش دور زدن برای آسیب پذیری CVE-2010-1622 می باشد.در حالی که در ابتدا تصور می شد که این آسیب پذیری بر روی همه برنامه های Spring که در جاوا 9 یا بالاتر اجرا می شوند تأثیر می گذارد، بعداً مشخص شد که برنامه آسیب پذیر باید دارای شرایطی باشد تا امکان سوء استفاده از آن فراهم شود.طبق تحلیل آنالیزگر آسیب پذیری در CERT/CC ، آقای Will Dormann ، یک برنامه آسیب پذیر است ، در صورتیکه از Spring Parameter Binding و Spring Beans استفاده کرده باشد و همچنین Spring Parameter Binding را برای استفاده از یک نوع پارامتر غیر پایه مانند POJO پیکربندی کرده باشد.شرکت Praetorian نیز در خصوص نیاز به شرایطی برای اکسپلویت گفته است: اکسپلویت به یک نقطه پایانی با فعال بودن DataBinder نیاز دارد (به عنوان مثال یک درخواست POST که داده ها را از بدنه درخواست به طور خودکار دیکد می کند) و به شدت به servlet container برای برنامه بستگی دارد.به عنوان مثال، هنگامی که Spring در Apache Tomcat قرار داده شود، WebAppClassLoader قابل دسترس است، که به مهاجم اجازه می دهد تا getter ها و setter ها را فراخوانی کند تا یک فایل JSP مخرب را روی دیسک بنویسد.با این حال، اگر Spring با استفاده از Embedded Tomcat Servlet Container مستقر شود، classloader یک LaunchedURLClassLoader است که دسترسی محدودی دارد.در پیکربندی‌های خاص، اکسپلویت آسیب پذیری ساده است، زیرا فقط مهاجم نیاز دارد که یک درخواست POST دستکاری شده را به یک سیستم آسیب‌پذیر ارسال کند. با این حال، هکرها برای اکسپلویت پیکربندی‌های مختلف نیاز به بررسی بیشتر و یافتن پیلودهای مناسب دارند.در حالی که شرایط اجرای اکسپلویت ممکن است اندازه سیستم های آسیب پذیر را محدود کند، اما با گزارش منابع متعدد ، این آسیب‌پذیری به طور فعال در حملات مورد استفاده قرار می‌گیرد.روش کاهش موقت حملات :از آنجایی که برای این آسیب پذیری هنوز وصله امنیتی منتشر نشده است ، شرکت Praetorian روشی را برای کاهش نسبی حملات Spring4Shell با عدم اجازه دادن به «الگوهای» خاص به تابع Spring Core DataBinder منتشر کرده است. در فریمورک Spring ، قابلیت DataBinder امکان غیر مجاز کردن الگوهای خاص را فراهم میکند. به عنوان یک کاهش موقت برای این آسیب‌پذیری، Pretorian توصیه می‌کند که یک مؤلفه ControllerAdvice (که یک مولفه Spring مشترک بین Controllerها است) ایجاد کرده و الگوهای خطرناک را به denylist ، اضافه کنید. یک نمونه در زیر نشان داده شده است:import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.InitBinder; @ControllerAdvice @Order(10000) public class BinderControllerAdvice { @InitBinder public void setAllowedFields(WebDataBinder dataBinder) { String[] denylist = new String[]{&quotclass.*&quot, &quotClass.*&quot, &quot*.class.*&quot, &quot*.Class.*&quot}; dataBinder.setDisallowedFields(denylist); } }آیا این Log4Shell جدید است؟ فریمورک Spring یک فریمورک کاربردی بسیار محبوب برای برنامه های جاوا است که این امر نگرانی های قابل توجهی را ایجاد می کند که ممکن است به حملات گسترده منجر شود زیرا بازیگران تهدید برنامه های آسیب پذیر را اسکن می کنند. از آنجایی که اکسپلویت به یک HTTP POST ساده برای یک برنامه آسیب‌پذیر نیاز دارد، عوامل تهدید می‌توانند اسکریپت‌هایی ایجاد کنند که اینترنت را اسکن کرده و به‌طور خودکار سرورهای آسیب‌پذیر را اکسپلویت کند. عوامل تهدید می توانند از این اکسپلویت ها برای اجرای دستورات روی سرور استفاده کنند که امکان دسترسی کامل از راه دور را به دستگاه فراهم می کند. این سناریوی حمله یادآور چیزی است که در ماه دسامبر با اکسپلویت انبوه از سرورهای Log4j با اکسپلویت Log4Shell برای نصب بدافزار و انجام حملات باج افزار مشاهده کردیم. با توجه به شرایط مورد نیاز برای اکسپلویت این آسیب پذیری، خیلی زود است که بگوییم چه تعداد از برنامه های کاربردی آسیب پذیر هستند. برای دریافت خبرهای جدید در خصوص امنیت سایبری از کانال ما دیدن فرمایید. همچنین می تونید نشریه تخصصی امنیت سایبری با عنوان ONHEXmag رو هم از اینجا یا اینجا دانلود کنید.منبع گزارشبروزرسانی (20:30)با این دوتا اسکنر میتونید آسیب پذیری رو چک کنید :spring-toolsSimple local Spring vulnerability scannerوصله امنیتی :برای این آسیب پذیری Spring یک اعلان امنیتی داده و این آسیب پذیری رو با شناسه CVE-2022-22965 معرفی کرده و گفته که برنامه های Spring MVC و Spring WebFlux در JDK 9 و بالاتر رو تحت تاثیر قرار میده.اکسپلویت هم روی Apache Tomcat ، به یک برنامه پکیج شده با عنوان WAR و spring-webmvc یا spring-webflux نیاز داره.اگر برنامه به عنوان یک jar اجرایی Spring Boot، یعنی به صورت پیش‌فرض، مستقر شده باشه، در برابر اکسپلویت آسیب‌پذیر نیست. با این حال، چون ماهیت آسیب‌پذیری عمومی شده ، ممکنه راه‌های دیگری برای اکسپلویت از اون وجود داشته باشه.همچنین Spring گفته که این آسیب پذیری روز سه شنبه توسط meizjm3i از AntGroup FG به اونا گزارش شده و اونا داشتن روش کار میکردند اما به دلیل افشای عمومی آسیب پذیری توسط یک محقق امنیتی اونا وصله امنیتی رو بدون برنامه ریزی زمانی و فوری ارائه میدن.نسخه‌های Spring که آسیب‌پذیری جدید را برطرف می‌کنند در زیر لیست شده‌اند، که همه آنها به جز Spring Boot در Maven Central موجود است: Spring Framework 5.3.18 Spring Framework 5.2.20 Spring Boot 2.5.12 Spring Boot 2.6.6 (هنوز در دسترس نیست و ظرف چند ساعت آینده ارائه می شود)