CircleCI Security
Basiese Inligting
CircleCI is 'n Kontinue Integrasie platform waar jy sjablone kan definieer wat aandui wat jy wil hê dit moet doen met 'n bietjie kode en wanneer dit moet gebeur. Op hierdie manier kan jy toetse outomatiseer of ontplooiings direk vanaf jou repo meester tak byvoorbeeld.
Toestemmings
CircleCI erf die toestemmings van github en bitbucket rakende die rekening wat aanmeld. In my toetsing het ek vasgestel dat solank jy skryftoestemmings oor die repo in github het, sal jy in staat wees om die projekinstellings in CircleCI te bestuur (nuwe ssh-sleutels instel, projek api-sleutels kry, nuwe takke met nuwe CircleCI-opsette skep...).
Tog moet jy 'n repo-admin wees om die repo in 'n CircleCI-projek te omskep.
Omgewingsveranderlikes & Geheime
Volgens die dokumentasie is daar verskillende maniere om waardes in omgewingsveranderlikes binne 'n werkstroom te laai.
Ingeboude omgewingsveranderlikes
Elke houer wat deur CircleCI uitgevoer word, sal altyd spesifieke omgewingsveranderlikes hê wat in die dokumentasie gedefinieer is soos CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
of CIRCLE_USERNAME
.
Duidelike teks
Jy kan hulle in duidelike teks binne 'n opdrag verklaar:
Jy kan hulle in duidelike teks binne die run-omgewing verklaar:
Jy kan hulle in duidelike teks binne die bou-werk omgewing verklaar:
Jy kan hulle in duidelike teks binne die omgewing van 'n houer verklaar:
Projek Geheime
Hierdie is geheime wat slegs deur die projek (deur enige tak) toeganklik sal wees. Jy kan hulle sien gedeklareer in https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables
Die "Invoer Veranderlikes" funksionaliteit maak dit moontlik om veranderlikes van ander projekte na hierdie een in te voer.
Konteks Geheime
Hierdie is geheime wat org wyd is. Standaard sal enige repo in staat wees om enige geheim wat hier gestoor word, te benader:
Let wel dat 'n ander groep (in plaas van Alle lede) gekies kan word om slegs toegang tot die geheime aan spesifieke mense te gee. Dit is tans een van die beste maniere om die sekuriteit van die geheime te verhoog, om nie almal toegang daartoe te gee nie, maar net aan 'n paar 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 vir potensiële duidelike teks geheime wat daarin gestoor is.
Geheime Omgewingsveranderlikes & Konteks enumerasie
Deur die kode te ondersoek, kan jy al die geheimname vind wat in elke .circleci/config.yml
lêer gebruik word. Jy kan ook die konteksname uit daardie lêers kry of dit in die webkonsol nakyk: https://app.circleci.com/settings/organization/github/<org_name>/contexts.
Exfiltreer Projekgeheime
Om ALLE die projek- en konteks GEHEIME te exfiltreer, hoef jy net SKRYF toegang tot net 1 repo in die hele github org te hê (en jou rekening moet toegang tot die kontekste hê, maar standaard kan almal toegang tot elke konteks kry).
Die "Invoer Veranderlikes" funksionaliteit maak dit moontlik om veranderlikes van ander projekte na hierdie een in te voer. Daarom kan 'n aanvaller alle projekveranderlikes van al die repos invoer en dan almal saam exfiltrate.
Al die projekgeheime word altyd in die omgewing van die take ingestel, dus deur net omgewing te noem en dit in base64 te verduister, sal dit die geheime in die werkstroom web konsolideer exfiltrate:
Indien jy nie toegang tot die webkonsole het nie, maar jy het toegang tot die repo en jy weet dat CircleCI gebruik word, kan jy net 'n werkstroom skep wat elke minuut geaktiveer word en wat die geheime na 'n eksterne adres onttrek:
Uitlek van Konteksgeheime
Jy moet die konteksnaam spesifiseer (dit sal ook die projekgeheime uitlek):
Indien 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 werkstroom wysig wat elke minuut geaktiveer word en wat die geheime na 'n eksterne adres onttrek:
Net die skep van 'n nuwe .circleci/config.yml
in 'n repo is nie genoeg om 'n CircleCI-bou te trigger nie. Jy moet dit aktiveer as 'n projek in die CircleCI-konsole.
Ontsnapping na die Wolk
CircleCI gee jou die opsie om jou bouprojekte op hul rekenaars of op jou eie rekenaars te hardloop. Standaard is hul rekenaars geleë in GCP, en aanvanklik sal jy nie enige relevante inligting vind nie. Tog, as 'n slagoffer die take in hul eie rekenaars (moontlik in 'n wolkomgewing) hardloop, mag jy 'n wolkmetadatabron met interessante inligting daarop vind.
Let daarop dat in die vorige voorbeelde alles binne 'n dokkerhouer uitgevoer is, maar jy kan ook vra om 'n VM-rekenaar te laat uitvoer (wat moontlik verskillende wolktoestemmings kan hê):
Of self 'n docker houer met toegang tot 'n afgeleë docker-diens:
Volharding
Dit is moontlik om gebruikerstokens 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 projekstokens 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 by die projekte toe te voeg.
https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
Dit is moontlik om 'n cron-werk in 'n verborge tak in 'n onverwagte projek te skep wat elke dag al die konteksomgewingsveranderlikes lek.
Of selfs 'n tak skep / wysig in 'n bekende werk wat elke dag alle konteks en projekgeheime lek.
As jy 'n github-eienaar is, kan jy nie-geverifieerde orbs toelaat en een in 'n werk as agterdeur konfigureer
Jy kan 'n bevelinspuitingskwesbaarheid in 'n paar take vind en bevele inspuit via 'n geheim deur sy waarde te wysig
Last updated