Basic Github Information

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

Drugi načini podrške HackTricks-u:

Osnovna struktura

Osnovna struktura Github okruženja velike kompanije je da poseduje preduzeće koje poseduje nekoliko organizacija, a svaka od njih može sadržati nekoliko repozitorijuma i nekoliko timova. Manje kompanije mogu samo posedovati jednu organizaciju i nemaju preduzeća.

Sa korisničke tačke gledišta, korisnik može biti član različitih preduzeća i organizacija. U okviru njih, korisnik može imati različite uloge preduzeća, organizacije i repozitorijuma.

Osim toga, korisnik može biti deo različitih timova sa različitim ulogama preduzeća, organizacije ili repozitorijuma.

I na kraju, repozitorijumi mogu imati posebne mehanizme zaštite.

Privilegije

Uloge preduzeća

  • Vlasnik preduzeća: Osobe sa ovom ulogom mogu upravljati administratorima, upravljati organizacijama unutar preduzeća, upravljati podešavanjima preduzeća, primenjivati politiku preko organizacija. Međutim, oni ne mogu pristupiti podešavanjima ili sadržaju organizacije osim ako im se ne dodeli uloga vlasnika organizacije ili im se ne dodeli direktan pristup repozitorijumu koji je u vlasništvu organizacije.

  • Članovi preduzeća: Članovi organizacija koje je vaše preduzeće vlasnik su automatski članovi preduzeća.

Uloge organizacija

U organizaciji korisnici mogu imati različite uloge:

  • Vlasnici organizacije: Vlasnici organizacije imaju potpuni administrativni pristup vašoj organizaciji. Ova uloga treba da bude ograničena, ali ne manje od dve osobe, u vašoj organizaciji.

  • Članovi organizacije: Podrazumevana, neadministrativna uloga za osobe u organizaciji je uloga člana organizacije. Podrazumevano, članovi organizacije imaju određene dozvole.

  • Menadžeri naplate: Menadžeri naplate su korisnici koji mogu upravljati podešavanjima naplate za vašu organizaciju, kao što su informacije o plaćanju.

  • Menadžeri bezbednosti: To je uloga koju vlasnici organizacije mogu dodeliti bilo kom timu u organizaciji. Kada se primeni, daje svakom članu tima dozvole za upravljanje bezbednosnim upozorenjima i podešavanjima u okviru vaše organizacije, kao i dozvole za čitanje svih repozitorijuma u organizaciji.

  • Ako vaša organizacija ima tim za bezbednost, možete koristiti ulogu menadžera bezbednosti da članovima tima pružite najmanji pristup koji im je potreban za organizaciju.

  • Menadžeri Github aplikacija: Da biste omogućili dodatnim korisnicima da upravljaju GitHub aplikacijama koje su u vlasništvu organizacije, vlasnik može dodeliti dozvole menadžera GitHub aplikacija.

  • Saradnici izvan organizacije: Saradnik izvan organizacije je osoba koja ima pristup jednom ili više repozitorijuma organizacije, ali nije eksplicitno član organizacije.

Možete uporediti dozvole ovih uloga u ovoj tabeli: https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles

Privilegije članova

Na https://github.com/organizations/<org_name>/settings/member_privileges možete videti dozvole koje će korisnici imati samo zato što su deo organizacije.

Podešavanja ovde konfigurisana će pokazati sledeće dozvole članova organizacije:

  • Biti administrator, pisac, čitalac ili nemati dozvolu za sve repozitorijume organizacije.

  • Ako članovi mogu kreirati privatne, interne ili javne repozitorijume.

  • Ako je moguće kloniranje repozitorijuma

  • Ako je moguće pozivati saradnike izvan organizacije

  • Ako je moguće objavljivati javne ili privatne sajtove

  • Dozvole koje administratori imaju nad repozitorijumima

  • Ako članovi mogu kreirati nove timove

Uloge repozitorijuma

