
CLI के माध्यम से मनमानी फ़ाइल पढ़ने की भेद्यता का Jenkins POC RCE का कारण बन सकता है।
जेन्किन्स में स्क्रिप्ट या शेल वातावरण से जेन्किन्स तक पहुँचने के लिए एक अंतर्निहित कमांड लाइन इंटरफ़ेस (CLI) है।
जेन्किन्स CLI कमांड को संसाधित करते समय जेन्किन्स कंट्रोलर पर कमांड आर्गुमेंट और विकल्पों को पार्स करने के लिए args4j लाइब्रेरी का उपयोग करता है। इस कमांड पार्सर में एक विशेषता है जो किसी आर्गुमेंट में @ वर्ण के बाद फ़ाइल पथ को उस फ़ाइल की सामग्री (expandAtFiles) से बदल देती है। यह सुविधा डिफ़ॉल्ट रूप से सक्षम है और जेन्किन्स 2.441 और इससे पहले, LTS 2.426.2 और इससे पहले इसे अक्षम नहीं करता है।
यह हमलावरों को जेन्किन्स कंट्रोलर प्रक्रिया के डिफ़ॉल्ट कैरेक्टर एन्कोडिंग का उपयोग करके जेन्किन्स कंट्रोलर फ़ाइल सिस्टम पर मनमानी फ़ाइलों को पढ़ने की अनुमति देता है।
Overall/Read अनुमति वाले हमलावर पूरी फ़ाइलें पढ़ सकते हैं।
Overall/Read अनुमति के बिना हमलावर फ़ाइलों की पहली कुछ पंक्तियाँ पढ़ सकते हैं। पढ़ी जा सकने वाली पंक्तियों की संख्या उपलब्ध CLI कमांड पर निर्भर करती है। इस सलाह के प्रकाशन के समय, जेन्किन्स सुरक्षा टीम ने बिना किसी प्लगइन को स्थापित किए जेन्किन्स के हाल के रिलीज़ में फ़ाइलों की पहली तीन पंक्तियों को पढ़ने के तरीके खोजे हैं, और किसी भी प्लगइन की पहचान नहीं की है जो इस पंक्ति गणना को बढ़ाएगा।
फिक्स विवरण: जेन्किन्स 2.442, LTS 2.426.3 CLI कमांड के लिए आर्गुमेंट में @ वर्ण के बाद फ़ाइल पथ को फ़ाइल की सामग्री से बदलने वाली कमांड पार्सर सुविधा को अक्षम करता है।
इस फिक्स में समस्या होने पर, Java सिस्टम प्रॉपर्टी hudson.cli.CLICommand.allowAtSyntax को true पर सेट करके इस परिवर्तन को अक्षम करें। ऐसा करना किसी भी नेटवर्क पर जो जेन्किन्स व्यवस्थापक नहीं हैं, उन उपयोगकर्ताओं द्वारा सुलभ है, के लिए दृढ़ता से हतोत्साहित किया जाता है।
कार्य-समाधान: CLI तक पहुँच को अक्षम करने से शोषण को पूरी तरह से रोका जा सकता है। जो व्यवस्थापक तुरंत जेन्किन्स 2.442, LTS 2.426.3 में अपडेट नहीं कर सकते, उनके लिए ऐसा करना दृढ़ता से अनुशंसित है। इस कार्य-समाधान को लागू करने के लिए जेन्किन्स को पुनरारंभ करने की आवश्यकता नहीं है।
अधिक जानकारी: https://www.jenkins.io/security/advisory/2024-01-24/#SECURITY-3314
चलाने का कमांड: python CVE-2024-23897 Jenkins.py -l list.txt -f /etc/passwd
VULN आउटपुट प्रतिक्रिया में daemon या bin से अधिक भी हो सकता है, यदि आप और जोड़ना चाहते हैं तो पंक्ति 28 में जोड़ें।