CircleCI Security
Last updated
Last updated
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
CircleCI je platforma za Kontinuiranu Integraciju gde možete definisati šablone koji ukazuju šta želite da uradi sa nekim 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.
CircleCI nasleđuje dozvole sa github-a i bitbucket-a vezane za nalog koji se prijavljuje. Tokom mog testiranja proverio sam da, sve dok imate dozvole za pisanje nad repozitorijumom na github-u, moći ćete da upravljate postavkama projekta u CircleCI (postavite nove ssh ključeve, dobijete projektne api ključeve, kreirate nove grane sa novim CircleCI konfiguracijama...).
Međutim, potrebno je da budete admin repozitorijuma kako biste pretvorili repozitorijum u CircleCI projekat.
Prema dokumentaciji postoje različiti načini za učitavanje vrednosti u promenljive okruženja unutar radnog toka.
Svaki kontejner koji pokreće CircleCI uvek će imati specifične env varijable definisane u dokumentaciji kao što su CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
ili CIRCLE_USERNAME
.
Možete ih deklarisati u čistom tekstu unutar komande:
Možete ih deklarisati u čistom tekstu unutar run environment:
Možete ih deklarisati u čistom tekstu unutar build-job environment:
Možete ih deklarisati u čistom tekstu unutar okruženja kontejnera:
Ovo su tajne koje će biti pristupačne samo projektu (kroz bilo koju granu). Možete ih videti deklarisane na https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables
Funkcionalnost "Uvezi promenljive" omogućava uvoz promenljivih iz drugih projekata u ovaj.
Ovo su tajne koje su šire organizacije. Po defaultu, svaka repo će moći da pristupi bilo kojoj tajni koja je ovde pohranjena:
Međutim, imajte na umu da se može izabrati drugačija grupa (umesto svih članova) kako bi se pristup tajnama dao samo određenim osobama. To je trenutno jedan od najboljih načina da se poveća sigurnost tajni, da se ne dozvoli svima da im pristupe, već samo nekim ljudima.
Ako imate pristup VCS-u (kao što je github), proverite datoteku .circleci/config.yml
svake repo na svakoj grani i pretražite potencijalne tajne u čistom tekstu koje su tamo pohranjene.
Proverom koda možete pronaći sva imena tajni koja se koriste u svakoj .circleci/config.yml
datoteci. Takođe možete dobiti imena konteksta iz tih datoteka ili ih proveriti u web konzoli: https://app.circleci.com/settings/organization/github/<org_name>/contexts.
Da biste ekstrahovali SVE tajne projekta i konteksta, samo treba da imate WRITE pristup samo 1 repo u celoj github organizaciji (i vaš nalog mora imati pristup kontekstima, ali po defaultu svako može pristupiti svakom kontekstu).
Funkcionalnost "Uvezi promenljive" omogućava uvoz promenljivih iz drugih projekata u ovaj. Stoga, napadač bi mogao uvoziti sve projektne promenljive iz svih repo i zatim ekstrahovati sve njih zajedno.
Sve tajne projekta su uvek postavljene u env poslova, tako da samo pozivanje env i obfuscating u base64 će ekstrahovati tajne u web log konzoli radnih tokova:
Ako nemate pristup veb konzoli ali imate pristup repozitorijumu i znate da se koristi CircleCI, možete jednostavno napraviti radni tok koji se pokreće svake minute i koji izvlači tajne na spoljašnju adresu:
Morate navesti ime konteksta (ovo će takođe ekstraktovati tajne projekta):
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 svake minute i koji izvlači tajne na spoljašnju adresu:
Samo kreiranje novog .circleci/config.yml
u repozitorijumu nije dovoljno da pokrene circleci build. Morate omogućiti to kao projekat u circleci konzoli.
CircleCI vam daje opciju da pokrenete svoje buildove na njihovim mašinama ili na svojim. Po defaultu, njihove mašine se nalaze u GCP-u, i u 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), mogli biste pronaći cloud metadata endpoint sa zanimljivim informacijama.
Primetite da je u prethodnim primerima sve pokrenuto unutar docker kontejnera, ali takođe možete tražiti da pokrenete VM mašinu (koja može imati različite cloud dozvole):
Ili čak docker kontejner sa pristupom udaljenoj docker usluzi:
Moguće je napraviti korisničke tokene u CircleCI za pristup API krajnjim tačkama sa korisničkim pristupom.
https://app.circleci.com/settings/user/tokens
Moguće je napraviti tokene projekata za pristup projektu sa dozvolama datim tokenu.
https://app.circleci.com/settings/project/github/<org>/<repo>/api
Moguće je dodati SSH ključeve u projekte.
https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
Moguće je napraviti cron zadatak u skrivenoj grani u neočekivanom projektu koji propušta sve context env varijable svakog dana.
Ili čak napraviti u grani / izmeniti poznati zadatak koji će propuštati sve kontekste i tajne projekata svakog dana.
Ako ste vlasnik github-a, možete dozvoliti neproverene orbove i konfigurisati jedan u zadatku kao backdoor.
Možete pronaći ranjivost za injekciju komandi u nekom zadatku i injektovati komande putem tajne menjajući njenu vrednost.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)