
CVE-2024-27198 & CVE-2024-27199 PoC - RCE, एडमिन खाता निर्माण, उपयोगकर्ता एन्यूमरेशन, सर्वर जानकारी
CVE-2024-27198 और CVE-2024-27199 का शोषण
RCity एक Python स्क्रिप्ट है जो एक असुरक्षित (vulnerable) TeamCity सर्वर के साथ इंटरैक्ट करती है। यह CVE डोमेन पर 403 को बायपास करते हुए, अनधिकृत (unauthorised) एडमिन अकाउंट निर्माण की सुविधा प्रदान करता है। साथ ही Debug/Processes रूट के माध्यम से RCE प्राप्त करता है।
स्क्रिप्ट का उपयोग करने के लिए, आपको लक्षित TeamCity सर्वर URL को कमांड-लाइन तर्क के रूप में -t या --target विकल्प के साथ प्रदान करना होगा:
python3 RCity.py -t http://teamcity.com:8111
आप -v या --verbose विकल्प के साथ आउटपुट की विस्तृत जानकारी (verbosity) बढ़ा सकते हैं:
python3 RCity.py -t http://teamcity.com:8111 --verbose
आप -c या --command विकल्प के माध्यम से सीधे एक शॉट कमांड भेज सकते हैं, यदि आप इंटरैक्टिव शेल चाहते हैं तो इस विकल्प का उपयोग न करें। यह रिवर्स शेल के साथ अनुकूल नहीं है, क्योंकि cmd भेजे जाने के बाद कनेक्शन बंद हो जाता है:
python3 RCity.py -t http://teamcity.com:8111 -c id
आप -s या --stealth विकल्प का उपयोग करके सुनिश्चित कर सकते हैं कि TeamCity सर्वर पर कोई POST अनुरोध नहीं भेजा जाए।
python3 RCity.py -t http://teamcity.com:8111 -s
RCE फ़ंक्शन को अक्षम करता है - बाकी सब कुछ समान रहता है
python3 RCity.py -t http://teamcity.com:8111 --no-rce
उपयोगकर्ता सूची एकत्रित होने से रोकता है, बड़ी उपयोगकर्ता सूचियों पर समय लेने वाला हो सकता है। इसके साथ सीधे RCE पर जाएं!
python3 RCity.py -t http://teamcity.com:8111 --no-enum
एडमिन अकाउंट निर्माण (Admin Account Creation)
रिमोट कोड एक्ज़ीक्यूशन (Remote Code Execution)
प्राधिकरण टोकन उत्पन्न करना (Generating Authorisation Tokens)
उपयोगकर्ताओं की गणना करना (Enumerating Users)
उपयोगकर्ताओं के सभी निजी Auth टोकन एकत्रित करना (Gathering all Private Auth Tokens of Users)
सर्वर विवरण एकत्रित करना (Gathering Server Details)



