
CVE-2024-23897: Jenkins में मनमानी फ़ाइल पढ़ने से RCE
CVE-2024-23897: Jenkins मनमाना फ़ाइल पढ़ने से RCE तक 🎯 प्रभावित उत्पाद और संस्करण
उत्पाद: Jenkins (सतत एकीकरण/सतत वितरण सर्वर)
संस्करण: Jenkins 2.441 और पुराने, Jenkins LTS 2.426.2 और पुराने
फिक्स: Jenkins 2.442, Jenkins LTS 2.426.3
📝 विवरण
CVE-2024-23897 Jenkins में एक गंभीर भेद्यता है जो अनधिकृत हमलावरों को Jenkins नियंत्रक फ़ाइल सिस्टम पर मनमानी फ़ाइलें पढ़ने की अनुमति देती है। यह भेद्यता मौजूद है क्योंकि Jenkins अपने CLI कमांड पार्सर की एक सुविधा को अक्षम नहीं करता है जो '@' वर्ण के बाद फ़ाइल पथ को उस फ़ाइल की सामग्री से बदल देता है।
यह दोष, अन्य तकनीकों के साथ संयुक्त होने पर, रिमोट कोड निष्पादन (RCE) का कारण बन सकता है, जिससे यह अपने CI/CD पाइपलाइनों में Jenkins का उपयोग करने वाले संगठनों के लिए विशेष रूप से खतरनाक हो जाता है। 🔍 भेद्यता विवरण मूल कारण
यह भेद्यता org.kohsuke.args4j.CmdLineParser वर्ग में expandAtFiles() फ़ंक्शन से उत्पन्न होती है। CLI तर्कों को पार्स करते समय, यदि पार्सर को '@' प्रतीक के बाद फ़ाइल पथ मिलता है, तो वह उस फ़ाइल की सामग्री को पढ़ता और विस्तारित करता है। हमला वेक्टर
हमलावर बिना प्रमाणीकरण के Jenkins CLI इंटरफ़ेस का उपयोग करके इस भेद्यता का शोषण कर सकते हैं: bash
java -jar jenkins-cli.jar -s http://target-jenkins-server:8080/ help @/etc/passwd
तकनीकी विश्लेषण फ़ाइल पढ़ने की सीमाएँ
प्रमाणीकरण के बिना: फ़ाइल की केवल पहली 3 पंक्तियाँ पढ़ी जा सकती हैं (CLI कमांड पर निर्भर करता है)
'Overall/Read' अनुमति के साथ: पूरी फ़ाइल सामग्री पढ़ी जा सकती है
बाइनरी फ़ाइलें: निकाली जा सकती हैं लेकिन एन्कोडिंग समस्याओं से प्रभावित हो सकती हैं (Windows पर Windows-1252 Linux पर UTF-8 से बेहतर परिणाम देता है)
हमला सतह विस्तार
एक बार फ़ाइल पढ़ने की क्षमता प्राप्त होने पर, हमलावर अधिक गंभीर हमलों तक बढ़ सकते हैं:
क्रेडेंशियल निकालें:
/var/jenkins_home/credentials.xml को एन्क्रिप्टेड क्रेडेंशियल्स के लिए पढ़ें
/var/jenkins_home/secrets/master.key और hudson.util.Secret को डिक्रिप्शन के लिए पढ़ें
Jenkins स्क्रिप्ट कंसोल का उपयोग करके क्रेडेंशियल्स को डिक्रिप्ट करें: println(Hudson.util.Secret.fromString("{XXX=}").getPlainText())
"Remember-me" कुकीज़ बनाएं:
प्रमाणीकरण कुकीज़ बनाकर प्रशासनिक पहुँच प्राप्त करें
मनमाना कोड निष्पादित करें:
Resource Root URL, XSS, या CSRF वैक्टर के माध्यम से RCE प्राप्त करें
💥 प्रभाव तत्काल प्रभाव
गोपनीयता: Jenkins सर्वर पर सभी फ़ाइलों का पूर्ण प्रकटीकरण (स्रोत कोड, क्रेडेंशियल्स, SSH कुंजियाँ, टोकन)
अखंडता: हमलावर बिल्ड, पाइपलाइन और कॉन्फ़िगरेशन को संशोधित कर सकते हैं
उपलब्धता: सेवा अस्वीकार या रैनसमवेयर तैनाती की संभावना
वास्तविक दुनिया में शोषण
इस भेद्यता का सक्रिय रूप से जंगल में शोषण किया गया है:
CISA ज्ञात शोषित भेद्यताओं (KEV) कैटलॉग में जोड़ा गया
रैनसमवेयर गिरोहों (RansomEXX) द्वारा बुनियादी ढाँचे से समझौता करने के लिए उपयोग किया गया
खतरा अभिनेता IntelBroker द्वारा GitHub रिपॉजिटरी चुराने और IT सेवा प्रदाताओं से समझौता करने के लिए शोषित किया गया
🔧 पहचान समझौते के संकेत
सफल शोषण प्रयासों को इसके माध्यम से पहचाना जा सकता है:
HTTP अनुरोध पैटर्न: text
POST /cli?remoting=false HTTP/1.1 Content-type: application/octet-stream [binary payload containing @/path/to/file]
विशिष्ट पेलोड उदाहरण:
@/etc/passwd
@/var/jenkins_home/secrets/initialAdminPassword
@/etc/os-release
Splunk पहचान क्वेरी text
index=web uri="/cli?remoting=false" http_method=POST http_status=200
🛡️ शमन आधिकारिक फिक्स
पैच किए गए संस्करणों में अपग्रेड करें:
Jenkins ≥ 2.442
Jenkins LTS ≥ 2.426.3
अस्थायी शमन
यदि तत्काल पैचिंग संभव नहीं है:
Jenkins CLI पहुँच अक्षम करें
Java सिस्टम प्रॉपर्टी सेट करें: hudson.cli.CLICommand.allowAtSyntax=false
Jenkins प्रशासन इंटरफ़ेस तक नेटवर्क पहुँच प्रतिबंधित करें
@/ पैटर्न वाले अनुरोधों को ब्लॉक करने के लिए WAF नियम लागू करें
🔗 संदर्भ
NVD प्रविष्टि
Jenkins सुरक्षा सलाहकार
CISA KEV कैटलॉग
Splunk अनुसंधान
Tenable CVE पृष्ठ
📦 निर्माण और चलाना
bash
go build -o jenkins-cve-2024-23897 exploit.go
./jenkins-cve-2024-23897 http://target-jenkins:8080 /etc/passwd
go run exploit.go http://target-jenkins:8080 /etc/passwd
🎯 उपयोग उदाहरण bash
./jenkins-cve-2024-23897 http://jenkins.internal:8080 /etc/passwd ./jenkins-cve-2024-23897 http://localhost:8080 /var/jenkins_home/secrets/initialAdminPassword
./jenkins-cve-2024-23897 http://win-jenkins:8080 C:/Windows/win.ini
⚙️ यह कैसे काम करता है
सत्र आरंभीकरण: एक अद्वितीय 20-बाइट सत्र आईडी उत्पन्न करता है
पेलोड निर्माण: help @/path/to/file संरचना के साथ बाइनरी पेलोड बनाता है
अपलोड चरण: पेलोड को Jenkins CLI एंडपॉइंट पर भेजता है
डाउनलोड चरण: प्रतिक्रिया से फ़ाइल सामग्री प्राप्त करता है
आउटपुट: फ़ाइल सामग्री या त्रुटि संदेश प्रदर्शित करता है
📊 विशेषताएँ
शुद्ध Go कार्यान्वयन - कोई बाहरी निर्भरता नहीं
क्रॉस-प्लेटफ़ॉर्म - Windows, Linux, macOS पर काम करता है
कॉन्फ़िगरेबल टाइमआउट - धीमी नेटवर्क के लिए समायोज्य
स्वच्छ त्रुटि हैंडलिंग - विस्तृत त्रुटि संदेश
बाइनरी-सुरक्षित - टेक्स्ट और बाइनरी दोनों फ़ाइलों को संभालता है
⚠️ महत्वपूर्ण नोट्स
केवल शैक्षिक उद्देश्य - केवल उन सिस्टम पर उपयोग करें जिनके आप मालिक हैं या परीक्षण करने की अनुमति है
अनधिकृत पढ़ना - प्रमाणीकरण के बिना, केवल पहली ~3 पंक्तियाँ पढ़ने योग्य हैं
बाइनरी फ़ाइलें - एन्कोडिंग समस्याओं से प्रभावित हो सकती हैं (बेहतर बाइनरी निष्कर्षण के लिए Windows लक्ष्य का उपयोग करें)