
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 अनुरोध पैरामीटर डेटा बाइंडिंग प्रवेश बिंदु मौजूद है।
यह परियोजना "पहले सामान्य कार्यक्षमता की पुष्टि करें, फिर प्रभाव स्थितियों की पुष्टि करें, उसके बाद केवल-पढ़ने के जोखिम निदान करें, और अंत में समाधान और पुनः परीक्षण करें" के विचार का पालन करती है।
@ModelAttribute का उपयोग करके अनुरोध पैरामीटर को UserProfile ऑब्जेक्ट में बाइंड करें।BeanWrapper का उपयोग करके class.module.name का केवल-पढ़ने का निदान करें।इस परियोजना ने निम्नलिखित प्रभाव स्थितियों की एक-एक करके पुष्टि की है:
spring-webmvc घटक शामिल है@ModelAttribute पर आधारित डेटा बाइंडिंग प्रवेश बिंदु मौजूद हैसमाधान-पूर्व परियोजना में वास्तव में तैनात Spring निर्भरताएँ शामिल हैं:
spring-beans-5.3.17.jarspring-core-5.3.17.jarspring-web-5.3.17.jarspring-webmvc-5.3.17.jarयह परियोजना केवल Spring Framework संस्करण के आधार पर सीधे भेद्यता की पुष्टि नहीं करती है, बल्कि JDK, Spring MVC, Tomcat, WAR तैनाती और डेटा बाइंडिंग प्रवेश बिंदु के संयोजन से व्यापक विश्लेषण करती है।
विनाशकारी भेद्यता शोषण से बचने के लिए, यह परियोजना Spring Framework द्वारा प्रदान किए गए BeanWrapper का उपयोग करके निम्नलिखित गुण पथ की केवल-पढ़ने की जाँच करती है:
class.module.name
यह पथ प्रतिनिधित्व करता है:
class: वर्तमान व्यावसायिक ऑब्जेक्ट के अनुरूप Java Class ऑब्जेक्ट तक पहुँचmodule: उस वर्ग से संबंधित Java मॉड्यूल तक पहुँचname: मॉड्यूल नाम पढ़ेंनिदान प्रक्रिया केवल गुण पठनीयता जाँच और गुण मान पढ़ने की विधियों को कॉल करती है:
इसलिए, यह निदान केवल समाधान से पहले और बाद में आंतरिक गुण पथ तक पहुँच के अंतर को देखने के लिए उपयोग किया जा सकता है, और अकेले रिमोट कोड निष्पादन की पुष्टि नहीं कर सकता है।
समाधान-पूर्व वातावरण में उपयोग किया गया:
Spring Framework 5.3.17
गुण पथ की जाँच:
class.module.name
निदान परिणाम:
truenulltrue इंगित करता है कि वर्तमान वातावरण सामान्य व्यावसायिक ऑब्जेक्ट के class गुण के माध्यम से module.name को पार्स करना जारी रख सकता है।
पढ़ने का परिणाम null है, क्योंकि वर्तमान WAR एप्लिकेशन Java अनाम मॉड्यूल में चल रहा है, मॉड्यूल का नाम खाली है, इसका मतलब यह नहीं है कि गुण पथ पढ़ना विफल रहा।
समाधान-पश्चात वातावरण में उपयोग किया गया:
Spring Framework 5.3.18
समान गुण पथ का उपयोग करके पुनः निदान:
class.module.name
निदान परिणाम:
falseNot readableसमाधान से पहले और बाद के परिणाम स्पष्ट अंतर दर्शाते हैं:
यह परिणाम दर्शाता है कि संस्करण उन्नयन के बाद, मूल निदान गुण पथ तक पहुँच प्रतिबंधित हो गई है, और समाधान से पहले देखा गया जोखिम प्रकटीकरण अब मौजूद नहीं है।
यह परियोजना Spring Framework संस्करण को उन्नयन करके समाधान अपनाती है।
समाधान-पूर्व कॉन्फ़िगरेशन:
<spring.version>5.3.17</spring.version>
समाधान-पश्चात कॉन्फ़िगरेशन:
<spring.version>5.3.18</spring.version>
समाधान प्रक्रिया के दौरान निम्नलिखित कार्य किए गए:
fixed-demo में कॉपी किया।समाधान-पश्चात परियोजना में वास्तव में तैनात Spring निर्भरताएँ शामिल हैं:
spring-beans-5.3.18.jarspring-core-5.3.18.jarspring-web-5.3.18.jarspring-webmvc-5.3.18.jarयह परिणाम साबित करता है कि समाधान संस्करण का पुनर्निर्माण किया गया और वास्तव में तैनात किया गया, न कि केवल pom.xml में संस्करण संख्या बदली गई।
Spring Framework 5.3.18 में उन्नयन के बाद, समाधान परियोजना के होम पेज पर पुनः पहुँचें और निम्नलिखित परीक्षण डेटा सबमिट करें:
Alice[email protected]सबमिट करने के बाद, पृष्ठ अभी भी सामान्य रूप से प्रदर्शित होता है:
Alice है[email protected] हैयह परिणाम दर्शाता है कि संस्करण उन्नयन ने परियोजना की मूल सामान्य अनुरोध पैरामीटर बाइंडिंग और पृष्ठ प्रदर्शन कार्यक्षमता को प्रभावित नहीं किया है।
Spring MVC की स्वचालित डेटा बाइंडिंग तंत्र HTTP अनुरोध पैरामीटर नामों के आधार पर Java ऑब्जेक्ट गुणों तक पहुँच सकता है।
सामान्य व्यावसायिक पैरामीटर name और email को केवल UserProfile में संबंधित सामान्य गुणों तक पहुँचने की आवश्यकता है।
हालाँकि, Spring की गुण पहुँच तंत्र डॉट-युक्त नेस्टेड गुण पथों का भी समर्थन करता है। प्रभावित संस्करणों में, कुछ आंतरिक गुण पथों पर प्रतिबंध पर्याप्त रूप से सख्त नहीं हैं, जिससे बाहरी पैरामीटर विशिष्ट वातावरण में सामान्य व्यावसायिक ऑब्जेक्ट से Java Class, मॉड्यूल, क्लास लोडर या Servlet कंटेनर से संबंधित ऑब्जेक्ट्स में प्रवेश कर सकते हैं।
जब आंतरिक ऑब्जेक्ट्स में ऐसे लिखने योग्य गुण मौजूद होते हैं जो सर्वर कॉन्फ़िगरेशन या फ़ाइल सिस्टम को प्रभावित कर सकते हैं, और एप्लिकेशन एक साथ JDK, Tomcat, WAR तैनाती और डेटा बाइंडिंग जैसी स्थितियों को पूरा करता है, तो आगे रिमोट कोड निष्पादन का जोखिम पैदा हो सकता है।
यह भेद्यता name या email गुणों के कारण नहीं है, और सभी Spring MVC का उपयोग करने वाली परियोजनाएँ आवश्यक रूप से शोषण योग्य नहीं हैं। भेद्यता की पुष्टि के लिए आमतौर पर कई स्थितियों का एक साथ मौजूद होना आवश्यक है।
वास्तविक व्यावसायिक प्रणालियों में निम्नलिखित उपाय करने की अनुशंसा की जाती है:













इस परियोजना ने स्थानीय पृथक वातावरण में Spring Framework CVE-2022-22965 की प्रभाव स्थितियों की पुष्टि, जोखिम प्रकटीकरण निदान, संस्करण उन्नयन समाधान और समाधान के बाद पुनः परीक्षण पूरा किया।
समाधान-पूर्व परियोजना में Spring Framework 5.3.17 का उपयोग किया गया। JDK 11, Spring MVC, Apache Tomcat 9.0.60 और पारंपरिक WAR तैनाती वातावरण में, class.module.name गुण पथ को पढ़ने योग्य पाया गया।
समाधान-पश्चात परियोजना में Spring Framework को 5.3.18 में उन्नयन किया गया। समान गुण पथ अब पढ़ने योग्य नहीं है, जबकि नाम और ईमेल की सामान्य डेटा बाइंडिंग कार्यक्षमता अभी भी उपयोग की जा सकती है।
इस परियोजना ने पूर्ण रिमोट कोड शोषण नहीं किया, बल्कि सुरक्षित, नियंत्रित केवल-पढ़ने की विधि के माध्यम से समाधान से पहले और बाद के अंतरों का सत्यापन पूरा किया।
परियोजना निम्नलिखित क्षमताओं को प्रदर्शित करती है: