CircleCI Security
Last updated
Last updated
सीखें और AWS हैकिंग का अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) सीखें और GCP हैकिंग का अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
CircleCI एक निरंतर एकीकरण प्लेटफार्म है जहाँ आप टेम्पलेट्स परिभाषित कर सकते हैं जो यह दर्शाते हैं कि आप इसे कुछ कोड के साथ क्या करना चाहते हैं और कब करना चाहते हैं। इस तरह आप परीक्षण या डिप्लॉयमेंट को सीधे अपने रिपोजिटरी के मास्टर ब्रांच से स्वचालित कर सकते हैं, उदाहरण के लिए।
CircleCI अनुमतियाँ github और bitbucket से विरासत में लेता है जो उस खाते से संबंधित है जो लॉग इन करता है। मेरी परीक्षण में मैंने यह जांचा कि जब तक आपके पास github में रिपोजिटरी पर लिखने की अनुमतियाँ हैं, आप CircleCI में इसके प्रोजेक्ट सेटिंग्स को प्रबंधित करने में सक्षम होंगे (नए ssh कुंजी सेट करें, प्रोजेक्ट api कुंजी प्राप्त करें, नए CircleCI कॉन्फ़िग्स के साथ नए ब्रांच बनाएं...)।
हालांकि, आपको CircleCI प्रोजेक्ट में रिपोजिटरी को परिवर्तित करने के लिए एक रिपोजिटरी प्रशासक होना आवश्यक है।
दस्तावेज़ों के अनुसार कार्यप्रवाह के भीतर पर्यावरण चर में मान लोड करने के विभिन्न तरीके हैं।
CircleCI द्वारा चलाए जाने वाले प्रत्येक कंटेनर में हमेशा दस्तावेज़ में परिभाषित विशिष्ट पर्यावरण चर होंगे जैसे CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
या CIRCLE_USERNAME
।
आप उन्हें कमांड के भीतर स्पष्ट पाठ में घोषित कर सकते हैं:
आप उन्हें run environment के अंदर स्पष्ट पाठ में घोषित कर सकते हैं:
आप उन्हें build-job environment के अंदर स्पष्ट पाठ में घोषित कर सकते हैं:
आप उन्हें container के environment के अंदर स्पष्ट पाठ में घोषित कर सकते हैं:
ये सीक्रेट्स हैं जो केवल प्रोजेक्ट (किसी भी ब्रांच द्वारा) द्वारा एक्सेसिबल होंगे। आप इन्हें https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables में घोषित देख सकते हैं।
"इंपोर्ट वेरिएबल्स" कार्यक्षमता अन्य प्रोजेक्ट्स से वेरिएबल्स को इस प्रोजेक्ट में इंपोर्ट करने की अनुमति देती है।
ये सीक्रेट्स ऑर्ग वाइड हैं। डिफ़ॉल्ट रूप से कोई भी रेपो यहां संग्रहीत किसी भी सीक्रेट को एक्सेस कर सकेगा:
हालांकि, ध्यान दें कि एक अलग समूह (सभी सदस्यों के बजाय) को विशिष्ट लोगों को सीक्रेट्स तक पहुंच देने के लिए चुना जा सकता है। यह वर्तमान में सीक्रेट्स की सुरक्षा बढ़ाने के लिए सबसे अच्छे तरीकों में से एक है, ताकि सभी को उन्हें एक्सेस करने की अनुमति न हो बल्कि केवल कुछ लोगों को।
यदि आपके पास VCS (जैसे github) तक एक्सेस है, तो प्रत्येक रेपो के प्रत्येक ब्रांच के .circleci/config.yml
फ़ाइल की जांच करें और वहां संग्रहीत संभावित स्पष्ट पाठ सीक्रेट्स के लिए खोजें।
कोड की जांच करते समय आप सभी सीक्रेट्स नाम पा सकते हैं जो प्रत्येक .circleci/config.yml
फ़ाइल में उपयोग किए जा रहे हैं। आप उन फ़ाइलों से कॉन्टेक्स्ट नाम भी प्राप्त कर सकते हैं या उन्हें वेब कंसोल में देख सकते हैं: https://app.circleci.com/settings/organization/github/<org_name>/contexts।
सभी प्रोजेक्ट और कॉन्टेक्स्ट सीक्रेट्स को एक्सफिल्ट्रेट करने के लिए आपको सिर्फ 1 रेपो में WRITE एक्सेस होना चाहिए पूरे github ऑर्ग में (और आपके खाते को कॉन्टेक्स्ट्स तक पहुंच होनी चाहिए लेकिन डिफ़ॉल्ट रूप से हर कोई हर कॉन्टेक्स्ट तक पहुंच सकता है)।
"इंपोर्ट वेरिएबल्स" कार्यक्षमता अन्य प्रोजेक्ट्स से वेरिएबल्स को इस प्रोजेक्ट में इंपोर्ट करने की अनुमति देती है। इसलिए, एक हमलावर सभी रेपो से सभी प्रोजेक्ट वेरिएबल्स को इंपोर्ट कर सकता है और फिर सभी को एक साथ एक्सफिल्ट्रेट कर सकता है।
सभी प्रोजेक्ट सीक्रेट्स हमेशा जॉब्स के एन्व में सेट होते हैं, इसलिए बस एन्व को कॉल करना और इसे बेस64 में ओबफस्केट करना वर्कफ़्लोज़ वेब लॉग कंसोल में सीक्रेट्स को एक्सफिल्ट्रेट करेगा:
यदि आपके पास वेब कंसोल तक पहुंच नहीं है लेकिन आपके पास रेपो तक पहुंच है और आप जानते हैं कि CircleCI का उपयोग किया जा रहा है, तो आप बस एक वर्कफ़्लो बना सकते हैं जो हर मिनट ट्रिगर होता है और जो गुप्त जानकारी को एक बाहरी पते पर भेजता है:
आपको संदर्भ नाम निर्दिष्ट करना होगा (यह परियोजना के रहस्यों को भी बाहर निकालेगा):
यदि आपके पास वेब कंसोल तक पहुंच नहीं है लेकिन आपके पास रेपो तक पहुंच है और आप जानते हैं कि CircleCI का उपयोग किया जा रहा है, तो आप बस एक वर्कफ़्लो को संशोधित कर सकते हैं जो हर मिनट ट्रिगर होता है और जो गुप्त जानकारी को एक बाहरी पते पर भेजता है:
बस एक नया .circleci/config.yml
एक रेपो में बनाना circleci बिल्ड को ट्रिगर करने के लिए पर्याप्त नहीं है। आपको इसे circleci कंसोल में एक प्रोजेक्ट के रूप में सक्षम करना होगा।
CircleCI आपको अपने बिल्ड को उनके मशीनों या अपने खुद के मशीनों में चलाने का विकल्प देता है। डिफ़ॉल्ट रूप से, उनके मशीन GCP में स्थित हैं, और आप प्रारंभ में कुछ भी प्रासंगिक नहीं पा सकेंगे। हालाँकि, यदि एक पीड़ित अपने खुद के मशीनों (संभवतः, एक क्लाउड वातावरण में) कार्य चला रहा है, तो आप एक क्लाउड मेटाडेटा एंडपॉइंट पा सकते हैं जिसमें दिलचस्प जानकारी हो सकती है।
ध्यान दें कि पिछले उदाहरणों में सब कुछ एक डॉकर कंटेनर के अंदर लॉन्च किया गया था, लेकिन आप एक VM मशीन लॉन्च करने के लिए भी कह सकते हैं (जिसमें विभिन्न क्लाउड अनुमतियाँ हो सकती हैं):
या यहां तक कि एक डॉकर कंटेनर जो एक दूरस्थ डॉकर सेवा तक पहुंच रखता है:
CircleCI में उपयोगकर्ता टोकन बनाना संभव है ताकि उपयोगकर्ता की पहुंच के साथ API एंडपॉइंट्स तक पहुंचा जा सके।
https://app.circleci.com/settings/user/tokens
प्रोजेक्ट टोकन बनाना संभव है ताकि टोकन को दिए गए अनुमतियों के साथ प्रोजेक्ट तक पहुंचा जा सके।
https://app.circleci.com/settings/project/github/<org>/<repo>/api
प्रोजेक्ट में SSH कुंजी जोड़ना संभव है।
https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
एक अप्रत्याशित प्रोजेक्ट में छिपी शाखा में क्रॉन जॉब बनाना संभव है जो हर दिन सभी संदर्भ env वेरिएबल्स लीक कर रहा है।
या यहां तक कि एक शाखा में बनाना / एक ज्ञात जॉब को संशोधित करना जो हर दिन सभी संदर्भ और प्रोजेक्ट्स सीक्रेट्स लीक करेगा।
यदि आप एक गिटहब मालिक हैं तो आप असत्यापित ऑर्ब्स की अनुमति दे सकते हैं और एक जॉब में इसे बैकडोर के रूप में कॉन्फ़िगर कर सकते हैं।
आप कुछ कार्यों में कमांड इंजेक्शन भेद्यता पा सकते हैं और गुप्त के मान को संशोधित करके कमांड्स इंजेक्ट कर सकते हैं।