Gitea Security

Support HackTricks

What is Gitea

Gitea एक स्व-होस्टेड समुदाय द्वारा प्रबंधित हल्का कोड होस्टिंग समाधान है जो Go में लिखा गया है।

Basic Information

Lab

स्थानीय रूप से Gitea उदाहरण चलाने के लिए आप बस एक डॉकर कंटेनर चला सकते हैं:

docker run -p 3000:3000 gitea/gitea

पोर्ट 3000 से कनेक्ट करें ताकि वेब पेज तक पहुंच सकें।

आप इसे कुबेरनेट्स के साथ भी चला सकते हैं:

helm repo add gitea-charts https://dl.gitea.io/charts/
helm install gitea gitea-charts/gitea

अनधिकृत गणना

ध्यान दें कि डिफ़ॉल्ट रूप से Gitea नए उपयोगकर्ताओं को पंजीकरण करने की अनुमति देता है। यह नए उपयोगकर्ताओं को अन्य संगठनों/उपयोगकर्ताओं के रिपॉजिटरी पर विशेष रूप से दिलचस्प पहुंच नहीं देगा, लेकिन एक लॉग इन उपयोगकर्ता अधिक रिपॉजिटरी या संगठनों को देखने में सक्षम हो सकता है

आंतरिक शोषण

इस परिदृश्य के लिए हम मान लेंगे कि आपने एक github खाते तक कुछ पहुंच प्राप्त की है।

उपयोगकर्ता क्रेडेंशियल्स/वेब कुकी के साथ

यदि आपके पास किसी संगठन के भीतर एक उपयोगकर्ता के लिए क्रेडेंशियल्स हैं (या आपने एक सत्र कुकी चुराई है) तो आप बस लॉगिन कर सकते हैं और देख सकते हैं कि आपके पास कौन सी अनुमतियाँ हैं, कौन से रिपॉजिटरी में, आप किन टीमों में हैं, अन्य उपयोगकर्ताओं की सूची, और रिपॉजिटरी कैसे सुरक्षित हैं।

ध्यान दें कि 2FA का उपयोग किया जा सकता है इसलिए आप केवल इस जानकारी तक पहुंच प्राप्त कर सकेंगे यदि आप उस चेक को भी पास कर सकते हैं

ध्यान दें कि यदि आप i_like_gitea कुकी चुराने में सफल होते हैं (वर्तमान में SameSite: Lax के साथ कॉन्फ़िगर की गई) तो आप बिना क्रेडेंशियल्स या 2FA की आवश्यकता के उपयोगकर्ता का पूरी तरह से अनुकरण कर सकते हैं

उपयोगकर्ता SSH कुंजी के साथ

Gitea उपयोगकर्ताओं को SSH कुंजी सेट करने की अनुमति देता है जो उनके पक्ष में कोड तैनात करने के लिए प्रमाणीकरण विधि के रूप में उपयोग की जाएगी (कोई 2FA लागू नहीं होता)।

इस कुंजी के साथ आप उन रिपॉजिटरी में परिवर्तन कर सकते हैं जहां उपयोगकर्ता के पास कुछ विशेषाधिकार हैं, हालाँकि आप इसका उपयोग gitea api तक पहुँचने के लिए नहीं कर सकते हैं ताकि वातावरण की गणना की जा सके। हालाँकि, आप स्थानीय सेटिंग्स की गणना कर सकते हैं ताकि उन रिपॉजिटरी और उपयोगकर्ता के बारे में जानकारी प्राप्त की जा सके जिन तक आपकी पहुँच है:

# Go to the the repository folder
# Get repo config and current user name and email
git config --list

यदि उपयोगकर्ता ने अपना उपयोगकर्ता नाम अपने gitea उपयोगकर्ता नाम के रूप में कॉन्फ़िगर किया है, तो आप उसके खाते में सेट किए गए सार्वजनिक कुंजियों को https://github.com/<gitea_username>.keys पर एक्सेस कर सकते हैं, आप यह पुष्टि करने के लिए इसे चेक कर सकते हैं कि जो निजी कुंजी आपने पाई है वह उपयोग की जा सकती है।

SSH कुंजियाँ को डिप्लॉय कुंजियों के रूप में रिपॉजिटरी में भी सेट किया जा सकता है। इस कुंजी तक पहुँच रखने वाला कोई भी व्यक्ति एक रिपॉजिटरी से प्रोजेक्ट लॉन्च कर सकेगा। आमतौर पर, विभिन्न डिप्लॉय कुंजियों के साथ एक सर्वर में स्थानीय फ़ाइल ~/.ssh/config आपको कुंजी से संबंधित जानकारी देगी।

GPG कुंजियाँ

जैसा कि यहाँ समझाया गया है, कभी-कभी कमिट्स पर हस्ताक्षर करना आवश्यक होता है या आप खोजे जा सकते हैं।

स्थानीय रूप से चेक करें कि क्या वर्तमान उपयोगकर्ता के पास कोई कुंजी है:

gpg --list-secret-keys --keyid-format=long

With User Token

यूजर टोकन के बारे में बुनियादी जानकारी के लिए देखें

एक यूजर टोकन को पासवर्ड के बजाय Gitea सर्वर के खिलाफ प्रमाणित करने के लिए उपयोग किया जा सकता है API के माध्यम से। इसके पास यूजर पर पूर्ण पहुंच होगी।