Podrazumevane uloge repozitorijuma su:

  • Čitanje: Preporučuje se za saradnike koji nisu programeri a žele da pregledaju ili diskutuju o vašem projektu

  • Triage: Preporučuje se za saradnike koji trebaju proaktivno upravljati problemima i zahtevima za povlačenje bez pristupa za pisanje

  • Pisanje: Preporučuje se za saradnike koji aktivno doprinose vašem projektu

  • Održavanje: Preporučuje se za menadžere projekta koji trebaju upravljati repozitorijumom bez pristupa osetljivim ili destruktivnim radnjama

  • Administracija: Preporučuje se za osobe koje trebaju puni pristup projektu, uključujući osetljive i destruktivne radnje poput upravljanja bezbednošću ili brisanja repozitorijuma

Možete uporediti dozvole svake uloge u ovoj tabeli https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role

Takođe možete kreirati sopstvene uloge na https://github.com/organizations/<org_name>/settings/roles

Timovi

Možete prikazati listu timova koji su kreirani u organizaciji na https://github.com/orgs/<org_name>/teams. Imajte na umu da da biste videli timove koji su podređeni drugim timovima, morate pristupiti svakom nadređenom timu.

Korisnici

Korisnici organizacije mogu biti prikazani na https://github.com/orgs/<org_name>/people.

U informacijama o svakom korisniku možete videti timove kojima korisnik pripada i repozitorijume kojima korisnik ima pristup.

Github autentifikacija

Github nudi različite načine autentifikacije na vašem nalogu i

Oauth Aplikacije

Oauth aplikacije mogu zatražiti dozvole za pristup delu vaših github informacija ili za impersonaciju vas kako bi izvršile određene radnje. Uobičajeni primer ove funkcionalnosti je dugme za prijavu putem githuba koje možete pronaći na nekim platformama.

Neki preporučeni bezbednosni saveti:

  • Oauth aplikacija uvek treba da deluje kao autentifikovani GitHub korisnik na celom GitHub-u (na primer, pružajući obaveštenja korisniku) i sa pristupom samo određenim opsezima.

  • Oauth aplikacija može se koristiti kao pružalac identiteta omogućavanjem "Prijave putem GitHub-a" za autentifikovanog korisnika.

  • Ne pravite Oauth aplikaciju ako želite da vaša aplikacija deluje samo na jednom repozitorijumu. Sa repo Oauth opsegom, Oauth aplikacije mogu delovati na svim repozitorijumima autentifikovanog korisnika.

  • Ne pravite Oauth aplikaciju da deluje kao aplikacija za vaš tim ili kompaniju. Oauth aplikacije se autentifikuju kao jedan korisnik, pa ako jedna osoba kreira Oauth aplikaciju za kompaniju i napusti je, niko drugi neće imati pristup njoj.

  • Više informacija možete pronaći ovde.

Github Aplikacije

Github aplikacije mogu zatražiti dozvole za pristup vašim github informacijama ili impersonaciju vas kako bi izvršile određene radnje nad određenim resursima. U Github aplikacijama morate navesti repozitorijume kojima će aplikacija imati pristup.

Neki bezbednosni saveti:

  • Github aplikacija treba da preduzima radnje nezavisno od korisnika (osim ako aplikacija koristi token za zahteve od korisnika ka serveru). Da biste obezbedili sigurnost tokena za zahteve od korisnika ka serveru, možete koristiti pristupne tokene koji ističu nakon 8 sati, i osvežavajući token koji se može zameniti za novi pristupni token. Za više informacija, pogledajte "Osvežavanje tokena za zahteve od korisnika ka serveru."

  • Proverite da li Github aplikacija integriše sa određenim repozitorijumima.

  • Github aplikacija treba da se poveže sa ličnim nalogom ili organizacijom.

  • Nemojte očekivati da Github aplikacija zna i radi sve što korisnik može.

  • Ne koristite Github aplikaciju ako vam je potrebna samo usluga "Prijave putem GitHub-a". Ali Github aplikacija može koristiti tok identifikacije korisnika za prijavu korisnika i obavljanje drugih radnji.

  • Ne pravite Github aplikaciju ako želite samo da delujete kao GitHub korisnik i radite sve što taj korisnik može.

  • Ako koristite svoju aplikaciju sa Github Akcijama i želite da menjate fajlove radnog toka, morate se autentifikovati u ime korisnika sa OAuth tokenom koji uključuje opseg workflow. Korisnik mora imati administratorske ili dozvole za pisanje na repozitorijumu koji sadrži fajl radnog toka. Za više informacija, pogledajte "Razumevanje opsega za OAuth aplikacije."

  • Više informacija možete pronaći ovde.

