Gitea Security

HackTricks को समर्थन दें

Gitea क्या है

Gitea एक self-hosted community managed lightweight code hosting समाधान है जो Go में लिखा गया है।

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

Basic Gitea Information

लैब

स्थानीय रूप से Gitea instance चलाने के लिए, आप बस एक docker container चला सकते हैं:

docker run -p 3000:3000 gitea/gitea

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

आप इसे kubernetes के साथ भी चला सकते हैं:

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

Unauthenticated Enumeration

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

Internal Exploitation

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

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

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

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

With User SSH Key

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 Keys

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

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

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

With User Token

User Tokens के बारे में जानकारी के लिए बुनियादी जानकारी देखें

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

With Oauth Application

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

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

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

Branch Protection Bypass

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

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

  • Whitelist Restricted Push: उसी तरह, यदि आप इस सूची का हिस्सा हैं तो शाखा में push करें।

  • Merge Whitelist सक्षम करें: यदि कोई merge whitelist है, तो आपको इसके अंदर होना चाहिए।

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

  • स्वीकृतियों को whitelisted तक सीमित करें: यदि केवल whitelisted उपयोगकर्ता ही स्वीकृति दे सकते हैं... तो आपको उस सूची के अंदर किसी अन्य उपयोगकर्ता से समझौता करना होगा।

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

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

Enumerate Webhooks

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

Webhooks को repo और org स्तर पर सेट किया जा सकता है

Post Exploitation

Inside the server

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

इस फ़ाइल में आप keys और passwords पा सकते हैं।

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

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

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

  • jwt फ़ोल्डर के अंदर jwt private key

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

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

  • gitea dump gitea को डंप करेगा और एक .zip फ़ाइल उत्पन्न करेगा।

  • gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET निर्दिष्ट प्रकार का token उत्पन्न करेगा (स्थायित्व)।

  • gitea admin user change-password --username admin --password newpassword पासवर्ड बदलें।

  • gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token नया admin उपयोगकर्ता बनाएं और एक access token प्राप्त करें।

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

Last updated