
Spring ने Spring Framework में RCE की पुष्टि की है। टीम ने इस मुद्दे के लिए बयान और शमन गाइड प्रकाशित किया है। अब, इस कमजोरी को CVE-2022-22965 के रूप में ट्रैक किया जा सकता है।
Spring ने Spring Framework में RCE की पुष्टि की है। टीम ने अभी-अभी इस मुद्दे के लिए बयान और शमन मार्गदर्शिकाएँ प्रकाशित की हैं। अब, इस भेद्यता को CVE-2022-22965 के रूप में ट्रैक किया जा सकता है।
Spring4Shell भेद्यता के बारे में कुछ जानकारी और Spring4Shell: विवरण और शोषण पोस्ट में विवरण साझा किए गए हैं। इसके अतिरिक्त, Praetorian की सुरक्षा टीम ने पुष्टि की है कि JDK9+ पर Spring Core CVE-2010-1622 के लिए बाईपास के कारण दूरस्थ कोड निष्पादन के लिए असुरक्षित है।
प्रारंभ में, यह 30 मार्च को शुरू हुआ, भेद्यता की पहली सूचना KnownSec 404 टीम के नेता Heige द्वारा संकेतित की गई थी। उन्होंने PoC चित्र के साथ चेतावनी संदेश "Spring core RCE (JDK >=9" ट्वीट किया।

