
यह रिपॉजिटरी उन व्यवस्थाओं को प्रदर्शित करने के लिए नमूनों का एक सेट है जिनमें अनुप्रयोग https://spring.io/security/cve-2023-34035[CVE-2023-34035] के प्रति संवेदनशील हो सकते हैं।
कोई अनुप्रयोग तब संवेदनशील होता है जब निम्नलिखित सभी सत्य हों:
Spring MVC क्लासपाथ पर है
DispatcherServlet और कम से कम एक अन्य सर्वलेट मैप किए गए हैं; उनमें से एक के पास पाथ-आधारित सर्वलेट मैपिंग है (उदाहरण के लिए, /path/**)
अनुप्रयोग उन एंडपॉइंट्स को संदर्भित करने के लिए requestMatchers(String) का उपयोग करता है जिनकी सर्वलेट मैपिंग /path/** के रूप में होती है
== नमूने
ऐसे नमूनों का एक सेट है जो Spring Boot का उपयोग करते हैं और एक सेट जो नहीं करता।
जिन नमूनों में विफल परीक्षण हैं वे CVE-2023-34035 के प्रति संवेदनशील हैं। जिन नमूनों के परीक्षण पास होते हैं वे संवेदनशील नहीं हैं।
सभी मामलों में, इनमें से प्रत्येक नमूने में Spring Security से वही शमन त्रुटि होती है, हालाँकि ध्यान दें कि कई परिस्थितियों में ऐसा शमन अस्थायी होता है, जब तक कि अगला मेंटेनेंस रिलीज़ न आ जाए।
=== servlet:java-configuration:dispatcher-servlet-path
https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/dispatcher-servlet-path[यह नमूना] एक संवेदनशील अनुप्रयोग का प्रतिनिधित्व करता है जहाँ DispatcherServlet को डिफ़ॉल्ट / के बजाय /mvc/* पर डिप्लॉय किया गया है।
यह संवेदनशील है क्योंकि Spring MVC क्लासपाथ पर है, DispatcherServlet और कम से कम एक अन्य सर्वलेट मैप किया गया है -- उनमें से एक नॉन-रूट, पाथ-आधारित सर्वलेट मैपिंग के साथ (इस मामले में, DispatcherServlet), और अनुप्रयोग उन एंडपॉइंट्स को सुरक्षित करने के लिए requestMatchers(String) का उपयोग करता है।
=== servlet:java-configuration:jetty
https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/jetty[यह नमूना] एक सुरक्षित अनुप्रयोग का प्रतिनिधित्व करता है जहाँ DispatcherServlet को / (डिफ़ॉल्ट) पर डिप्लॉय किया गया है।
यह संवेदनशील नहीं है। जबकि Spring MVC क्लासपाथ पर है और DispatcherServlet उपयोग में है, यह / पर डिप्लॉय किया गया है और कोई नॉन-रूट, पाथ-आधारित सर्वलेट मैपिंग नहीं है।
=== servlet:java-configuration:other-servlets
https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/other-servlets[यह नमूना] एक संवेदनशील अनुप्रयोग का प्रतिनिधित्व करता है जहाँ DispatcherServlet के साथ-साथ एक कस्टम सर्वलेट MyServlet भी डिप्लॉय किया गया है।
यह संवेदनशील है क्योंकि Spring MVC क्लासपाथ पर है, DispatcherServlet और कम से कम एक अन्य सर्वलेट मैप किया गया है -- उनमें से एक नॉन-रूट, पाथ-आधारित सर्वलेट मैपिंग के साथ (इस मामले में, MyServlet), और अनुप्रयोग उन एंडपॉइंट्स को सुरक्षित करने के लिए requestMatchers(String) का उपयोग करता है।
=== servlet:java-configuration:tomcat
https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/tomcat[यह नमूना] एक सुरक्षित अनुप्रयोग का प्रतिनिधित्व करता है जहाँ DispatcherServlet को / (डिफ़ॉल्ट) पर डिप्लॉय किया गया है।
यह संवेदनशील नहीं है। जबकि Spring MVC क्लासपाथ पर है और DispatcherServlet उपयोग में है, यह / पर डिप्लॉय किया गया है और कोई नॉन-रूट, पाथ-आधारित सर्वलेट मैपिंग नहीं है।
=== servlet:java-configuration:two-dispatcher-servlets
https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/two-dispatcher-servlets[यह नमूना] एक संवेदनशील अनुप्रयोग का प्रतिनिधित्व करता है जहाँ DispatcherServlet के साथ-साथ एक कस्टम सर्वलेट MyServlet भी डिप्लॉय किया गया है।
यह संवेदनशील है क्योंकि Spring MVC क्लासपाथ पर है, DispatcherServlet और कम से कम एक अन्य सर्वलेट मैप किया गया है -- उनमें से एक नॉन-रूट, पाथ-आधारित सर्वलेट मैपिंग के साथ (इस मामले में, दो DispatcherServlets में से एक), और अनुप्रयोग उन एंडपॉइंट्स को सुरक्षित करने के लिए requestMatchers(String) का उपयोग करता है।
=== servlet:spring-boot:java:dispatcher-servlet-path
https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/dispatcher-servlet-path[यह नमूना] एक संवेदनशील अनुप्रयोग का प्रतिनिधित्व करता है जहाँ DispatcherServlet को डिफ़ॉल्ट / के बजाय /mvc/* पर डिप्लॉय किया गया है।
यह संवेदनशील है क्योंकि Spring MVC क्लासपाथ पर है, DispatcherServlet और कम से कम एक अन्य सर्वलेट मैप किया गया है -- उनमें से एक नॉन-रूट, पाथ-आधारित सर्वलेट मैपिंग के साथ (इस मामले में, DispatcherServlet), और अनुप्रयोग उन एंडपॉइंट्स को सुरक्षित करने के लिए requestMatchers(String) का उपयोग करता है।
=== servlet:spring-boot:java:jetty
https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/jetty[यह नमूना] एक सुरक्षित अनुप्रयोग का प्रतिनिधित्व करता है जहाँ DispatcherServlet को / (डिफ़ॉल्ट) पर डिप्लॉय किया गया है।
यह संवेदनशील नहीं है। जबकि Spring MVC क्लासपाथ पर है और DispatcherServlet उपयोग में है, यह / पर डिप्लॉय किया गया है और कोई नॉन-रूट, पाथ-आधारित सर्वलेट मैपिंग नहीं है।
=== servlet:spring-boot:java:other-servlets
https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/other-servlets[यह नमूना] एक संवेदनशील अनुप्रयोग का प्रतिनिधित्व करता है जहाँ DispatcherServlet के साथ-साथ एक कस्टम सर्वलेट MyServlet भी डिप्लॉय किया गया है।
यह संवेदनशील है क्योंकि Spring MVC क्लासपाथ पर है, DispatcherServlet और कम से कम एक अन्य सर्वलेट मैप किया गया है -- उनमें से एक नॉन-रूट, पाथ-आधारित सर्वलेट मैपिंग के साथ (इस मामले में, MyServlet), और अनुप्रयोग उन एंडपॉइंट्स को सुरक्षित करने के लिए requestMatchers(String) का उपयोग करता है।
=== servlet:spring-boot:java:tomcat
https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/tomcat[यह नमूना] एक सुरक्षित अनुप्रयोग का प्रतिनिधित्व करता है जहाँ DispatcherServlet को / (डिफ़ॉल्ट) पर डिप्लॉय किया गया है।
यह संवेदनशील नहीं है। जबकि Spring MVC क्लासपाथ पर है और DispatcherServlet उपयोग में है, यह / पर डिप्लॉय किया गया है और कोई नॉन-रूट, पाथ-आधारित सर्वलेट मैपिंग नहीं है।
=== servlet:spring-boot:java:undertow
https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/undertow[यह नमूना] एक सुरक्षित अनुप्रयोग का प्रतिनिधित्व करता है जहाँ DispatcherServlet को / (डिफ़ॉल्ट) पर डिप्लॉय किया गया है।
यह संवेदनशील नहीं है। जबकि Spring MVC क्लासपाथ पर है और DispatcherServlet उपयोग में है, यह / पर डिप्लॉय किया गया है और कोई नॉन-रूट, पाथ-आधारित सर्वलेट मैपिंग नहीं है।
== शमन उपाय
यदि आपको निम्न जैसी त्रुटि मिलती है:
requestMatchers(MvcRequestMatcher);
otherwise, please use requestMatchers(AntPathRequestMatcher).तो आपको उसका पालन करना चाहिए।
[NOTE]
Spring Security के 5.8.5, 6.0.5, 6.1.2, और 6.2.0-M1 संस्करणों में कुछ गलत-सकारात्मक परिणाम हैं।
अब कई मामलों में निम्नलिखित अस्थायी है, जब तक कि 5.8.6, 6.0.6, 6.1.3, और 6.2.0-M2 रिलीज़ न हों।
जैसा कि त्रुटि संदेश में संकेत दिया गया है, प्राथमिक शमन उपाय एक पूर्ण RequestMatcher का उपयोग करना है।
ऐसा इसलिए है ताकि सर्वलेट मैपिंग को अधिक स्पष्ट रूप से ध्यान में रखा जा सके।
उदाहरण के लिए, यदि किसी अनुप्रयोग में /my-servlet/* पर एक सर्वलेट डिप्लॉय है और वह उस ट्रैफ़िक को इस प्रकार अधिकृत कर रहा है:
तो, अनुप्रयोग को इसके बजाय ऐसा करना चाहिए:
import static org.springframework.security.web.util.matcher.AntPathRequestMatcher.antMatcher;
@Bean MvcRequestMatcher.Builder mvc(HandlerMappingIntrospector introspector) { return new MvcRequestMatcher.Builder(introspector); }
या, यदि DispatcherServlet को किसी भिन्न पाथ पर डिप्लॉय किया गया है, जैसे /spring-mvc/*, तो इसके बजाय:
अनुप्रयोग को ऐसा करना चाहिए:
@Bean MvcRequestMatcher.Builder mvc(HandlerMappingIntrospector introspector) { return new MvcRequestMatcher.Builder(introspector).servletPath("/spring-mvc"); }
MvcRequestMatcher का निर्माण करते समय सर्वलेट पाथ को अलग करना यह सुनिश्चित करने के लिए महत्वपूर्ण है कि अनुरोध सही ढंग से मेल खाता है।
== ब्रांचें
इस रिपॉजिटरी में, Spring Security के प्रत्येक माइनर रिलीज़ के लिए एक ब्रांच है।
उस ब्रांच पर, प्रभावित प्रत्येक नमूने के लिए आवश्यक शमन उपाय सहित एक कमिट है।
उदाहरण के लिए, 5.8.x ब्रांच पर, उन आठ नमूनों की मरम्मत के लिए आठ कमिट हैं जिन्हें शमन की आवश्यकता है।
जब 5.8.6, 6.0.6, 6.1.3, और 6.2.0-M2 रिलीज़ हो जाएँगे, तो उन ब्रांचों में अतिरिक्त परिवर्तन किए जाएँगे ताकि सर्वोत्तम-अभ्यास शमन उपाय स्पष्ट हो।