CircleCI Security
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:
Možete ih deklarisati u čistom tekstu unutar run environment-a:
Možete ih deklarisati u čistom tekstu unutar build-job okruženja:
Možete ih deklarisati u čistom tekstu unutar okruženja kontejnera:
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:
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:
Iznesi Tajne Konteksta
Potrebno je navesti ime konteksta (ovo će takođe izneti 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 svakog minuta i koji iznosi tajne informacije na spoljni adresu:
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):
Ili čak docker kontejner sa pristupom udaljenoj docker usluzi:
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