
ثغرة Spring4Shell لتنفيذ التعليمات البرمجية عن بُعد - CVE-2022-22965
سُميت ثغرة Spring4Shell بهذا الاسم بسبب ثغرتين تم اكتشافهما واستغلالهما على نطاق واسع من قبل المهاجمين في أوائل عام 2022. إحدى هاتين الثغرتين موجودة في مكوّن الإطار المسمى "Spring Cloud Functions" (أقل خطورة)، بينما الثانية — الأكثر خطورة — تقع في قلب الإطار في مكوّن يُدعى "Spring Core". ومع هاتين الثغرتين الحرجتين، ولّد ذلك نكتة من المجتمع تتعلق بثغرة حرجة أخرى تم الكشف عنها في عام 2021 تُدعى Log4shell.
تتمثل إحدى ميزات Spring MVC في أنه ينشئ تلقائيًا كائنًا من فئة محددة ويملؤه بالبيانات عند تقديم طلب، بناءً على المعاملات المرسلة إلى نقطة النهاية. بعبارة بسيطة، يمكن إساءة استغلال هذا الأمر للكتابة فوق سمات مهمة في الفئة الأم، مما يؤدي إلى تنفيذ تعليمات برمجية عن بُعد. تعمل معظم استغلالات ثغرة Spring4Shell عن طريق إجبار التطبيق على كتابة ملف .jsp خبيث إلى خادم الويب. ويمكن بعد ذلك تنفيذ هذه الويبشيل للحصول على تنفيذ أوامر عن بُعد على الهدف.
لكي يحدث هذا الاستغلال، من الضروري توافر سلسلة من العوامل التي تجعل البيئة عرضة لاستيراد ملف jsp هذا، وهي:
spring-webmvc و/أو المكوّن spring-webflux من إطار Spring Framework.لهذا الاستكشاف، سنستخدم سكربتًا أُعدّ بالفعل لهذا الغرض باسم poc.py، وهو مرفق في نفس هذا المستودع.
[!note]
السكربت (poc.py) الخاص بهذا الـ POC متاح في نفس هذا المستودع، راجعه بالأعلى.
استخدم دائمًا خيار المساعدة الخاص بالسكربت عندما يكون متاحًا، فهو أوضح للفهم.
يتطلب هذا الهجوم استخدام طريقة http post لنقل الملف إلى الخادم. على الخادم الذي ننفّذ عليه الهجوم، يوجد POST يمكننا العثور عليه في view-source للصفحة.
هذه صفحة بسيطة يُسجَّل فيها بريد إلكتروني لتلقي الإشعارات.
في view-source، وجدنا POST الخاص بهذا النموذج مع action إلى /.
لنستخدم سكربتنا لاستكشاف خادم الويب هذا، مع تذكّر أننا بحاجة إلى تنفيذ الهجوم على مسار الـ POST action، وفي هذه الحالة يكون في الجذر /.
تم إرسال الويبشيل بنجاح! لندخل إلى الرابط الذي يولّده السكربت لتأكيد الاستغلال.
تم الأمر! لقد تمكّنا من استغلال الثغرة عن طريق إرسال ويبشيل إلى خادم الويب.
لمعالجة Spring4Shell، تأكد من أنك تستخدم إصدارًا من Spring صدر بعد التصحيح 18 من الإصدار الفرعي 5.3 (أي بعد 5.3.18)، أو بعد التصحيح 20 إذا كنت تستخدم الإصدار الفرعي 5.2 (أي بعد 5.2.20). ترقية إصدار الإطار كافية لإزالة الثغرة من تطبيقاتك.