Github Akcije

Ovo nije način autentifikacije u github-u, već zlonamerna Github Akcija može dobiti neovlašćen pristup github-u i zavisno od privilegija dodeljenih Akciji, mogu se izvršiti različiti napadi. Pogledajte ispod za više informacija.

Git Akcije

Git akcije omogućavaju automatizaciju izvršavanja koda kada se dogodi određeni događaj. Obično se izvršeni kod nekom vrstom odnosi na kod repozitorijuma (na primer, izgradnja Docker kontejnera ili provera da li PR sadrži tajne informacije).

Konfiguracija

Na https://github.com/organizations/<org_name>/settings/actions moguće je proveriti konfiguraciju Github Akcija za organizaciju.

Moguće je zabraniti upotrebu Github Akcija u potpunosti, dozvoliti sve Github Akcije, ili dozvoliti samo određene akcije.

Takođe je moguće konfigurisati ko mora dati odobrenje za pokretanje Github Akcije i dozvole GITHUB_TOKEN-a Github Akcije prilikom pokretanja.

Git Tajne

Github Akcije obično zahtevaju neku vrstu tajnih informacija kako bi komunicirale sa github-om ili aplikacijama trećih strana. Da biste izbegli njihovo izlaganje u vidljivom tekstu u repozitorijumu, github omogućava da ih postavite kao Tajne.

Ove tajne mogu se konfigurisati za repozitorijum ili za celu organizaciju. Zatim, kako bi Akcija mogla pristupiti tajnoj informaciji, morate je deklarisati kao:

steps:
- name: Hello world action
with: # Set the secret as an input
super_secret: ${{ secrets.SuperSecret }}
env: # Or as an environment variable
super_secret: ${{ secrets.SuperSecret }}

Primer korišćenja Bash-a

steps:
- shell: bash
env:
SUPER_SECRET: ${{ secrets.SuperSecret }}
run: |
example-command "$SUPER_SECRET"

Tajne mogu biti pristupljene samo iz Github akcija koje ih imaju deklarisane.

Jednom konfigurisane u repozitorijumu ili organizaciji, korisnici Githuba više neće moći da im pristupe, samo će moći da ih promene.

Stoga, jedini način da ukradete Github tajne je da imate pristup mašini koja izvršava Github akciju (u tom scenariju možete pristupiti samo tajnama deklarisanim za akciju).

Git okruženja

Github omogućava kreiranje okruženja u kojima možete sačuvati tajne. Zatim, možete omogućiti pristup Github akciji tajnama unutar okruženja koristeći nešto poput:

jobs:
deployment:
runs-on: ubuntu-latest
environment: env_name

Možete konfigurisati okruženje da bude dostupno svim granama (podrazumevano), samo zaštićenim granama ili odrediti koje grane mogu pristupiti tome. Takođe možete postaviti broj potrebnih pregleda pre izvršavanja akcije koristeći okruženje ili sačekati neko vreme pre nego što dozvolite izvršavanje implementacija.

Git Action Runner

Github akcija može se izvršiti unutar github okruženja ili se može izvršiti u infrastrukturi treće strane koju korisnik konfiguriše.

Nekim organizacijama će biti dozvoljeno da pokreću Github akcije u infrastrukturi treće strane jer je to obično jeftinije.

Možete prikazati listu samostalnih runnera organizacije na adresi https://github.com/organizations/<org_name>/settings/actions/runners

