CircleCI Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
CircleCI ni jukwaa la Uunganishaji Endelevu ambapo unaweza kufafanua templeti zinazoonyesha unachotaka ifanye na baadhi ya msimbo 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.
CircleCI inapata ruhusa kutoka github na bitbucket zinazohusiana na akaunti inayojiandikisha. Katika majaribio yangu nilikagua kwamba mradi unapo kuwa na 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.
Kulingana na the docs kuna njia tofauti za kuchaji thamani katika mabadiliko ya mazingira ndani ya mchakato.
Kila kontena linalotumiwa na CircleCI litakuwa na mabadiliko maalum ya mazingira yaliyofafanuliwa katika nyaraka kama CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
au CIRCLE_USERNAME
.
Unaweza kuyatangaza kwa maandiko wazi ndani ya amri:
Unaweza kutangaza hizo kwa maandiko wazi ndani ya run environment:
Unaweza kutangaza hizo kwa maandiko wazi ndani ya build-job environment:
Unaweza kutangaza hizo kwa maandiko wazi ndani ya mazingira ya kontena:
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 "Kuagiza Vigezo" inaruhusu kuagiza vigezo kutoka miradi mingine hadi hii.
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 ufaccessi kwa siri kwa watu maalum. Hii kwa sasa ni moja ya njia bora za kuongeza usalama wa siri, ili kuto ruhusu kila mtu kuzifikia bali watu wachache tu.
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.
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.
Ili kuhamasisha ZOTE siri za mradi na muktadha UNAHITAJIKA kuwa na UFACCESSI WA KUANDIKA kwa repo 1 tu katika shirika lote la github (na akaunti yako inapaswa kuwa na ufaccessi kwa muktadha lakini kwa kawaida kila mtu anaweza kufikia kila muktadha).
Kazi ya "Kuagiza Vigezo" inaruhusu kuagiza vigezo kutoka miradi mingine hadi hii. Hivyo, mshambuliaji anaweza kuagiza vigezo vyote vya mradi kutoka kwa repos zote na kisha kuhamasisha zote 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 wavuti ya workflows:
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:
Unahitaji kueleza jina la muktadha (hii pia itatoa siri za mradi):
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:
Kujenga tu .circleci/config.yml
mpya katika repo siyo ya kutosha kuanzisha ujenzi wa circleci. Unahitaji kuwezesha kama mradi katika console ya circleci.
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 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):
Au hata kontena la docker lenye ufikiaji wa huduma ya docker ya mbali:
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.