
यह रिपॉजिटरी SECURITY-3430 / CVE-2024-43044 के दोहन को रोकने का एक वर्कअराउंड प्रदान करती है।
यह एक Java एजेंट है जो उन Jenkins कंट्रोलरों के लिए है जिनके पास SECURITY-3430 का फिक्स नहीं है (अर्थात, 2.470 और LTS 2.452.3 तक और इन्हें शामिल करते हुए)।
यह SECURITY-3430 भेद्यता वाले वर्ग की परिभाषा को रूपांतरित करता है ताकि शोषण को रोका जा सके। यदि किसी कारण से यह विफल हो जाता है, तो Jenkins को जबरदस्ती रोक दिया जाता है।
यह समाधान ClassLoaderProxy#fetchJar को पूरी तरह से अवरुद्ध कर देगा और इसलिए यह सुरक्षा सलाहकार में उल्लिखित प्लगइन्स की प्रभावित कार्यक्षमता के साथ असंगत है, सामान्य फिक्स के विपरीत।
इस समाधान का परीक्षण पिछले कुछ वर्षों में Jenkins के कई हालिया रिलीज़ों के साथ सफलतापूर्वक किया गया है।
चेतावनी: इस समाधान के काम करने के तरीके के कारण, हम दृढ़ता से अनुशंसा करते हैं कि आप नियमित रूप से Jenkins का बैकअप लें, और समाधान को क्रमिक रूप से तैनात करें।
Jenkins कंट्रोलर प्रक्रिया को शोषण से बचाएं:
java -javaagent:/path/to/security3430-workaround.jar -jar jenkins.war
निर्दिष्ट RemoteClassLoader$ClassLoaderProxy.class वर्ग फ़ाइल पर रूपांतरण लागू करें और परिणाम को एक अलग फ़ाइल में लिखें:
java -jar /path/to/security3430-workaround.jar <source file> <target file>
इसका उपयोग न्यूनतम संशोधित remoting.jar फ़ाइलें बनाने के लिए किया जा सकता है।
इस Java एजेंट के व्यवहार को बदलने के लिए दो Java सिस्टम प्रॉपर्टीज़ सेट की जा सकती हैं:
io.jenkins.security.Security3430Workaround.DISABLE:
वर्ग रूपांतरण को अक्षम करने के लिए इसे true पर सेट करें।io.jenkins.security.Security3430Workaround.SKIP_SHUTDOWN:
वर्ग रूपांतरण विफल होने पर Jenkins प्रक्रिया को न रोकने के लिए इसे true पर सेट करें।
केवल विशिष्ट संकीर्ण स्थितियों में अनुशंसित, उदा., जब लॉग संदेशों की बारीकी से निगरानी कर रहे हों (नीचे देखें)।दोनों को वर्ग लोड होने और रूपांतरण का प्रयास करने से पहले सेट करने की आवश्यकता है, आदर्श रूप से -D कमांड लाइन विकल्प के रूप में।
लॉग संदेश io.jenkins.security.Security3430Workaround लॉगर का उपयोग करते हैं।
SEVERE पर लॉग किए गए संदेश रूपांतरण में विफलता दर्शाते हैं।
इस समाधान की प्रभावशीलता की पुष्टि करने के लिए किसी कनेक्टेड Jenkins एजेंट के स्क्रिप्ट कंसोल में निम्नलिखित कोड चलाएँ:
def cl = Thread.currentThread().getContextClassLoader().proxy
cl.fetchJar(new URL('file:/path/to/jenkins/home/secrets/master.key'))
न तो फिक्स और न ही समाधान के साथ, यह निम्नलिखित जैसा संदेश प्रिंट करेगा, जो सफल शोषण का संकेत देता है: Result: [B@23edd8a0
इस समाधान को लागू करने पर, यह एक AbstractMethodError फेंकेगा और एक लंबा स्टैक ट्रेस प्रिंट करेगा।
MIT लाइसेंस की शर्तों के तहत लाइसेंस प्राप्त। कॉपीराइट 2024 CloudBees, Inc.