
CVE-2020-13277 लैब: GitLab लॉजिक भेद्यता - किसी भी उपयोगकर्ता द्वारा निजी रिपॉजिटरी तक अनधिकृत पहुँच
CVE-2020-13277 प्रशिक्षण मैदान: Gitlab तार्किक भेद्यता - किसी भी उपयोगकर्ता द्वारा निजी रिपॉजिटरी तक अनधिकृत पहुँच
CVE-2020-13277
├── README.md ............... [यह README विवरण]
├── imgs .................... [README विवरण में सहायक चित्र]
├── gitlab .................. [Gitlab कंटेनर का माउंट निर्देशिका]
│ ├── Dockerfile .......... [Gitlab का Docker निर्माण फ़ाइल]
│ ├── config .............. [Gitlab कॉन्फ़िग माउंट निर्देशिका]
│ ├── data ................ [Gitlab डेटा माउंट निर्देशिका]
│ ├── logs ................ [Gitlab लॉग माउंट निर्देशिका]
│ ├── keys ................ [Gitlab क्रैक लाइसेंस भंडारण निर्देशिका]
│ └── runner .............. [Runner कंटेनर का माउंट निर्देशिका]
├── license ................. [क्रैक लाइसेंस कंटेनर निर्माण निर्देशिका]
│ ├── Dockerfile .......... [लाइसेंस का Docker निर्माण फ़ाइल]
│ └── license.rb .......... [क्रैक लाइसेंस उत्पन्न करने के लिए Ruby स्क्रिप्ट]
├── docker-compose.yml ...... [Docker का निर्माण कॉन्फ़िग]
├── keygen.ps1 .............. [Windows: एक-क्लिक क्रैक लाइसेंस उत्पन्न करें]
├── keygen.sh ............... [Linux: एक-क्लिक क्रैक लाइसेंस उत्पन्न करें]
├── run.ps1 ................. [Windows: एक-क्लिक Gitlab प्रशिक्षण मैदान चलाएँ]
├── run.sh .................. [Linux: एक-क्लिक Gitlab प्रशिक्षण मैदान चलाएँ]
├── register.ps1 ............ [Windows: एक-क्लिक Runner पंजीकृत करें]
├── register.sh ............. [Linux: एक-क्लिक Runner पंजीकृत करें]
├── stop.ps1 ................ [Windows: एक-क्लिक Gitlab प्रशिक्षण मैदान रोकें]
└── stop.sh ................. [Linux: एक-क्लिक Gitlab प्रशिक्षण मैदान रोकें]
इस भेद्यता का मुख्य उपयोग Mirror Repository - रिपॉजिटरी की मिरर सिंक बैकअप सुविधा पर आधारित है।
इसमें Mirror की सिंक दिशा दो प्रकार की होती है:
यह भेद्यता Pull दिशा के Mirror Repository का उपयोग करती है
जान लें कि Gitlab CE (समुदाय मुफ्त संस्करण) और EE (उद्यम भुगतान संस्करण) दो संस्करणों में विभाजित है, और Gitlab आधिकारिक तौर पर दावा करता है कि यह भेद्यता CE और EE दोनों के निम्नलिखित संस्करणों को प्रभावित करती है:
>=10.6, <12.9.10>=12.10, <12.10.11>=13.0, <13.0.6लेकिन इसका मतलब यह नहीं है कि इन संस्करणों के Gitlab Docker Image सभी प्रशिक्षण मैदान के लिए उपयोग किए जा सकते हैं, इसका कारण है:
दूसरे शब्दों में, Docker का उपयोग करके प्रशिक्षण मैदान बनाने के लिए, केवल Gitlab-EE संस्करण चुनना होगा और इसे क्रैक करना होगा (अमीर लोग लाइसेंस खरीदना भी चुन सकते हैं) ताकि Mirror Repository - Pull सुविधा सक्रिय हो सके।
लेकिन Gitlab-EE को क्रैक करने के बाद भी, चाहे 10.x, 12.x या 13.x, जब Mirror Repository - Pull का URL स्थानीय पथ शामिल करता है, तो त्रुटि Import url is blocked: Requests to localhost are not allowed दिखाई देगी।
जबकि Admin area => Settings => Network => Outbound requests सेट करके Allow requests to the local network from hooks and services सक्षम करने के बाद स्थानीय URL कॉन्फ़िगर किया जा सकता है, लेकिन मिरर सिंक करते समय त्रुटि 2:Fetching remote upstream failed: fatal: unable to access http://127.0.0.1/xxxx/: The requested URL returned error: 301 आएगी। दूसरे शब्दों में केवल Pull Remote Repository उपलब्ध है।
हालाँकि, यद्यपि 12.x और 13.x स्थानीय URL के निर्धारण में बहुत सख्त हैं, 10.x संस्करण में एक उपाय है: Pull URL कॉन्फ़िगर करते समय, केवल स्थानीय रूप से सेट किए गए DNS सेवा नाम का उपयोग करके बाईपास किया जा सकता है।
उपरोक्त से निष्कर्ष निकलता है कि अंततः केवल gitlab-ee:10.6.0-ee.0 संस्करण का Docker Image इस प्रशिक्षण मैदान के लिए उपयोग किया जा सकता है।
वास्तव में पूर्व विवरण से यह भी पता चलता है कि इस भेद्यता के उपयोग की शर्तें बहुत कड़ी हैं, मूलतः गरीब लोगों को इस भेद्यता से प्रभावित होने की संभावना नहीं है।
./keygen.sh या ./keygen.ps1./run.sh या ./run.ps1पहले क्रैक कुंजी युग्म उत्पन्न करते समय, सार्वजनिक कुंजी पहले ही Gitlab कंटेनर बैकग्राउंड में लिखी जा चुकी है, अब निजी कुंजी को फ्रंटएंड के माध्यम से Gitlab पर अपलोड करके क्रैक पूरा करना आवश्यक है:
./gitlab/keys/ निर्देशिका में उत्पन्न होता है, उसके अंतर्गत .gitlab-license की सामग्री (निजी कुंजी) कॉपी करेंEnter license key चुनें और निजी कुंजी चिपकाएँ, फिर Upload license बटन दबाकर क्रैक पूरा करेंइस प्रकार Mirror Repository - Pull सुविधा सक्रिय हुई

Outbound requests ढूँढें और Allow requests to the local network from hooks and services चेक करके सहेजेंइस प्रकार Mirror Repository - Pull अब स्थानीय Repository खींचने का समर्थन करता है

./register.sh $TOKEN या ./register.ps1 $TOKENइस प्रकार सभी Repository इस Runner का उपयोग करके CI स्क्रिप्ट (Pipeline Jobs) निष्पादित कर सकते हैं
