Gitea Security
Gitea क्या है
Gitea एक स्वयं-होस्टेड समुदाय प्रबंधित हल्के कोड होस्टिंग समाधान है जो Go में लिखा गया है.
मूल जानकारी
pageBasic Gitea Informationप्रयोगशाला
स्थानीय रूप से Gitea इंस्टेंस चलाने के लिए आप बस एक डॉकर कंटेनर चला सकते हैं:
पोर्ट 3000 से कनेक्ट करके वेब पेज तक पहुँच सकते हैं।
आप इसे कुबेरनेटेस के साथ भी चला सकते हैं:
अप्रमाणित सूचीबद्धता
सार्वजनिक रेपो: http://localhost:3000/explore/repos
पंजीकृत उपयोगकर्ता: http://localhost:3000/explore/users
पंजीकृत संगठन: http://localhost:3000/explore/organizations
ध्यान दें कि डिफ़ॉल्ट रूप से Gitea नए उपयोगकर्ताओं को पंजीकरण की अनुमति देता है। इससे नए उपयोगकर्ताओं को अन्य संगठनों/उपयोगकर्ताओं के रेपो पर विशेष रूप से दिलचस्प पहुँच नहीं मिलेगी, लेकिन एक लॉग इन उपयोगकर्ता अधिक रेपो या संगठनों को देख सकता है।
आंतरिक शोषण
इस परिदृश्य के लिए हम मान रहे हैं कि आपने किसी github खाते तक कुछ पहुँच प्राप्त की है।
उपयोगकर्ता क्रेडेंशियल/वेब कुकी के साथ
यदि आपके पास किसी संगठन के अंदर एक उपयोगकर्ता के लिए क्रेडेंशियल पहले से हैं (या आपने एक सत्र कुकी चुरा ली है) तो आप बस लॉग इन कर सकते हैं और जांच सकते हैं कि आपके पास किन रेपो पर कौन सी अनुमतियाँ हैं, आप किन टीमों में हैं, अन्य उपयोगकर्ताओं की सूची बना सकते हैं, और रेपो कैसे सुरक्षित हैं।
ध्यान दें कि 2FA का उपयोग किया जा सकता है इसलिए आप इस जानकारी तक केवल तभी पहुँच सकते हैं जब आप उस जांच को भी पास कर सकते हैं।
ध्यान दें कि यदि आप i_like_gitea
कुकी चुरा लेते हैं (वर्तमान में SameSite: Lax के साथ कॉन्फ़िगर किया गया) तो आप पूरी तरह से उपयोगकर्ता का अनुकरण कर सकते हैं बिना क्रेडेंशियल या 2FA की आवश्यकता के।
उपयोगकर्ता SSH कुंजी के साथ
Gitea उपयोगकर्ताओं को SSH कुंजी सेट करने की अनुमति देता है जिसका उपयोग उनकी ओर से कोड डिप्लॉय करने के लिए प्रमाणीकरण विधि के रूप में किया जाएगा (कोई 2FA लागू नहीं होता है)।
इस कुंजी के साथ आप परिवर्तन कर सकते हैं रेपो में जहाँ उपयोगकर्ता के कुछ विशेषाधिकार हैं, हालांकि आप इसका उपयोग gitea api तक पहुँचने के लिए नहीं कर सकते हैं ताकि पर्यावरण का सूचीबद्धता कर सकें। हालांकि, आप स्थानीय सेटिंग्स का सूचीबद्धता कर सकते हैं ताकि रेपो और उपयोगकर्ता के बारे में जानकारी प्राप्त कर सकें जिस तक आपकी पहुँच है:
यदि उपयोगकर्ता ने अपना उपयोगकर्ता नाम अपने gitea उपयोगकर्ता नाम के रूप में सेट किया है, तो आप उसके खाते में सेट की गई सार्वजनिक कुंजियों को https://github.com/<gitea_username>.keys में एक्सेस कर सकते हैं, आप इसे जांच सकते हैं कि क्या आपको मिली प्राइवेट कुंजी उपयोग की जा सकती है।
SSH कुंजियाँ भी deploy keys के रूप में रिपॉजिटरीज में सेट की जा सकती हैं। इस कुंजी तक पहुँच वाला कोई भी व्यक्ति रिपॉजिटरी से प्रोजेक्ट्स लॉन्च करने में सक्षम होगा। आमतौर पर विभिन्न deploy keys वाले सर्वर में स्थानीय फ़ाइल ~/.ssh/config
आपको जानकारी देगी कि कौन सी कुंजी संबंधित है।
GPG कुंजियाँ
जैसा कि यहाँ समझाया गया है, कभी-कभी कमिट्स को साइन करने की आवश्यकता होती है या आप पकड़े जा सकते हैं।
स्थानीय रूप से जांचें कि क्या वर्तमान उपयोगकर्ता के पास कोई कुंजी है:
यूजर टोकन के साथ
यूजर टोकन की मूल जानकारी के लिए यहाँ देखें.
यूजर टोकन का इस्तेमाल पासवर्ड की जगह Gitea सर्वर से API के माध्यम से प्रमाणित करने के लिए किया जा सकता है। इससे यूजर के ऊपर पूरी पहुँच होगी।
Oauth एप्लिकेशन के साथ
Gitea Oauth एप्लिकेशन की मूल जानकारी के लिए यहाँ देखें.
एक हमलावर दुर्भावनापूर्ण Oauth एप्लिकेशन बना सकता है ताकि उन यूजर्स के विशेषाधिकार प्राप्त डेटा/क्रियाओं तक पहुँच सके जो शायद फिशिंग अभियान के भाग के रूप में उन्हें स्वीकार करते हैं।
जैसा कि मूल जानकारी में बताया गया है, एप्लिकेशन के पास यूजर खाते पर पूरी पहुँच होगी।
ब्रांच प्रोटेक्शन बायपास
Github में हमारे पास github actions होते हैं जो डिफ़ॉल्ट रूप से राइट एक्सेस के साथ एक टोकन प्राप्त करते हैं जिसका इस्तेमाल ब्रांच प्रोटेक्शन को बायपास करने के लिए किया जा सकता है। इस मामले में ऐसा नहीं होता, इसलिए बायपास अधिक सीमित होते हैं। लेकिन चलिए देखते हैं क्या किया जा सकता है:
पुश सक्षम करें: अगर कोई भी राइट एक्सेस वाला व्यक्ति ब्रांच में पुश कर सकता है, तो बस उसमें पुश करें।
व्हाइटलिस्ट रेस्ट्रिक्टेड पुश: इसी तरह, अगर आप इस सूची का हिस्सा हैं तो ब्रांच में पुश करें।
मर्ज व्हाइटलिस्ट सक्षम करें: अगर कोई मर्ज व्हाइटलिस्ट है, तो आपको उसके अंदर होना चाहिए।
आवश्यकता है कि अनुमोदन 0 से अधिक हो: फिर... आपको किसी अन्य यूजर को समझौता करना होगा।
व्हाइटलिस्टेड को अनुमोदन सीमित करें: अगर केवल व्हाइटलिस्टेड यूजर्स ही अनुमोदन कर सकते हैं... तो आपको उस सूची में शामिल किसी अन्य यूजर को समझौता करना होगा।
स्टेल अनुमोदनों को खारिज करें: अगर नए कमिट्स के साथ अनुमोदन हटाए नहीं जाते हैं, तो आप पहले से अनुमोदित PR को हाईजैक करके अपना कोड इंजेक्ट कर सकते हैं और PR को मर्ज कर सकते हैं।
ध्यान दें कि अगर आप एक org/repo एडमिन हैं तो आप सुरक्षा को बायपास कर सकते हैं।
वेबहुक्स का अनुक्रमण
वेबहुक्स कुछ विशेष gitea जानकारी को कुछ स्थानों पर भेजने में सक्षम होते हैं। आप उस संचार का शोषण कर सकते हैं। हालांकि, आमतौर पर एक सीक्रेट सेट किया जाता है जिसे आप प्राप्त नहीं कर सकते हैं जो वेबहुक में बाहरी यूजर्स को रोकेगा जो वेबहुक के URL को जानते हैं लेकिन सीक्रेट नहीं, उस वेबहुक का शोषण करने से। लेकिन कुछ मौकों पर, लोग सीक्रेट को उसके स्थान पर सेट करने के बजाय, उसे URL में एक पैरामीटर के रूप में सेट करते हैं, इसलिए URLs की जाँच करने से आपको सीक्रेट्स खोजने और अन्य स्थानों को आगे शोषण करने की अनुमति मिल सकती है।
वेबहुक्स को रेपो और ऑर्ग स्तर पर सेट किया जा सकता है।
पोस्ट एक्सप्लॉइटेशन
सर्वर के अंदर
अगर आप किसी तरह से उस सर्वर के अंदर पहुँच गए हैं जहाँ gitea चल रहा है तो आपको gitea कॉन्फ़िगरेशन फ़ाइल की खोज करनी चाहिए। डिफ़ॉल्ट रूप से यह /data/gitea/conf/app.ini
में स्थित है।
इस फ़ाइल में आप कीज़ और पासवर्ड्स पा सकते हैं।
gitea पथ में (डिफ़ॉल्ट: /data/gitea) आपको और भी रोचक जानकारी मिल सकती है जैसे:
sqlite डीबी: अगर gitea किसी बाहरी डीबी का इस्तेमाल नहीं कर रहा है तो वह sqlite डीबी का इस्तेमाल करेगा।
सेशन्स फोल्डर के अंदर के सेशन्स:
cat sessions/*/*/*
चलाने से आप लॉग इन किए गए यूजर्स के यूजरनेम देख सकते हैं (gitea सेशन्स को डीबी के अंदर भी सेव कर सकता है)।jwt फोल्डर के अंदर की jwt प्राइवेट की
इस फोल्डर में और भी संवेदनशील जानकारी मिल सकती है।
अगर आप सर्वर के अंदर हैं तो आप gitea
बाइनरी का इस्तेमाल भी कर सकते हैं जानकारी को एक्सेस/मॉडिफाई करने के लिए:
gitea dump
gitea का डंप लेगा और एक .zip फ़ाइल जनरेट करेगा।gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET
इंगित किए गए प्रकार का एक टोकन जनरेट करेगा (स्थायित्व)।gitea admin user change-password --username admin --password newpassword
पासवर्ड बदलें।gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token
नया एडमिन यूजर बनाएं और एक एक्सेस टोकन प्राप्त करें।
Last updated