
गिटलैब आर्बिट्ररी फ़ाइल रीड एक्सप्लॉइट
यह स्क्रिप्ट GitLab Community Edition (CE) और Enterprise Edition (EE) के विरुद्ध रिमोट कोड निष्पादन प्रदान करती है। CVE एक arbitrary file read है जो आपको GitLab secrets.yaml फ़ाइल डाउनलोड करके Rails secret_key_base निकालने की अनुमति देता है। जो आगे चलकर, आपको अपने स्वयं के experimentation_subject_id कुकी पर हस्ताक्षर करके कोड निष्पादन प्राप्त करने में सक्षम बनाता है जिसे GitLab आंतरिक A/B परीक्षण के लिए उपयोग करता है। कुकी में एम्बेडेड पेलोड में एक deserialization भेद्यता होती है जो GitLab इंस्टेंस पर कोड चलाने की अनुमति देती है।
GitLab EE/CE 8.5 और बाद के संस्करणों में arbitrary file read मौजूद है। इसे 12.9.1, 12.8.8 और 12.7.8 में ठीक किया गया। हालांकि, RCE केवल संस्करण 12.4.0 और उससे ऊपर को प्रभावित करता है जब कमजोर experimentation_subject_id कुकी पेश की गई थी।
12.8.1 पर परीक्षण किया गया
मॉड्यूल का python 3.9 के साथ परीक्षण किया गया और इसके लिए निम्नलिखित निर्भरताओं की आवश्यकता है:
यदि आपने pipenv स्थापित किया है तो आप pipenv install और चलाकर pipenv वर्चुअल वातावरण में एक शेल प्राप्त कर सकते हैं।
pipenv shell $ ./cve_2020_10977.py --help
usage: cve_2020_10977.py [-h] --url URL -u USERNAME -p PASSWORD [--cmd CMD]
optional arguments:
-h, --help show this help message and exit
--url URL Target URL
-u USERNAME, --username USERNAME
Gitlab username
-p PASSWORD, --password PASSWORD
Gitlab password
--cmd CMD Command to execute
स्थानीय विकास या एक्सप्लॉइट के परीक्षण को आसान बनाने के लिए एक Makefile शामिल है। यह इस CVE के प्रति कमजोर GitLab का एक स्थानीय संस्करण तैयार करने के लिए docker और docker-compose पर निर्भर करता है।
make up
यह GitLab का एक स्थानीय इंस्टेंस और एक debian इंस्टेंस तैयार करेगा ताकि रिवर्स शेल का परीक्षण करना आसान हो जाए। GitLab इंस्टेंस आपके localhost पर पोर्ट 5580 पर उपलब्ध होगा। यह अतिरिक्त इमेज आपको एक ऐसा IP देती है जो डॉकर नेटवर्क के भीतर से पहुँच योग्य है। अपने localhost को डॉकर कंटेनर से पहुँच योग्य बनाना संभव है, लेकिन मेरी राय में प्रयास के लायक नहीं है, और मैं निश्चित रूप से --privileged का उपयोग करने का विज्ञापन नहीं करना चाहता।
RHOST debian इंस्टेंस से कनेक्शन आसानी से इस प्रकार किया जा सकता है:
make shell
यह आपको nc -lnvp 9000 के साथ रिवर्स शेल तैयार करने की अनुमति देता है।
जब यह हो जाता है, तो आप एक्सप्लॉइट का परीक्षण करने के लिए तैयार हैं। आप चला सकते हैं:
make exploit
एक्सप्लॉइट चलाने के लिए, यह RCE नहीं करेगा, बल्कि GitLab rails secret को प्रिंट करेगा।
make exploit-rce
यह ऊपर बताए गए RCE पेलोड के साथ इस CVE को चेन करेगा ताकि रिवर्स शेल प्राप्त हो सके।
हैकिंग की शुभकामनाएँ!