آسیب پذیری Spring4Shell
آسیب پذیری Spring4Shell با امتیازCVSS 9.8 کاربران فریم ورک Spring را در معرض خطر قرار داده است. این آسیبپذیری یک zero-Day خطرناک در فریم ورک جاوایی Spring میباشد. پژوهشگران امنیتی روز سهشنبه هفته گذشته مصادف با نهم فروردین این آسیبپذیری را گزارش کردند اما پیش از ارائه وصله امنیتی، PoC مربوط به آن درGitHub منتشر شد. با اینکه مدت کمی بعد از انتشار، این PoC از GitHub پاک شد اما با توجه به امتیازCVSS 9.8 باید انتظار سوءاستفاده مهاجمان را داشته باشیم. پیش از انتشار PoC نیز در سرویس گفتگو QQ و یک سایت چینی از این آسیبپذیری صحبت شده بوده است. Spring4Shell با شماره مرجع CVE-2022-22963 مشخص میشود و از جهاتی شبیه به log4shell میباشد. این آسیبپذیری از نوع اجرای کد از راه دور RCE میباشد. در حال حاضر بر طبق محاسبهگر CVSS v3.0 میزان وخامت این آسیبپذیری ۹٫۸ از ۱۰ است. این آسیبپذیری روی اپلیکیشنهای Spring MVC و Spring WebFlux که تحت نسخه ۹ یا بالاتر کیت توسعه جاوا اجرا میشوند اثر میگذارد.
فریم ورک Spring
Spring یک چارچوب کاربردی بسیار محبوب است که به توسعه دهندگان نرم افزار اجازه می دهد تا به سرعت و به راحتی برنامه های جاوا را در سطح enterprise توسعه دهند. سپس این برنامه ها را می توان بر روی سرورهایی مانند Apache Tomcat به عنوان بسته های مستقل با تمام وابستگی های مورد نیاز مستقر کرد. Spring یک فریم ورک برنامه کابردی بسیار محبوب است که به توسعه دهندگان امکان توسعه سریع اپلیکیشنهای جاوا را در سطح enterprise میدهد. این برنامههای کاربردی میتوانند بر روی سرورهایی مثل Apache Tomcat یا به صورت stand-alone اجرا شود.
کدام نسخههای فریم ورک Spring آسیبپذیر هستند؟
آسیب پذیری Spring4Shell این نسخهها را تحت تاثیر قرار میدهد:
- فریم ورک Spring نسخه ۵٫۳٫۰ تا ۵٫۳٫۱۷
- فریم ورک Spring نسخه ۵٫۲٫۰ تا ۵٫۲٫۱۹ و نسخههای قدیمیتر
اما راهکار چیست؟ ارتقا فریم ورک Spring به نسخههای ۵٫۳٫۱۸ به بالا و نسخههای ۵٫۲٫۲۰ به بالا. شاید بپرسید اگر اینکار را انجام ندهید چه خواهد شد؟ وجود آسیب پذیری در فریم ورک Spring اجازه اجرای کدهای مخرب از راه دور را به مهاجم خواهد داد. در نتیجه کنترل سیستمتان به دست مهاجمان خواهد افتاد.
جزئیات آسیب پذیری Spring4Shell
این آسیبپذیری جدید Spring RCE، که اکنون Spring4Shell نامیده میشود، ناشی از بیخطرسازی (deserialization) آرگومانهای تصویبشده است. در حالی که در ابتدا تصور می شد که این برنامه بر روی همه برنامه های Spring که در جاوا ۹ یا بالاتر اجرا می شوند تأثیر می گذارد، بعداً مشخص شد که برای آسیب پذیر بودن یک برنامه Spring الزامات خاصی وجود دارد که باید رعایت شود. برای اکسپلویت این آسیب پذیری اپلیکیشن باید بر روی Tomcat به عنوان WAR راه اندازی شده باشد. اگر اپلیکیشن به عنوان Spring Boot executable jar راه اندازی شده باشد در برابر این نقص فنی آسیب پذیر نخواهد بود. همچنین در اکسپلویت آسیب پذیری Spring4Shell نیاز است که یک endpoint با DataBinder فعال شده باشد. ویل دورمان، تحلیلگر آسیبپذیری در CERT/CC، معتقد است که یک برنامه باید از «Spring Beans»، «Spring Parameter Binding» و «Spring Parameter Binding» برای استفاده از یک نوع پارامتر غیر پایه، مانند POJOs پیکربندی شود. POJOs.”
اکسپلویت آسیب پذیری Spring4Shell
در حال حاضر تنها یک PoC به صورت عمومی منتشر شده است. برای اکسپلویت Spring4Shell مطابق با این PoC یک سری موارد بایستی وجود داشته باشند:
- کیت توسعه جاوا نسخهی ۹ به بعد.
- Apache Tomcat به عنوان Servlet container
- فرمت فایل WAR به جای JAR پیشفرض.
- ملحقات روی sprfing-webmvc یا spring-webflux.
- نسخههای فریمورک اسپرینگ ۵٫۳٫۰ به ۵٫۳٫۱۷٫۵٫۲٫۰ به ۵٫۲٫۱۹ یا قدیمیتر.
با این حال امکان دارد مهاجمان به روشهای دیگری نیز دست یافته باشند.
آیا این یک Log4Shell جدید است؟
Spring یک فریم ورک محبوب برای توسعه اپلیکیشنهای جاوایی است. در نتیجه آسیب پذیری Spring4Shell میتواند منجر به حملات گستردهای شود زیرا مهاجمان همواره در حال اسکن برنامهها برای یافتن آسیب پذیری هستند. مهاجمان با استفاده از آسیب پذیری Spring4Shell میتوانند از راه دور کدهای مخربشان را بر روی سرورها اجرا کنند. پس میتوان تا حدودی آن را مثل Log4j خطرناک دانست.