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 द्वारा चलाए गए प्रत्येक कंटेनर में हमेशा दस्तावेज़ में परिभाषित विशिष्ट env vars होंगे जैसे 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 रेपो में लिखने की पहुँच होनी चाहिए (और आपके खाते को संदर्भों तक पहुँच होनी चाहिए लेकिन डिफ़ॉल्ट रूप से सभी को हर संदर्भ तक पहुँच होती है)।
"आयात वेरिएबल्स" कार्यक्षमता अन्य प्रोजेक्ट्स से वेरिएबल्स को इस प्रोजेक्ट में आयात करने की अनुमति देती है। इसलिए, एक हमलावर सभी रेपो से सभी प्रोजेक्ट वेरिएबल्स को आयात कर सकता है और फिर सभी को एक साथ निकाल सकता है।
सभी प्रोजेक्ट रहस्य हमेशा नौकरियों के वातावरण में सेट होते हैं, इसलिए बस env को कॉल करना और इसे base64 में छिपाना रहस्यों को कार्यप्रवाह वेब लॉग कंसोल में निकाल देगा:
यदि आपके पास वेब कंसोल तक पहुंच नहीं है लेकिन आपके पास रेपो तक पहुंच है और आप जानते हैं कि 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
यह संभव है कि छिपी शाखा में क्रॉन जॉब बनाई जाए एक अप्रत्याशित प्रोजेक्ट में जो हर दिन सभी context env वेरिएबल्स को leak कर रहा है।
या यहां तक कि एक शाखा में बनाएं / एक ज्ञात जॉब को संशोधित करें जो हर दिन सभी context और projects secrets को leak करेगा।
यदि आप एक गिटहब मालिक हैं तो आप असत्यापित ऑर्ब्स की अनुमति दे सकते हैं और एक जॉब में इसे backdoor के रूप में कॉन्फ़िगर कर सकते हैं।
आप कुछ कार्यों में एक कमांड इंजेक्शन भेद्यता पा सकते हैं और secret के मान को संशोधित करके commands को inject कर सकते हैं।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)