यहाँ मैं इस परियोजना में उपयोग किए गए फ़ंक्शनों के बारे में बताऊंगा, ताकि आपको इस एक्सप्लॉइट और इससे जुड़ी कमजोरियों की बेहतर समझ मिल सके।
इस कमजोरी की प्रकृति CVE-2024-27198 और 99 दोनों के बीच संबंधित है, क्योंकि यह समस्या JetBrains TeamCity सर्वरों के भीतर REST API रूट्स के लिए एक ही प्रमाणीकरण बायपास (authentication bypass) से उत्पन्न होती है। हालाँकि, इस कमजोरी का प्रभाव वहीं है जहाँ यह बदलती है, और दिलचस्प हो जाती है... CVE-2024-27198 कागज पर असली भारी हिटर है, अपने खुलासा किए गए RCE प्रभाव के कारण, यह /app/rest/debug/processes एंडपॉइंट का लाभ उठाता है, केवल एक Auth टोकन के माध्यम से इस एंडपॉइंट पर आवश्यक अनुरोध करने की अनुमति के साथ। इस एंडपॉइंट पर यह कॉल Unix और Windows होस्ट के बीच भिन्न होती है, हालाँकि समान रूप से हेरफेर की जाती है, एकमात्र अंतर मूल शेल (native shell) का है जो एक अनुरोध के लिए उकसाया जाता है।
Linux - processes?exePath=/bin/sh¶ms=-c¶ms={yourRCE_HTMLEncoded}
Windows - processes?exePath=cmd.exe¶ms=/c¶ms={yourRCE_HTMLEncoded}
अब, जैसा कि पहले उल्लेख किया गया है - यह प्रमाणीकरण के बिना संभव नहीं है, सुरक्षित होना चाहिए... है ना? यहीं पर Auth बायपास आता है।
TeamCity बिल्ड की नीति को बायपास करने से सर्वर के खिलाफ अनुरोध करने और हमारे Auth टोकन को वहाँ डालने का अवसर खुल जाता है, बिना तकनीकी रूप से हमारे अपने खाते की आवश्यकता के।
बायपास स्वयं, REST रूट्स के लिए एक वैकल्पिक पथ बनाना है, जो बिना अधिक विवरण में जाए, उस क्लास की सामग्री के नियंत्रण की आवश्यकता रखता है जिसका काम अनुरोधों को संभालना है, विशेष रूप से उन्हें जो 302 (रीडायरेक्ट) नहीं हैं, जो तब हमें अपने URL में 3 आवश्यक भागों को जोड़कर इसे नियंत्रित करने की अनुमति देता है।
एक अनप्रमाणित (unauthenticated) एंडपॉइंट जो 302 ट्रिगर नहीं करेगा, हमारे मामले में /hax
API रूट्स को क्वेरी करने के लिए jsp नामक एक URL क्वेरी पैरामीटर, उदाहरण के लिए, users पथ ?jsp=/app/rest/users
एक मनमाना URI पथ जो .jsp के साथ समाप्त होता है। यह एक HTTP पथ पैरामीटर खंड ;.jsp जोड़कर प्राप्त किया जा सकता है
जिसका अर्थ है कि users एंडपॉइंट पर अनधिकृत अनुरोध करने के लिए अंतिम पेलोड है: /hax?jsp=/app/rest/users;.jsp
अब हम users एंडपॉइंट के खिलाफ अनुरोध कर सकते हैं और अपने स्वयं के उपयोगकर्ता जोड़ सकते हैं, यहाँ तक कि व्यवस्थापक (Administrators) भी!
हालाँकि, RCE पर जाने से पहले, हमें एक Auth टोकन चाहिए, जो उनके REST API के खिलाफ हमारे RCE अनुरोधों के लिए वाहक (bearer) के रूप में हो। अब कोई समस्या नहीं क्योंकि हमारे पास हमारा बायपास है, हम एक बना लेंगे!
टोकन एंडपॉइंट पिछले उदाहरण के समान पथ वृक्ष का अनुसरण कर रहा था, यह /app/rest/users/id:{user_id}/tokens/{token_name} पर पाया जा सकता है। तो आइए प्रमाणीकरण बायपास करने और टोकन बनाने के लिए एक और पेलोड तैयार करें!
(हम इसके लिए अपना स्वयं का टोकन नाम प्रदान करते हैं, इस स्क्रिप्ट के लिए यह अल्फ़ान्यूमेरिक ascii वर्णों का एक यादृच्छिक जनरेशन है)।
/hax?jsp=/app/rest/users/id:{user_id}/tokens/{token_name};.jsp
अपने नए बनाए गए उपयोगकर्ता में अपना टोकन जोड़ने के लिए अपना POST अनुरोध करने के बाद, हम अब /app/rest/debug/processes रूट के खिलाफ अनुरोध करना शुरू कर सकते हैं!
हमारे RCE पेलोड के निर्माण में कुछ खास नहीं है, बस अपने पेलोड को params तर्क में HTML एनकोड करें!
हैप्पी हैकिंग!
https://nvd.nist.gov/vuln/detail/CVE-2024-27198
https://github.com/W01fh4cker/CVE-2024-27198-RCE
यह स्क्रिप्ट केवल शैक्षिक उद्देश्यों के लिए है। इसका जिम्मेदारी से उपयोग करें और केवल उन्हीं सिस्टम पर करें जिन तक आपके पास पहुँच की अनुमति है।