With Oauth Application

Gitea Oauth एप्लिकेशन के बारे में बुनियादी जानकारी के लिए देखें

एक हमलावर एक दुष्ट Oauth एप्लिकेशन बना सकता है ताकि उन यूजर्स के विशेष डेटा/क्रियाओं तक पहुंच प्राप्त की जा सके जो संभवतः उन्हें फ़िशिंग अभियान के हिस्से के रूप में स्वीकार करते हैं।

बुनियादी जानकारी में समझाया गया है कि एप्लिकेशन के पास यूजर खाते पर पूर्ण पहुंच होगी।

Branch Protection Bypass

Github में हमारे पास github actions हैं जो डिफ़ॉल्ट रूप से लेखन पहुंच के साथ एक टोकन प्राप्त करते हैं जो ब्रांच सुरक्षा को बायपास करने के लिए उपयोग किया जा सकता है। इस मामले में वह मौजूद नहीं है, इसलिए बायपास अधिक सीमित हैं। लेकिन चलिए देखते हैं कि क्या किया जा सकता है:

  • पुश सक्षम करें: यदि किसी के पास लिखने की पहुंच है तो वह ब्रांच पर पुश कर सकता है, बस इसे पुश करें।

  • प्रतिबंधित पुश के लिए व्हाइटलिस्ट: इसी तरह, यदि आप इस सूची का हिस्सा हैं तो ब्रांच पर पुश करें।

  • मर्ज व्हाइटलिस्ट सक्षम करें: यदि एक मर्ज व्हाइटलिस्ट है, तो आपको इसके अंदर होना चाहिए।

  • अनुमोदनों की आवश्यकता 0 से अधिक है: फिर... आपको एक अन्य उपयोगकर्ता से समझौता करना होगा।

  • व्हाइटलिस्टेड के लिए अनुमोदनों को प्रतिबंधित करें: यदि केवल व्हाइटलिस्टेड उपयोगकर्ता अनुमोदित कर सकते हैं... तो आपको उस सूची में एक अन्य उपयोगकर्ता से समझौता करना होगा।

  • पुराने अनुमोदनों को खारिज करें: यदि नए कमिट के साथ अनुमोदन हटा नहीं दिए जाते हैं, तो आप पहले से अनुमोदित PR को हाईजैक कर सकते हैं ताकि अपने कोड को इंजेक्ट कर सकें और PR को मर्ज कर सकें।

ध्यान दें कि यदि आप एक संगठन/रेपो प्रशासक हैं तो आप सुरक्षा को बायपास कर सकते हैं।

Enumerate Webhooks

वेबहुक्स कुछ स्थानों पर विशिष्ट गीटिया जानकारी भेजने में सक्षम हैं। आप उस संचार का शोषण करने में सक्षम हो सकते हैं। हालांकि, आमतौर पर एक गुप्त सेट किया जाता है जिसे आप प्राप्त नहीं कर सकते हैं वेबहुक में जो बाहरी उपयोगकर्ताओं को उस वेबहुक का शोषण करने से रोकता है जो URL जानता है लेकिन गुप्त नहीं जानता। लेकिन कुछ अवसरों पर, लोग गुप्त को उसके स्थान पर सेट करने के बजाय, इसे URL में एक पैरामीटर के रूप में सेट करते हैं, इसलिए URLs की जांच करना आपको गुप्त जानकारियाँ और अन्य स्थान मिल सकते हैं जहाँ आप आगे शोषण कर सकते हैं।

वेबहुक्स को रेपो और संगठन स्तर पर सेट किया जा सकता है।

Post Exploitation

Inside the server

यदि आप किसी तरह उस सर्वर के अंदर पहुँच गए जहाँ गीटिया चल रहा है, तो आपको गीटिया कॉन्फ़िगरेशन फ़ाइल के लिए खोज करनी चाहिए। डिफ़ॉल्ट रूप से यह /data/gitea/conf/app.ini में स्थित है।

इस फ़ाइल में आप कुंजी और पासवर्ड पा सकते हैं।

गीटिया पथ (डिफ़ॉल्ट: /data/gitea) में आप भी दिलचस्प जानकारी पा सकते हैं जैसे:

  • sqlite DB: यदि गीटिया एक बाहरी DB का उपयोग नहीं कर रहा है तो यह एक sqlite DB का उपयोग करेगा।

  • सत्र सत्र फ़ोल्डर के अंदर: cat sessions/*/*/* चलाकर आप लॉग इन किए गए उपयोगकर्ताओं के उपयोगकर्ता नाम देख सकते हैं (गीटिया सत्रों को DB के अंदर भी सहेज सकता है)।

  • jwt निजी कुंजी jwt फ़ोल्डर के अंदर।

  • इस फ़ोल्डर में अधिक संवेदनशील जानकारी मिल सकती है।

यदि आप सर्वर के अंदर हैं तो आप जानकारी तक पहुँचने/संशोधित करने के लिए gitea बाइनरी का भी उपयोग कर सकते हैं:

  • gitea dump गीटिया को डंप करेगा और एक .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 नया प्रशासक उपयोगकर्ता बनाएँ और एक एक्सेस टोकन प्राप्त करें।

Support HackTricks

Last updated