Način da saznate koje se Github akcije izvršavaju u infrastrukturi koja nije Github je da pretražite runs-on: self-hosted u konfiguraciji yaml fajla Github akcije.

Nije moguće pokrenuti Github akciju organizacije unutar samostalne mašine druge organizacije jer se jedinstveni token generiše za Runnera prilikom konfigurisanja kako bi se znalo kojoj organizaciji Runner pripada.

Ako je prilagođeni Github Runner konfigurisan na mašini unutar AWS ili GCP na primer, akcija može imati pristup metapodacima i ukrasti token servisnog naloga sa kojim mašina radi.

Kompromitacija Git Action

Ako su sve akcije (ili zlonamerna akcija) dozvoljene, korisnik može koristiti Github akciju koja je zlonamerna i kompromituje kontejner u kojem se izvršava.

Zlonamerna Github akcija može biti zloupotrebljena od strane napadača da:

  • Ukrade sve tajne do kojih akcija ima pristup

  • Proširi se lateralno ako se akcija izvršava u infrastrukturi treće strane gde se može pristupiti SA tokenu koji se koristi za pokretanje mašine (verovatno putem metapodatkovne usluge)

  • Zloupotrebi token koji koristi tok rada da ukrade kod repozitorijuma gde se akcija izvršava ili ga čak izmeni.

Zaštita grana

Zaštita grana je dizajnirana da ne daje potpunu kontrolu nad repozitorijumom korisnicima. Cilj je da se postave razne metode zaštite pre nego što se može pisati kod u nekoj grani.

Zaštite grana repozitorijuma mogu se pronaći na adresi https://github.com/<orgname>/<reponame>/settings/branches

Nije moguće postaviti zaštitu grane na nivou organizacije. Stoga se sve mora navesti za svaki repozitorijum.

Razne zaštite mogu se primeniti na granu (kao na primer na master):

  • Možete zahtevati PR pre spajanja (tako da ne možete direktno spojiti kod preko grane). Ako je ovo izabrano, mogu biti primenjene i druge zaštite:

  • Zahtevaj odobrenje određenog broja osoba. Vrlo je uobičajeno zahtevati od 1 ili 2 osobe da odobre vaš PR kako pojedini korisnik ne bi mogao direktno spojiti kod.

  • Odbaci odobrenja kada se pošalju nove izmene. Ako to nije slučaj, korisnik može odobriti legitimni kod, a zatim dodati zlonamerni kod i spojiti ga.

  • Zahtevaj pregled od vlasnika koda. Najmanje 1 vlasnik koda repozitorijuma mora odobriti PR (tako da "slučajni" korisnici ne mogu to odobriti)

  • Ograniči ko može odbaciti pregled zahteva za povlačenje. Možete navesti osobe ili timove koji su ovlašćeni da odbace pregled zahteva za povlačenje.

  • Dozvoli određenim akterima da zaobiđu zahteve za povlačenje. Ovi korisnici će moći da zaobiđu prethodne restrikcije.

  • Zahtevaj da prođu provere statusa pre spajanja. Neke provere moraju proći pre nego što se može spojiti izmena (kao što je Github akcija koja proverava da nema otvorenih tajnih podataka).

  • Zahtevaj rešavanje razgovora pre spajanja. Svi komentari na kodu moraju biti rešeni pre nego što se PR može spojiti.

  • Zahtevaj potpisane izmene. Izmene moraju biti potpisane.

  • Zahtevaj linearnu istoriju. Onemogućava slanje spojenih izmena na odgovarajuće grane.

  • Uključi administratore. Ako ovo nije postavljeno, administratori mogu zaobići restrikcije.

  • Ograniči ko može slati izmene na odgovarajuće grane. Ograniči ko može poslati zahtev za povlačenje.

Kao što možete videti, čak i ako uspete da dobijete neke akreditive korisnika, repozitorijumi mogu biti zaštićeni i sprečiti vas da šaljete kod na master na primer, kako biste kompromitovali CI/CD tok.

Reference

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

Drugi načini da podržite HackTricks:

Last updated