Gitea सुरक्षा

Reading time: 8 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

Gitea क्या है

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

बुनियादी जानकारी

Basic Gitea Information

प्रयोगशाला

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

bash
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 का उपयोग किया जा सकता है इसलिए आप केवल तभी इस जानकारी तक पहुंच सकते हैं यदि आप उस चेक को भी पास कर सकते हैं

note

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

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

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

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

bash
# 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 कुंजी

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

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

shell
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

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

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

Post Exploitation

Inside the server

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

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

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

  • sqlite DB: यदि gitea एक बाहरी db का उपयोग नहीं कर रहा है, तो यह एक sqlite db का उपयोग करेगा।
  • सत्र सत्र फ़ोल्डर के अंदर: cat sessions/*/*/* चलाकर आप लॉग इन किए गए उपयोगकर्ताओं के उपयोगकर्ता नाम देख सकते हैं (gitea सत्रों को DB के अंदर भी सहेज सकता है)।
  • 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 नया प्रशासक उपयोगकर्ता बनाएँ और एक एक्सेस टोकन प्राप्त करें।

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें