CircleCI Security
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
CircleCI is 'n Kontinuïteitsintegrasie platform waar jy sjablone kan definieer wat aandui 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 direk vanaf jou repo hooftak doen byvoorbeeld.
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.
Volgens die dokumentasie is daar verskillende maniere om waardes in omgewing veranderlikes binne 'n werksvloei te laai.
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
.
Jy kan hulle in duidelike teks binne 'n opdrag verklaar:
U kan hulle in duidelike teks binne die run environment verklaar:
U kan dit in duidelike teks binne die build-job omgewing verklaar:
U kan dit in duidelike teks binne die omgewing van 'n houer verklaar:
Dit is geheime wat slegs deur die projek (deur enige tak) toeganklik gaan wees. Jy kan hulle verklaar in https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables
Die "Import Variabels" funksionaliteit laat jou toe om variabels van ander projekte na hierdie een te importeer.
Dit is geheime wat organisasie wyd is. Deur verstek kan enige repo enige geheim wat hier gestoor is toegang hê:
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.
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 vir potensiële duidelike teks geheime wat daar gestoor is.
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.
Om 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 per standaard kan almal toegang hê tot elke konteks).
Die "Import Variabels" funksionaliteit laat jou 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 web log konsol geëkstrakteer word:
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 uitbring:
Jy moet die konteksnaam spesifiseer (dit sal ook die projekgeheime eksfiltreer):
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 uitvoer:
Net die skep van 'n nuwe .circleci/config.yml
in 'n repo is nie genoeg om 'n circleci bou te aktiveer nie. Jy moet dit as 'n projek in die circleci konsole aktiveer.
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 enigiets 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 gelaai is, maar jy kan ook vra om 'n VM masjien te laat begin (wat dalk verskillende wolk toestemmings kan hê):
Of selfs 'n docker-container met toegang tot 'n afstands-docker-diens:
Dit is moontlik om gebruikertokens in CircleCI te skep om toegang te verkry tot die API-eindpunte met die gebruikers se toegang.
https://app.circleci.com/settings/user/tokens
Dit is moontlik om projektokens te skep om toegang te verkry tot die projek met die toestemmings wat aan die token gegee is.
https://app.circleci.com/settings/project/github/<org>/<repo>/api
Dit is moontlik om SSH-sleutels by die projekte 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 context 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 injekteer deur sy waarde te wysig.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)