जैसे ही हम भेद्यता की कहानी के साथ लाइव होते हैं, Heige Twitter से गायब हो जाता है। इसके पीछे का कारण नहीं पता लेकिन कुछ तो हो सकता है।
2021 के अंत में, इंटरनेट अपाचे लॉग4j2 में जीरो-डे दूरस्थ कोड निष्पादन भेद्यता, जिसे Log4Shell के नाम से भी जाना जाता है, के गिरने से जल रहा था। यह भेद्यता Alibaba Cloud सुरक्षा टीम द्वारा पाई गई थी।
आज, शोधकर्ताओं ने एक और सबसे खराब भेद्यता पाई जो गंभीर क्षति का कारण बन सकती है। अब बग को CVE-2022-22965 के रूप में ट्रैक किया जा रहा है, हम इसे Spring4Shell कह सकते हैं। यह भेद्यता JDK संस्करण 9.0 या उससे अधिक के साथ Spring कोर में मौजूद है।
Spring Framework और व्युत्पन्न फ्रेमवर्क spring-beans-*.jar फ़ाइलें या CachedIntrospectionResults.class
नीचे दिए गए सभी विवरण अब पुष्टि हो चुके हैं। मैं किसी भी क्षति के लिए जिम्मेदारी नहीं लेता।
दुनिया के सबसे लोकप्रिय जावा लाइटवेट ओपन-सोर्स फ्रेमवर्क में से एक के रूप में, Spring डेवलपर्स को व्यावसायिक तर्क पर ध्यान केंद्रित करने और जावा एंटरप्राइज़ अनुप्रयोगों के विकास चक्र को सरल बनाने की अनुमति देता है।
शोषण के लिए DataBinder सक्षम के साथ एक एंडपॉइंट की आवश्यकता होती है (उदाहरण के लिए, एक POST अनुरोध जो स्वचालित रूप से अनुरोध निकाय से डेटा डीकोड करता है) और एप्लिकेशन के लिए सर्वलेट कंटेनर पर काफी हद तक निर्भर करता है। उदाहरण के लिए, जब Spring को Apache Tomcat पर तैनात किया जाता है, तो WebAppClassLoader सुलभ होता है, जो एक हमलावर को अंततः डिस्क पर एक दुर्भावनापूर्ण JSP फ़ाइल लिखने के लिए गेटर्स और सेटर्स को कॉल करने की अनुमति देता है। हालाँकि, यदि Spring को एम्बेडेड टॉमकैट सर्वलेट कंटेनर का उपयोग करके तैनात किया जाता है, तो क्लासलोडर एक LaunchedURLClassLoader है जिसकी सीमित पहुँच है।
हालाँकि, Spring फ्रेमवर्क के JDK9 संस्करण (और उससे ऊपर) में, एक दूरस्थ हमलावर कुछ शर्तों को पूरा करने के आधार पर फ्रेमवर्क के पैरामीटर बाइंडिंग फ़ंक्शन के माध्यम से AccessLogValve ऑब्जेक्ट और दुर्भावनापूर्ण फ़ील्ड मान प्राप्त कर सकता है।
संगठन प्रणाली के चल रहे सर्वर पर, चल रहे JDK संस्करण की जाँच करने के लिए "java -version" कमांड चलाएँ। यदि संस्करण संख्या 8 या उससे कम है, तो यह भेद्यता से प्रभावित नहीं है।
उपरोक्त दो चरणों की समस्या निवारण पूरा करने के बाद, यह निर्धारित करने के लिए कि यह इस भेद्यता से प्रभावित है, निम्नलिखित दो शर्तों को एक साथ पूरा किया जाना चाहिए:
अब [Spring टीम ने भेद्यता को ठीक कर दिया है] (https://www.cyberkendra.com/2022/03/spring4shell-spring-confirmed-rce-in.html) और Spring Boot 2.6.6 और 2.5.12 के नवीनतम संस्करण जारी किए हैं जो Spring Framework 5.3.18 पर निर्भर हैं।
WAF जैसे नेटवर्क सुरक्षा उपकरणों पर, तैनात सेवाओं की वास्तविक ट्रैफ़िक स्थिति के अनुसार "class.", "Class.", ".class." और ".Class." जैसी स्ट्रिंग के लिए नियम फ़िल्टरिंग लागू करें। नियमों को फ़िल्टर करने के बाद, अतिरिक्त प्रभाव से बचने के लिए व्यावसायिक संचालन का परीक्षण करें।
लीक की अस्थायी मरम्मत एक साथ निम्नलिखित दो चरणों में की जानी चाहिए:
एप्लिकेशन में वैश्विक रूप से @InitBinder एनोटेशन खोजें, यह देखने के लिए कि क्या विधि निकाय में dataBinder.setDisallowedFields विधि को कॉल किया गया है। यदि कोड स्निपेट का यह परिचय पाया जाता है, तो मूल ब्लैकलिस्ट में {"class.","Class.",".class.", ".Class."} जोड़ें। (नोट: यदि कोड स्निपेट का बहुत अधिक उपयोग किया जाता है, तो इसे हर जगह जोड़ने की आवश्यकता है)
एप्लिकेशन सिस्टम के प्रोजेक्ट पैकेज के तहत निम्नलिखित वैश्विक वर्ग बनाएं, और सुनिश्चित करें कि यह वर्ग Spring द्वारा लोड किया गया है (इसे कंट्रोलर वाले पैकेज में जोड़ने की अनुशंसा की जाती है)। वर्ग जोड़ने के बाद, प्रोजेक्ट को पुन: संकलित और पैकेज करने की आवश्यकता है, और कार्यात्मक सत्यापन के लिए परीक्षण किया जाना चाहिए। और प्रोजेक्ट को पुनर्प्रकाशित करें।
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 GlobalControllerAdvice{
@InitBinder
public void setAllowedFields(webdataBinder dataBinder){
String[]abd=new string[]{"class.*","Class.*","*.class.*","*.Class.*"};
dataBinder.setDisallowedFields(abd);
}
}

Spring परियोजनाओं के [Git रिपॉजिटरी] (https://github.com/spring-projects/spring-framework/commit/7f7fb58dd0dae86d22268a4b59ac7c72a6c22529) से ऐसा प्रतीत होता है कि Spring डेवलपर दूरस्थ कोड निष्पादन भेद्यता के लिए एक सुधार पर काम कर रहा है, लेकिन हमें आधिकारिक पुष्टि की प्रतीक्षा करनी होगी।