
Spring Framework CVE-2022-22965 स्थानीय प्रभाव स्थिति सत्यापन, संस्करण उन्नयन सुधार और पुनः परीक्षण परियोजना
यह परियोजना Spring Framework CVE-2022-22965, जिसे Spring4Shell के नाम से भी जाना जाता है, के प्रभाव की स्थितियों, जोखिम प्रकटीकरण, समाधान विधियों और समाधान के बाद पुनः परीक्षण प्रक्रिया को सीखने और सत्यापित करने के लिए है।
परियोजना व्यक्तिगत रूप से स्थापित स्थानीय अधिकृत वातावरण में पूरी की गई है। परियोजना का मुख्य बिंदु वास्तविक लक्ष्यों पर हमला करना नहीं है, बल्कि समाधान से पहले और समाधान के बाद Spring MVC परीक्षण वातावरण स्थापित करके, भेद्यता से संबंधित प्रभाव स्थितियों की एक-एक करके पुष्टि करना है, और सुरक्षित, नियंत्रित केवल-पढ़ने के तरीके से Spring डेटा बाइंडिंग के आंतरिक गुण पथों में संस्करण उन्नयन से पहले और बाद के अंतरों का निरीक्षण करना है।
इस परियोजना ने निम्नलिखित प्रक्रियाएँ पूरी की हैं:
यह परियोजना केवल व्यक्तिगत स्थानीय स्व-निर्मित वातावरण या स्पष्ट रूप से अधिकृत सुरक्षा परीक्षण वातावरण के लिए है।
परियोजना किसी भी सार्वजनिक वेबसाइट, सर्वर या तृतीय-पक्ष व्यावसायिक प्रणाली को स्कैन, पता लगाने या शोषण के लिए लक्षित नहीं करती है, और इसमें वास्तविक उपयोगकर्ता डेटा या वास्तविक व्यावसायिक डेटा शामिल नहीं है।
परीक्षण प्रक्रिया के दौरान निम्नलिखित कार्य नहीं किए गए:
इस परियोजना में परीक्षण विधियों का उपयोग किसी भी अनधिकृत लक्ष्य के लिए निषिद्ध है।
CVE-2022-22965 को आमतौर पर Spring4Shell के रूप में जाना जाता है, यह Spring Framework में अनुरोध पैरामीटर डेटा बाइंडिंग तंत्र से संबंधित एक रिमोट कोड निष्पादन भेद्यता है।
Spring MVC HTTP अनुरोध पैरामीटर को Java ऑब्जेक्ट गुणों में स्वचालित रूप से बाइंड करने का समर्थन करता है। उदाहरण के लिए, यह परियोजना निम्नलिखित तरीके से नाम और ईमेल पैरामीटर प्राप्त करती है:
@ModelAttribute("profile") UserProfile profile
सामान्य रूप से, अनुरोध पैरामीटर name और email गुण नामों के अनुसार UserProfile ऑब्जेक्ट में बाइंड हो जाएंगे।
प्रभावित संस्करणों में, कुछ आंतरिक गुण पथों तक पहुँच पर प्रतिबंध पर्याप्त रूप से सख्त नहीं हैं। JDK 9 या उच्चतर संस्करण का उपयोग करते समय, और विशिष्ट Servlet कंटेनर, तैनाती विधि और डेटा बाइंडिंग स्थितियों को पूरा करने पर, बाहरी अनुरोध पैरामीटर सामान्य व्यावसायिक ऑब्जेक्ट से Java Class, मॉड्यूल, क्लास लोडर या कंटेनर से संबंधित आंतरिक ऑब्जेक्ट्स तक पहुँच सकते हैं।
विशिष्ट शोषण-योग्य वातावरण में, हमलावर आगे सर्वर कॉन्फ़िगरेशन को संशोधित कर सकता है या सर्वर फ़ाइलें लिख सकता है, जिससे रिमोट कोड निष्पादन का जोखिम पैदा होता है।
यह परियोजना पूर्ण रिमोट कोड शोषण नहीं करती है, बल्कि सुरक्षित, केवल-पढ़ने के अंतर निदान के लिए निम्नलिखित गुण पथ का उपयोग करती है:
class.module.name
यह परियोजना व्यक्तिगत स्थानीय VMware पृथक प्रयोगात्मक वातावरण में पूरी की गई है।
127.0.0.1सामान्य कार्यक्षमता परीक्षण डेटा:
Alice[email protected]सुरक्षा निदान गुण पथ:
class.module.name
spring4shell-local-verification-lab/
README.md: परियोजना परिचय, परीक्षण विचार, सत्यापन परिणाम और समाधान स्पष्टीकरणdocs/: Spring4Shell स्थानीय प्रभाव स्थितियाँ सत्यापन, समाधान और पुनः परीक्षण रिपोर्टimages/: परियोजना वातावरण, परीक्षण प्रक्रिया और पुनः परीक्षण स्क्रीनशॉटvulnerable-demo/: Spring Framework 5.3.17 का उपयोग करने वाली समाधान-पूर्व परियोजनाfixed-demo/: Spring Framework 5.3.18 का उपयोग करने वाली समाधान-पश्चात परियोजनाnotes/: अध्ययन नोट्स और प्रक्रिया रिकॉर्डमुख्य स्रोत कोड संरचना:
config/: Spring MVC कॉन्फ़िगरेशन क्लास और एप्लिकेशन इनिशियलाइज़ेशन क्लासcontroller/: फॉर्म प्रोसेसिंग और गुण पथ निदान नियंत्रकmodel/: नाम और ईमेल पैरामीटर प्राप्त करने के लिए UserProfile क्लासWEB-INF/views/: होम पेज, सबमिट परिणाम और निदान परिणाम JSP पेजइस परियोजना ने क्रमशः समाधान-पूर्व और समाधान-पश्चात दो Spring MVC एप्लिकेशन स्थापित किए हैं।
परियोजना निर्देशिका:
vulnerable-demo
उपयोग किया गया संस्करण:
Spring Framework 5.3.17
उत्पन्न WAR फ़ाइल:
spring4shell-vulnerable-demo.war
पहुँच पता:
http://127.0.0.1:8080/spring4shell-vulnerable-demo/
निदान पृष्ठ:
http://127.0.0.1:8080/spring4shell-vulnerable-demo/binding-probe
परियोजना निर्देशिका:
fixed-demo
उपयोग किया गया संस्करण:
Spring Framework 5.3.18
उत्पन्न WAR फ़ाइल:
spring4shell-fixed-demo.war
पहुँच पता:
http://127.0.0.1:8080/spring4shell-fixed-demo/
निदान पृष्ठ:
http://127.0.0.1:8080/spring4shell-fixed-demo/binding-probe
परीक्षण परियोजना एक सरल उपयोगकर्ता प्रोफ़ाइल फॉर्म प्रदान करती है, जिसमें शामिल है:
नियंत्रक निम्नलिखित तरीके से अनुरोध पैरामीटर प्राप्त करता है:
@ModelAttribute("profile") UserProfile profile
जब उपयोगकर्ता नाम और ईमेल सबमिट करता है, तो Spring MVC name और email पैरामीटर को स्वचालित रूप से UserProfile ऑब्जेक्ट में बाइंड कर देता है।
परिणाम पृष्ठ बाइंड किए गए ऑब्जेक्ट को पढ़ता है और उपयोगकर्ता द्वारा सबमिट किया गया नाम और ईमेल प्रदर्शित करता है।
इस कार्यक्षमता का उपयोग यह पुष्टि करने के लिए किया जाता है कि परियोजना सामान्य रूप से चल सकती है, साथ ही यह साबित करने के लिए कि एप्लिकेशन में एक वैध Spring MVC अनुरोध पैरामीटर डेटा बाइंडिंग प्रवेश बिंदु मौजूद है।
यह परियोजना "पहले सामान्य कार्यक्षमता की पुष्टि करें, फिर प्रभाव स्थितियों की पुष्टि करें, उसके बाद केवल-पढ़ने के जोखिम निदान करें, और अंत में समाधान और पुनः परीक्षण करें" के विचार का पालन करती है।