
CVE-2025-53652: Jenkins Git पैरामीटर विश्लेषण
यह भेद्यता इसलिए उत्पन्न होती है क्योंकि जेनकिंस बिल्ड पैरामीटरों से उपयोगकर्ता-नियंत्रित इनपुट Git चेकआउट कमांड में असुरक्षित रूप से इंजेक्ट किया जाता है।
उपयोगकर्ता इनपुट एक बिल्ड पैरामीटर (जैसे, gitParameters) के रूप में प्रदान किया जाता है, जिसमें दुर्भावनापूर्ण शेल कमांड हो सकते हैं।
यह पैरामीटर GitParameterValue (जो StringParameterValue का विस्तार करता है) में लपेटा जाता है, जिसकी buildEnvironment() विधि इसे बिना सैनिटाइज़ेशन के बिल्ड संदर्भ में एक पर्यावरण चर के रूप में उजागर करती है।
SCM चेकआउट प्रक्रिया के दौरान, जेनकिंस build.getEnvironment() के माध्यम से बिल्ड पर्यावरण चरों को लोड करता है।
चेकआउट के लिए उपयोग की जाने वाली शाखा का नाम (localBranchName) इन पर्यावरण चरों से प्राप्त किया जाता है।
फिर शाखा का नाम सीधे CheckoutCommand.branch() विधि में पास किया जाता है।
अंत में, CheckoutCommand.execute() अंतर्निहित Git CLI कमांड को निष्पादित करता है, जो बिना सत्यापन या एस्केपिंग के शाखा के नाम को संयोजित करता है।
यह कमांड इंजेक्शन को सक्षम बनाता है, जिससे हमलावर जेनकिंस बिल्ड होस्ट पर मनमाने शेल कमांड निष्पादित कर सकता है।
createValue विधि जो उपयोगकर्ता इनपुट को संभालती है (जैसे, HTTP POST JSON पेलोड से), यह वह जगह है जहाँ जेनकिंस अनुरोध के माध्यम से उपयोगकर्ता-आपूर्ति किए गए पैरामीटर मानों को स्वीकार करता है (उदाहरण के लिए, "selected": "master; rm -rf /")।
इनपुट को बिना इनपुट सैनिटाइज़ेशन या सत्यापन के GitParameterValue में लपेटा जाता है, जो StringParameterValue का विस्तार करता है।
इसका मतलब है कि कच्चा उपयोगकर्ता डेटा एक बिल्ड पैरामीटर के रूप में स्वीकार किया जाता है और ParameterValue इंस्टेंस के रूप में संग्रहीत किया जाता है।

GitParameterValue क्लास StringParameterValue का विस्तार करती है, GitParameterValue StringParameterValue से विरासत प्राप्त करता है लेकिन कोई सैनिटाइज़ेशन नहीं जोड़ता है।
कंस्ट्रक्टर श्रृंखला का अर्थ है कि उपयोगकर्ता इनपुट अब एक ऑब्जेक्ट में संग्रहीत है जिसका उपयोग जेनकिंस बाद में पर्यावरण चर बनाने के लिए करेगा।
यह दुर्भावनापूर्ण इनपुट को जेनकिंस के बिल्ड पर्यावरण चरों में प्रसारित करता है।
"
StringParameterValue क्लास और इसकी buildEnvironment विधि, यह विधि महत्वपूर्ण है — यह पैरामीटर को निम्न कार्य करके बिल्ड संदर्भ में पर्यावरण चरों के रूप में उजागर करती है:
env.put(name, value);
env.put(name.toUpperCase(Locale.ENGLISH), value);
चूँकि मान असैनिटाइज़्ड उपयोगकर्ता इनपुट है, यह दुर्भावनापूर्ण इनपुट को जेनकिंस के पर्यावरण चरों में प्रवेश करने की अनुमति देता है, जिससे यह Git कमांड जैसी बाद की प्रक्रियाओं के लिए सुलभ हो जाता है।
GitSCM प्लगइन में _checkout विधि, यह विधि build.getEnvironment(listener) को कॉल करती है, जो पहले सेट किए गए दुर्भावनापूर्ण चर सहित पर्यावरण चरों को एकत्र करता है।
यह शाखा का नाम प्राप्त करने के लिए इन चरों का उपयोग करता है (localBranchName के माध्यम से), जिसे फिर CheckoutCommand को पास किया जाता है।
दुर्भावनापूर्ण पैरामीटर से पर्यावरण चर सीधे चेकआउट प्रक्रिया में प्रवाहित होता है।

CheckoutCommand का निर्माण और उपयोगकर्ता इनपुट के साथ शाखा/रेफ़ सेट करना, CheckoutCommand.branch(localBranchName) असैनिटाइज़्ड पर्यावरण चर का उपयोग करता है।
चूँकि localBranchName उपयोगकर्ता-नियंत्रित पर्यावरण चरों से आया है, यह चेकआउट में मनमाने कमांड इंजेक्ट करता है, यह execute() कॉल होने पर कमांड इंजेक्शन के लिए मंच तैयार करता है।

CheckoutCommand.execute() विधि जो Git CLI कमांड चलाती है, यह अंतिम चरण है जहाँ इंजेक्ट की गई शाखा स्ट्रिंग को बिना एस्केपिंग या सैनिटाइज़ेशन के सीधे सिस्टम के Git CLI को पास किया जाता है, परिणामस्वरूप, दुर्भावनापूर्ण पेलोड शेल कमांड के रूप में निष्पादित होता है, जिससे जेनकिंस होस्ट पर रिमोट कोड निष्पादन सक्षम होता है।
यह विश्लेषण बताता है कि कैसे जेनकिंस का Git Parameter Plugin, Git SCM प्लगइन के साथ मिलकर, एक गंभीर कमांड इंजेक्शन भेद्यता उत्पन्न कर सकता है। उपयोगकर्ता-नियंत्रित पैरामीटर मानों को पर्यावरण चरों के रूप में असुरक्षित रूप से उजागर करके और बाद में उन्हें बिना उचित सैनिटाइज़ेशन के सीधे Git CLI कमांड में पास करके, हमलावर जेनकिंस बिल्ड सर्वर पर मनमाने कमांड निष्पादित कर सकते हैं।
विश्वास श्रृंखला का यह विघटन—प्रारंभिक दुर्भावनापूर्ण JSON पेलोड से लेकर अंतिम शेल निष्पादन तक—निरंतर एकीकरण प्रणालियों में सख्त इनपुट सत्यापन और बिल्ड पैरामीटरों के सुरक्षित संचालन के महत्व को रेखांकित करता है।
उपयोगकर्ताओं और व्यवस्थापकों को यह सुनिश्चित करना चाहिए कि वे जेनकिंस और सभी प्लगइन्स के अद्यतन संस्करण चला रहे हैं, और शेल कमांड को प्रभावित करने वाले किसी भी पैरामीटर की सावधानीपूर्वक जाँच करें। इनपुट सैनिटाइज़ेशन, अनुमत शाखाओं की व्हाइटलिस्टिंग, या बिल्ड वातावरण को अलग करने जैसे शमन उपाय जोखिम को कम कर सकते हैं।
इस प्रवाह को समझना सुरक्षा पेशेवरों और डेवलपर्स को जेनकिंस या समान CI/CD प्लेटफार्मों में समान इंजेक्शन भेद्यताओं का पता लगाने, रोकने और समाधान करने के लिए आवश्यक अंतर्दृष्टि प्रदान करता है।
