mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 11:26:11 -08:00
Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/
This commit is contained in:
@@ -12,15 +12,15 @@
|
||||
basic-github-information.md
|
||||
{{#endref}}
|
||||
|
||||
## Spoljašnje istraživanje
|
||||
## Spoljna rekognosciranja
|
||||
|
||||
Github repozitorijumi mogu biti konfigurisani kao javni, privatni i interni.
|
||||
|
||||
- **Privatni** znači da će **samo** ljudi iz **organizacije** moći da im pristupe
|
||||
- **Interni** znači da će **samo** ljudi iz **preduzeća** (preduzeće može imati nekoliko organizacija) moći da mu pristupe
|
||||
- **Javni** znači da će **svi na internetu** moći da mu pristupe.
|
||||
- **Javni** znači da će **sva internet** moći da mu pristupi.
|
||||
|
||||
U slučaju da znate **korisnika, repozitorijum ili organizaciju koju želite da ciljate**, možete koristiti **github dorks** da pronađete osetljive informacije ili pretražujete **curenja osetljivih informacija** **u svakom repozitorijumu**.
|
||||
U slučaju da znate **korisnika, repozitorijum ili organizaciju koju želite da ciljate**, možete koristiti **github dorks** da pronađete osetljive informacije ili pretražujete **curenje osetljivih informacija** **u svakom repozitorijumu**.
|
||||
|
||||
### Github Dorks
|
||||
|
||||
@@ -28,13 +28,13 @@ Github omogućava da **pretražujete nešto specificirajući kao opseg korisnika
|
||||
|
||||
Alati (svaki alat sadrži svoju listu dorks):
|
||||
|
||||
- [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Lista Dorks](https://github.com/obheda12/GitDorker/tree/master/Dorks))
|
||||
- [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Lista Dorks](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt))
|
||||
- [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Lista Dorks](https://github.com/hisxo/gitGraber/tree/master/wordlists))
|
||||
- [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Dorks list](https://github.com/obheda12/GitDorker/tree/master/Dorks))
|
||||
- [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks list](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt))
|
||||
- [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Dorks list](https://github.com/hisxo/gitGraber/tree/master/wordlists))
|
||||
|
||||
### Github Curenja
|
||||
|
||||
Molimo vas, imajte na umu da su github dorks takođe namenjeni pretraživanju curenja koristeći github opcije pretrage. Ova sekcija je posvećena onim alatima koji će **preuzeti svaki repozitorijum i pretražiti osetljive informacije u njima** (čak proveravajući određenu dubinu commit-a).
|
||||
Molimo vas, imajte na umu da su github dorks takođe namenjeni pretraživanju curenja koristeći opcije pretrage na github-u. Ova sekcija je posvećena onim alatima koji će **preuzeti svaki repozitorijum i pretražiti osetljive informacije u njima** (čak proveravajući određenu dubinu commit-a).
|
||||
|
||||
Alati (svaki alat sadrži svoju listu regex-a):
|
||||
|
||||
@@ -49,7 +49,7 @@ Alati (svaki alat sadrži svoju listu regex-a):
|
||||
> [!WARNING]
|
||||
> Kada tražite curenja u repozitorijumu i pokrenete nešto poput `git log -p`, ne zaboravite da mogu postojati **druge grane sa drugim commit-ima** koje sadrže tajne!
|
||||
|
||||
### Spoljašnji Forkovi
|
||||
### Spoljni Forkovi
|
||||
|
||||
Moguće je **kompromitovati repozitorijume zloupotrebom pull zahteva**. Da biste znali da li je repozitorijum ranjiv, uglavnom treba da pročitate Github Actions yaml konfiguracije. [**Više informacija o ovome u nastavku**](./#execution-from-a-external-fork).
|
||||
|
||||
@@ -70,14 +70,14 @@ Postoje neke **podrazumevane privilegije** koje se mogu dodeliti **članovima**
|
||||
- **Osnovne dozvole**: Članovi će imati dozvolu None/Read/write/Admin za repozitorijume organizacije. Preporučuje se **None** ili **Read**.
|
||||
- **Forkovanje repozitorijuma**: Ako nije neophodno, bolje je **ne dozvoliti** članovima da fork-uju repozitorijume organizacije.
|
||||
- **Kreiranje stranica**: Ako nije neophodno, bolje je **ne dozvoliti** članovima da objavljuju stranice iz repozitorijuma organizacije. Ako je neophodno, možete dozvoliti kreiranje javnih ili privatnih stranica.
|
||||
- **Zahtevi za pristup integraciji**: Sa ovim omogućeno, spoljnim saradnicima će biti omogućeno da zatraže pristup za GitHub ili OAuth aplikacije da pristupe ovoj organizaciji i njenim resursima. Obično je potrebno, ali ako nije, bolje je onemogućiti to.
|
||||
- _Nisam mogao pronaći ove informacije u API odgovoru, podelite ako ih pronađete_
|
||||
- **Zahtevi za pristup integracijama**: Sa ovim omogućeno, spoljnim saradnicima će biti omogućeno da zatraže pristup za GitHub ili OAuth aplikacije da pristupe ovoj organizaciji i njenim resursima. Obično je potrebno, ali ako nije, bolje je onemogućiti to.
|
||||
- _Nisam mogao pronaći ove informacije u odgovoru API-a, podelite ako ih pronađete_
|
||||
- **Promena vidljivosti repozitorijuma**: Ako je omogućeno, **članovi** sa **admin** dozvolama za **repozitorijum** će moći da **promene njegovu vidljivost**. Ako je onemogućeno, samo vlasnici organizacije mogu menjati vidljivosti repozitorijuma. Ako ne želite da ljudi učine stvari **javnim**, uverite se da je ovo **onemogućeno**.
|
||||
- _Nisam mogao pronaći ove informacije u API odgovoru, podelite ako ih pronađete_
|
||||
- **Brisanje i prenos repozitorijuma**: Ako je omogućeno, članovi sa **admin** dozvolama za repozitorijum će moći da **obrišu** ili **prenose** javne i privatne **repozitorijume**.
|
||||
- _Nisam mogao pronaći ove informacije u API odgovoru, podelite ako ih pronađete_
|
||||
- _Nisam mogao pronaći ove informacije u odgovoru API-a, podelite ako ih pronađete_
|
||||
- **Brisanje i prenos repozitorijuma**: Ako je omogućeno, članovi sa **admin** dozvolama za repozitorijum će moći da **obrišu** ili **prenose** javne i privatne **repozitorijume.**
|
||||
- _Nisam mogao pronaći ove informacije u odgovoru API-a, podelite ako ih pronađete_
|
||||
- **Dozvoliti članovima da kreiraju timove**: Ako je omogućeno, svaki **član** organizacije će moći da **kreira** nove **timove**. Ako je onemogućeno, samo vlasnici organizacije mogu kreirati nove timove. Bolje je da ovo bude onemogućeno.
|
||||
- _Nisam mogao pronaći ove informacije u API odgovoru, podelite ako ih pronađete_
|
||||
- _Nisam mogao pronaći ove informacije u odgovoru API-a, podelite ako ih pronađete_
|
||||
- **Još stvari se mogu konfigurisati** na ovoj stranici, ali prethodne su one koje su više vezane za bezbednost.
|
||||
|
||||
### Podešavanja akcija
|
||||
@@ -93,30 +93,30 @@ Nekoliko podešavanja vezanih za bezbednost može se konfigurisati za akcije sa
|
||||
- _Nisam mogao pronaći API sa ovim informacijama, podelite ako ih pronađete_
|
||||
- **Pokretanje radnih tokova iz fork pull zahteva**: Veoma je **nepreporučljivo pokretati radne tokove iz pull zahteva** jer će održavaoci fork porekla dobiti mogućnost korišćenja tokena sa dozvolama za čitanje na izvorni repozitorijum.
|
||||
- _Nisam mogao pronaći API sa ovim informacijama, podelite ako ih pronađete_
|
||||
- **Dozvole radnog toka**: Veoma se preporučuje da **samo date dozvole za čitanje repozitorijuma**. Ne preporučuje se davanje dozvola za pisanje i kreiranje/odobravanje pull zahteva kako bi se izbegla zloupotreba GITHUB_TOKEN-a datog pokrenutim radnim tokovima.
|
||||
- **Dozvole radnog toka**: Veoma se preporučuje da **samo date dozvole za čitanje repozitorijuma**. Ne preporučuje se davanje dozvola za pisanje i kreiranje/odobravanje pull zahteva kako bi se izbegla zloupotreba GITHUB_TOKEN-a datog za pokretanje radnih tokova.
|
||||
- [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization)
|
||||
|
||||
### Integracije
|
||||
|
||||
_Javite mi ako znate API krajnju tačku za pristup ovim informacijama!_
|
||||
|
||||
- **Politika pristupa aplikacijama trećih strana**: Preporučuje se ograničiti pristup svakoj aplikaciji i dozvoliti samo potrebne (nakon pregleda).
|
||||
- **Politika pristupa aplikacijama trećih strana**: Preporučuje se ograničavanje pristupa svakoj aplikaciji i dozvoliti samo potrebne (nakon pregleda).
|
||||
- **Instalirane GitHub aplikacije**: Preporučuje se dozvoliti samo potrebne (nakon pregleda).
|
||||
|
||||
## Istraživanje i napadi zloupotrebom kredencijala
|
||||
## Rekognosciranje i napadi zloupotrebom kredencijala
|
||||
|
||||
Za ovaj scenario pretpostavićemo da ste dobili neki pristup github nalogu.
|
||||
|
||||
### Sa korisničkim kredencijalima
|
||||
|
||||
Ako nekako već imate kredencijale za korisnika unutar organizacije, možete **samo da se prijavite** i proverite koje **preduzetničke i organizacione uloge imate**, ako ste običan član, proverite koje **dozvole imaju obični članovi**, u kojim **grupama** ste, koje **dozvole imate** nad kojim **repozitorijumima** i **kako su repozitorijumi zaštićeni**.
|
||||
Ako nekako već imate kredencijale za korisnika unutar organizacije, možete **samo da se prijavite** i proverite koje **preduzetničke i organizacione uloge imate**, ako ste običan član, proverite koje **dozvole obični članovi imaju**, u kojim **grupama** ste, koje **dozvole imate** nad kojim **repozitorijumima,** i **kako su repozitorijumi zaštićeni.**
|
||||
|
||||
Imajte na umu da se **2FA može koristiti** tako da ćete moći da pristupite ovim informacijama samo ako takođe možete **proći tu proveru**.
|
||||
|
||||
> [!NOTE]
|
||||
> Imajte na umu da ako **uspete da ukradete `user_session` kolačić** (trenutno konfigurisano sa SameSite: Lax) možete **potpuno imitirati korisnika** bez potrebe za kredencijalima ili 2FA.
|
||||
|
||||
Proverite odeljak u nastavku o [**zaobilaznicama zaštite grana**](./#branch-protection-bypass) u slučaju da je korisno.
|
||||
Proverite odeljak ispod o [**zaobilaznicama zaštite grana**](./#branch-protection-bypass) u slučaju da je korisno.
|
||||
|
||||
### Sa korisničkim SSH ključem
|
||||
|
||||
@@ -130,7 +130,7 @@ git config --list
|
||||
```
|
||||
Ako je korisnik konfigurisao svoje korisničko ime kao svoje github korisničko ime, možete pristupiti **javnim ključevima koje je postavio** na svom nalogu na _https://github.com/\<github_username>.keys_, možete proveriti ovo da potvrdite da li se privatni ključ koji ste pronašli može koristiti.
|
||||
|
||||
**SSH ključevi** se takođe mogu postaviti u repozitorijume kao **deploy ključevi**. Svako ko ima pristup ovom ključiću moći će da **pokrene projekte iz repozitorijuma**. Obično, na serveru sa različitim deploy ključevima, lokalna datoteka **`~/.ssh/config`** će vam dati informacije o tome kojem ključu se odnosi.
|
||||
**SSH ključevi** se takođe mogu postaviti u repozitorijume kao **deploy ključevi**. Svako ko ima pristup ovom ključu moći će da **pokrene projekte iz repozitorijuma**. Obično na serveru sa različitim deploy ključevima lokalna datoteka **`~/.ssh/config`** će vam dati informacije o tome kojem ključu se odnosi.
|
||||
|
||||
#### GPG Ključevi
|
||||
|
||||
@@ -144,7 +144,7 @@ gpg --list-secret-keys --keyid-format=long
|
||||
|
||||
Za uvod o [**korisničkim tokenima proverite osnovne informacije**](basic-github-information.md#personal-access-tokens).
|
||||
|
||||
Korisnički token može biti korišćen **umesto lozinke** za Git preko HTTPS-a, ili može biti korišćen za [**autentifikaciju na API preko osnovne autentifikacije**](https://docs.github.com/v3/auth/#basic-authentication). U zavisnosti od privilegija koje su mu dodeljene, možda ćete moći da izvršite različite radnje.
|
||||
Korisnički token može biti korišćen **umesto lozinke** za Git preko HTTPS-a, ili može biti korišćen za [**autentifikaciju na API preko osnovne autentifikacije**](https://docs.github.com/v3/auth/#basic-authentication). U zavisnosti od privilegija koje su mu pridružene, možda ćete moći da izvršite različite radnje.
|
||||
|
||||
Korisnički token izgleda ovako: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123`
|
||||
|
||||
@@ -154,7 +154,7 @@ Za uvod o [**Github Oauth aplikacijama proverite osnovne informacije**](basic-gi
|
||||
|
||||
Napadač može kreirati **malicious Oauth aplikaciju** da bi pristupio privilegovanim podacima/radnjama korisnika koji je prihvataju verovatno kao deo phishing kampanje.
|
||||
|
||||
Ovo su [opsegovi koje Oauth aplikacija može zatražiti](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). Uvek treba proveriti tražene opsegove pre nego što ih prihvatite.
|
||||
Ovo su [opsezi koje Oauth aplikacija može zatražiti](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). Uvek treba proveriti opsege koji se traže pre nego što ih prihvatite.
|
||||
|
||||
Pored toga, kao što je objašnjeno u osnovnim informacijama, **organizacije mogu dati/oduzeti pristup trećim aplikacijama** informacijama/repozitorijima/radnjama vezanim za organizaciju.
|
||||
|
||||
@@ -174,7 +174,7 @@ Postoji nekoliko tehnika za kompromitovanje i zloupotrebu Github akcije, proveri
|
||||
abusing-github-actions/
|
||||
{{#endref}}
|
||||
|
||||
## Obilaženje zaštite grane
|
||||
## Zaobilaženje zaštite grane
|
||||
|
||||
- **Zahtevajte određeni broj odobrenja**: Ako ste kompromitovali nekoliko naloga, možete jednostavno prihvatiti svoje PR-ove iz drugih naloga. Ako imate samo nalog sa kojeg ste kreirali PR, ne možete prihvatiti svoj PR. Međutim, ako imate pristup **Github Action** okruženju unutar repozitorijuma, koristeći **GITHUB_TOKEN** možda ćete moći da **odobrite svoj PR** i dobijete 1 odobrenje na ovaj način.
|
||||
- _Napomena za ovo i za ograničenje vlasnika koda da obično korisnik neće moći da odobri svoje PR-ove, ali ako možete, možete to zloupotrebiti da prihvatite svoje PR-ove._
|
||||
@@ -183,16 +183,16 @@ abusing-github-actions/
|
||||
- Kada je **CODEOWNER datoteka pogrešno konfigurisana**, Github se ne žali, ali je ne koristi. Stoga, ako je pogrešno konfigurisana, **zaštita vlasnika koda nije primenjena.**
|
||||
- **Dozvolite određenim akterima da zaobiđu zahteve za povlačenje**: Ako ste jedan od ovih aktera, možete zaobići zaštitu zahteva za povlačenje.
|
||||
- **Uključite administratore**: Ako ovo nije postavljeno i vi ste administrator repozitorijuma, možete zaobići ovu zaštitu grane.
|
||||
- **PR otmica**: Možda ćete moći da **modifikujete PR nekog drugog** dodajući maliciozni kod, odobravajući rezultantni PR sami i spajajući sve.
|
||||
- **Uklanjanje zaštite grane**: Ako ste **administrator repozitorijuma, možete onemogućiti zaštite**, spojiti svoj PR i ponovo postaviti zaštite.
|
||||
- **Obilaženje zaštita za slanje**: Ako repozitorijum **samo dozvoljava određenim korisnicima** da šalju push (spajaju kod) u granama (zaštita grane može štititi sve grane specificirajući wildcard `*`).
|
||||
- **PR otmica**: Možete biti u mogućnosti da **modifikujete PR nekog drugog** dodajući maliciozni kod, odobravajući rezultantni PR sami i spajajući sve.
|
||||
- **Uklanjanje zaštita grane**: Ako ste **administrator repozitorijuma, možete onemogućiti zaštite**, spojiti svoj PR i ponovo postaviti zaštite.
|
||||
- **Zaobilaženje zaštita za slanje**: Ako repozitorijum **samo dozvoljava određenim korisnicima** da šalju push (spajaju kod) u granama (zaštita grane može štititi sve grane specificirajući wildcard `*`).
|
||||
- Ako imate **pristup pisanju u repozitorijumu, ali vam nije dozvoljeno da šaljete kod** zbog zaštite grane, još uvek možete **napraviti novu granu** i unutar nje kreirati **github akciju koja se aktivira kada se kod pošalje**. Kako **zaštita grane neće štititi granu dok ne bude kreirana**, ovo prvo slanje koda u granu će **izvršiti github akciju**.
|
||||
|
||||
## Obilaženje zaštita okruženja
|
||||
## Zaobilaženje zaštita okruženja
|
||||
|
||||
Za uvod o [**Github okruženju proverite osnovne informacije**](basic-github-information.md#git-environments).
|
||||
|
||||
U slučaju da se okruženje može **pristupiti sa svih grana**, **nije zaštićeno** i možete lako pristupiti tajnama unutar okruženja. Imajte na umu da možete pronaći repozitorijume gde su **sve grane zaštićene** (specifikovanjem njihovih imena ili korišćenjem `*`), u tom scenariju, **pronađite granu u kojoj možete poslati kod** i možete **izvući** tajne kreirajući novu github akciju (ili modifikujući jednu).
|
||||
U slučaju da okruženje može biti **pristupano sa svih grana**, **nije zaštićeno** i lako možete pristupiti tajnama unutar okruženja. Imajte na umu da možete naići na repozitorijume gde su **sve grane zaštićene** (specifikovanjem njihovih imena ili korišćenjem `*`), u tom scenariju, **pronađite granu u koju možete poslati kod** i možete **izvući** tajne kreiranjem nove github akcije (ili modifikovanjem jedne).
|
||||
|
||||
Napomena, možete naići na ivicu slučaja gde su **sve grane zaštićene** (putem wildcard `*`) i specificirano je **ko može slati kod u grane** (_to možete specificirati u zaštiti grane_) i **vašem korisniku nije dozvoljeno**. I dalje možete pokrenuti prilagođenu github akciju jer možete kreirati granu i koristiti okidač za slanje preko nje same. **Zaštita grane dozvoljava slanje u novu granu, tako da će github akcija biti aktivirana**.
|
||||
```yaml
|
||||
@@ -200,12 +200,12 @@ push: # Run it when a push is made to a branch
|
||||
branches:
|
||||
- current_branch_name #Use '**' to run when a push is made to any branch
|
||||
```
|
||||
Napomena da će se **nakon kreiranja** grane **zaštita grane primeniti na novu granu** i nećete moći da je izmenite, ali do tada ćete već izvući tajne.
|
||||
Napomena da će se **nakon kreiranja** grane **zaštita grane primeniti na novu granu** i nećete moći da je izmenite, ali ćete u tom trenutku već imati izvučene tajne.
|
||||
|
||||
## Persistencija
|
||||
|
||||
- Generišite **korisnički token**
|
||||
- Ukradite **github tokene** iz **tajni**
|
||||
- Uk盗ite **github tokene** iz **tajni**
|
||||
- **Brisanje** rezultata **workflow-a** i **grana**
|
||||
- Dajte **više dozvola celoj organizaciji**
|
||||
- Kreirajte **webhook-ove** za exfiltraciju informacija
|
||||
@@ -216,7 +216,7 @@ Napomena da će se **nakon kreiranja** grane **zaštita grane primeniti na novu
|
||||
|
||||
### Impostor Commit-ovi - Bekdoor putem repo commit-ova
|
||||
|
||||
U Github-u je moguće **napraviti PR za repo iz forka**. Čak i ako PR **nije prihvaćen**, **commit** id unutar originalnog repoa će biti kreiran za fork verziju koda. Stoga, napadač **može da se oslanja na korišćenje specifičnog commit-a iz naizgled legitimnog repoa koji nije kreirao vlasnik repoa**.
|
||||
U Github-u je moguće **napraviti PR za repo iz forka**. Čak i ako PR **nije prihvaćen**, **commit** id unutar originalnog repoa će biti kreiran za fork verziju koda. Stoga, napadač **može da se oslanja na korišćenje specifičnog commita iz naizgled legitimnog repoa koji nije kreirao vlasnik repoa**.
|
||||
|
||||
Kao [**ovaj**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e):
|
||||
```yaml
|
||||
|
||||
@@ -7,22 +7,22 @@
|
||||
Na ovoj stranici ćete pronaći:
|
||||
|
||||
- **rezime svih uticaja** napadača koji uspe da pristupi Github Action
|
||||
- Različite načine za **pristup akciji**:
|
||||
- Različite načine da **dobijete pristup akciji**:
|
||||
- Imajući **dozvole** za kreiranje akcije
|
||||
- Zloupotreba **okidača** povezanih sa pull request-om
|
||||
- Zloupotreba **drugih tehnika spoljnog pristupa**
|
||||
- **Pivotiranje** iz već kompromitovanog repozitorijuma
|
||||
- Na kraju, odeljak o **tehnikama post-eksploatacije za zloupotrebu akcije iznutra** (uzrokovanje pomenutih uticaja)
|
||||
- Na kraju, odeljak o **tehnikama post-ekspolatacije za zloupotrebu akcije iznutra** (zbog pomenutih uticaja)
|
||||
|
||||
## Impacts Summary
|
||||
|
||||
Za uvod o [**Github Actions proverite osnovne informacije**](../basic-github-information.md#github-actions).
|
||||
|
||||
Ako možete **izvršiti proizvoljni kod u GitHub Actions** unutar **repozitorijuma**, možda ćete moći da:
|
||||
Ako možete da **izvršite proizvoljan kod u GitHub Actions** unutar **repozitorijuma**, možda ćete moći da:
|
||||
|
||||
- **Uk盗ite tajne** montirane na pipeline i **zloupotrebite privilegije pipeline-a** da dobijete neovlašćen pristup spoljnim platformama, kao što su AWS i GCP.
|
||||
- **Komprimujete implementacije** i druge **artefakte**.
|
||||
- Ako pipeline implementira ili skladišti resurse, mogli biste izmeniti konačni proizvod, omogućavajući napad na lanac snabdevanja.
|
||||
- **Kompromitujete implementacije** i druge **artefakte**.
|
||||
- Ako pipeline implementira ili čuva resurse, mogli biste da izmenite konačni proizvod, omogućavajući napad na lanac snabdevanja.
|
||||
- **Izvršite kod u prilagođenim radnicima** da zloupotrebite računske resurse i pivotirate na druge sisteme.
|
||||
- **Prepišete kod repozitorijuma**, u zavisnosti od dozvola povezanih sa `GITHUB_TOKEN`.
|
||||
|
||||
@@ -32,10 +32,10 @@ Ova "**tajna**" (koja dolazi iz `${{ secrets.GITHUB_TOKEN }}` i `${{ github.toke
|
||||
|
||||
<figure><img src="../../../images/image (86).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ovaj token je isti koji će **Github aplikacija koristiti**, tako da može pristupiti istim krajnjim tačkama: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)
|
||||
Ovaj token je isti onaj koji će **Github aplikacija koristiti**, tako da može pristupiti istim krajnjim tačkama: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)
|
||||
|
||||
> [!WARNING]
|
||||
> Github bi trebao da objavi [**tok**](https://github.com/github/roadmap/issues/74) koji **omogućava međurepozitorijumski** pristup unutar GitHub-a, tako da repo može pristupiti drugim internim repozitorijumima koristeći `GITHUB_TOKEN`.
|
||||
> Github bi trebao da objavi [**tok**](https://github.com/github/roadmap/issues/74) koji **omogućava međurepozitorijumski** pristup unutar GitHub-a, tako da repozitorijum može pristupiti drugim internim repozitorijumima koristeći `GITHUB_TOKEN`.
|
||||
|
||||
Možete videti moguće **dozvole** ovog tokena na: [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token)
|
||||
|
||||
@@ -134,7 +134,7 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
|
||||
```
|
||||
</details>
|
||||
|
||||
Moguće je proveriti dozvole date Github Token-u u drugim korisničkim repozitorijumima **proverom logova** akcija:
|
||||
Moguće je proveriti dozvole date Github Token-u u repozitorijumima drugih korisnika **proverom logova** akcija:
|
||||
|
||||
<figure><img src="../../../images/image (286).png" alt="" width="269"><figcaption></figcaption></figure>
|
||||
|
||||
@@ -151,9 +151,9 @@ U slučaju da članovi organizacije mogu **kreirati nove repozitorijume** i mož
|
||||
|
||||
### Izvršenje iz Nove Grane
|
||||
|
||||
Ako možete **kreirati novu granu u repozitorijumu koji već sadrži konfigurisan Github Action**, možete **modifikovati** to, **otpremiti** sadržaj, a zatim **izvršiti tu akciju iz nove grane**. Na ovaj način možete **ekstrahovati tajne na nivou repozitorijuma i organizacije** (ali morate znati kako se zovu).
|
||||
Ako možete **kreirati novu granu u repozitorijumu koji već sadrži konfigurisan Github Action**, možete ga **modifikovati**, **otpremiti** sadržaj, a zatim **izvršiti tu akciju iz nove grane**. Na ovaj način možete **izvući tajne na nivou repozitorijuma i organizacije** (ali morate znati kako se zovu).
|
||||
|
||||
Možete napraviti modifikovanu akciju izvršnom **ručno,** kada se **kreira PR** ili kada se **neki kod otpremi** (u zavisnosti od toga koliko želite da budete uočljivi):
|
||||
Možete napraviti modifikovanu akciju izvršnom **ručno,** kada se **PR kreira** ili kada se **neki kod otpremi** (u zavisnosti od toga koliko želite da budete uočljivi):
|
||||
```yaml
|
||||
on:
|
||||
workflow_dispatch: # Launch manually
|
||||
@@ -167,23 +167,23 @@ branches:
|
||||
```
|
||||
---
|
||||
|
||||
## Forked Execution
|
||||
## Forkovana Izvršenja
|
||||
|
||||
> [!NOTE]
|
||||
> Postoje različiti okidači koji bi mogli omogućiti napadaču da **izvrši Github akciju iz drugog repozitorijuma**. Ako su ti okidači loše konfigurisani, napadač bi mogao da ih kompromituje.
|
||||
|
||||
### `pull_request`
|
||||
|
||||
Okidač radnog toka **`pull_request`** će izvršiti radni tok svaki put kada se primi pull request uz neke izuzetke: prema zadatku, ako je to **prvi put** da **saradjujete**, neki **održavaoc** će morati da **odobri** **izvršenje** radnog toka:
|
||||
Okidač radnog toka **`pull_request`** će izvršiti radni tok svaki put kada se primi pull request uz neke izuzetke: po defaultu, ako je to **prvi put** da **saradjujete**, neki **održavaoc** će morati da **odobri** **izvršenje** radnog toka:
|
||||
|
||||
<figure><img src="../../../images/image (184).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> Kako je **podrazumevano ograničenje** za **prvake** u doprinosima, mogli biste doprineti **ispravljanjem važeće greške/pravopisne greške** i zatim poslati **druge PR-ove da zloupotrebite svoje nove `pull_request` privilegije**.
|
||||
> Pošto je **podrazumevano ograničenje** za **prvake** u doprinosima, mogli biste doprineti **ispravljanjem važeće greške/typo-a** i zatim poslati **druge PR-ove da zloupotrebite svoje nove `pull_request` privilegije**.
|
||||
>
|
||||
> **Testirao sam ovo i ne radi**: ~~Druga opcija bi bila da kreirate nalog sa imenom nekoga ko je doprineo projektu i obrisao njegov nalog.~~
|
||||
|
||||
Pored toga, prema zadatku **sprečava pisane dozvole** i **pristup tajnama** ciljanom repozitorijumu kao što je pomenuto u [**dokumentaciji**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories):
|
||||
Pored toga, po defaultu **sprečava pisane dozvole** i **pristup tajnama** ciljanom repozitorijumu kao što je pomenuto u [**dokumentaciji**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories):
|
||||
|
||||
> Sa izuzetkom `GITHUB_TOKEN`, **tajne se ne prosleđuju izvršiocu** kada se radni tok pokrene iz **forkovanog** repozitorijuma. **`GITHUB_TOKEN` ima dozvole samo za čitanje** u pull request-ima **iz forkovanih repozitorijuma**.
|
||||
|
||||
@@ -192,16 +192,16 @@ Napadač bi mogao da izmeni definiciju Github akcije kako bi izvršio proizvoljn
|
||||
> [!CAUTION]
|
||||
> **Da, ako napadač promeni u PR-u github akciju koja će biti pokrenuta, njegova Github akcija će biti ta koja će se koristiti, a ne ona iz originalnog repozitorijuma!**
|
||||
|
||||
Kako napadač takođe kontroliše kod koji se izvršava, čak i ako nema tajni ili pisanih dozvola na `GITHUB_TOKEN`, napadač bi mogao, na primer, **da otpremi zlonamerne artefakte**.
|
||||
Pošto napadač takođe kontroliše kod koji se izvršava, čak i ako nema tajni ili pisanih dozvola na `GITHUB_TOKEN`, napadač bi mogao, na primer, **da otpremi zlonamerne artefakte**.
|
||||
|
||||
### **`pull_request_target`**
|
||||
|
||||
Okidač radnog toka **`pull_request_target`** ima **pisane dozvole** za ciljani repozitorijum i **pristup tajnama** (i ne traži dozvolu).
|
||||
|
||||
Napomena: okidač radnog toka **`pull_request_target`** **izvršava se u osnovnom kontekstu** i ne u onom koji daje PR (da **ne izvršava nepouzdani kod**). Za više informacija o `pull_request_target` [**proverite dokumentaciju**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\
|
||||
Napomena da okidač radnog toka **`pull_request_target`** **radi u osnovnom kontekstu** i ne u onom koji daje PR (da **ne izvršava nepouzdani kod**). Za više informacija o `pull_request_target` [**proverite dokumentaciju**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\
|
||||
Pored toga, za više informacija o ovoj specifičnoj opasnoj upotrebi proverite ovaj [**github blog post**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/).
|
||||
|
||||
Može izgledati kao da je **izvršeni radni tok** onaj definisan u **osnovi** i **ne u PR-u**, pa je **sigurno** koristiti **`pull_request_target`**, ali postoje **neki slučajevi kada to nije**.
|
||||
Može izgledati kao da je **izvršeni radni tok** onaj definisan u **osnovi** i **ne u PR-u**, da je **sigurno** koristiti **`pull_request_target`**, ali postoje **neki slučajevi kada to nije**.
|
||||
|
||||
A ovaj će imati **pristup tajnama**.
|
||||
|
||||
@@ -209,7 +209,7 @@ A ovaj će imati **pristup tajnama**.
|
||||
|
||||
Okidač [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) omogućava pokretanje radnog toka iz drugog kada je `završen`, `tražen` ili `u toku`.
|
||||
|
||||
U ovom primeru, radni tok je konfiguran da se izvrši nakon što se završi odvojeni "Pokreni testove" radni tok:
|
||||
U ovom primeru, radni tok je konfiguran da se pokrene nakon što se završi odvojeni "Pokreni testove" radni tok:
|
||||
```yaml
|
||||
on:
|
||||
workflow_run:
|
||||
@@ -217,31 +217,31 @@ workflows: [Run Tests]
|
||||
types:
|
||||
- completed
|
||||
```
|
||||
Moreover, according to the docs: Workflow pokrenut događajem `workflow_run` može **pristupiti tajnama i pisati tokene, čak i ako prethodni workflow nije**.
|
||||
Pored toga, prema dokumentaciji: Radni tok pokrenut događajem `workflow_run` može **pristupiti tajnama i pisati tokene, čak i ako prethodni radni tok nije**.
|
||||
|
||||
Ova vrsta workflow-a može biti napadnuta ako **zavisi** od **workflow-a** koji može biti **pokrenut** od strane spoljnog korisnika putem **`pull_request`** ili **`pull_request_target`**. Nekoliko ranjivih primera može se [**pronaći u ovom blogu**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Prvi se sastoji od **`workflow_run`** pokrenutog workflow-a koji preuzima napadačev kod: `${{ github.event.pull_request.head.sha }}`\
|
||||
Drugi se sastoji od **prosleđivanja** **artifact-a** iz **nepouzdanog** koda u **`workflow_run`** workflow i korišćenja sadržaja ovog artifact-a na način koji ga čini **ranjivim na RCE**.
|
||||
Ova vrsta radnog toka može biti napadnuta ako se **oslanja** na **radni tok** koji može biti **pokrenut** od strane spoljnog korisnika putem **`pull_request`** ili **`pull_request_target`**. Nekoliko ranjivih primera može se [**pronaći u ovom blogu**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Prvi se sastoji od **`workflow_run`** pokrenutog radnog toka koji preuzima kod napadača: `${{ github.event.pull_request.head.sha }}`\
|
||||
Drugi se sastoji od **prosleđivanja** **artefakta** iz **nepouzdanog** koda u **`workflow_run`** radni tok i korišćenja sadržaja ovog artefakta na način koji ga čini **ranjivim na RCE**.
|
||||
|
||||
### `workflow_call`
|
||||
|
||||
TODO
|
||||
|
||||
TODO: Proveriti da li kada se izvršava iz pull_request-a korišćeni/preuzeti kod dolazi iz originala ili iz forkovanog PR-a
|
||||
TODO: Proveriti da li kada se izvršava iz `pull_request`, korišćeni/preuzeti kod dolazi iz originala ili iz forkovanog PR
|
||||
|
||||
## Zloupotreba Forkovane Izvršavanja
|
||||
|
||||
Pomenuli smo sve načine na koje spoljašnji napadač može uspeti da pokrene github workflow, sada hajde da pogledamo kako ove izvršavanja, ako su loše konfigurisane, mogu biti zloupotrebljene:
|
||||
Pomenuli smo sve načine na koje bi spoljašnji napadač mogao uspeti da pokrene github radni tok, sada hajde da pogledamo kako bi ove izvršavanja, ako su loše konfigurisane, mogle biti zloupotrebljene:
|
||||
|
||||
### Nepouzdan checkout izvršavanje
|
||||
|
||||
U slučaju **`pull_request`,** workflow će biti izvršen u **kontekstu PR-a** (tako da će izvršiti **maliciozni kod PR-a**), ali neko mora prvo da **autorizuje** i biće izvršen sa nekim [ograničenjima](./#pull_request).
|
||||
U slučaju **`pull_request`,** radni tok će biti izvršen u **kontekstu PR** (tako da će izvršiti **maliciozni kod PR-a**), ali neko mora prvo da **odobri** i biće izvršen sa nekim [ograničenjima](./#pull_request).
|
||||
|
||||
U slučaju workflow-a koji koristi **`pull_request_target` ili `workflow_run`** koji zavisi od workflow-a koji može biti pokrenut iz **`pull_request_target` ili `pull_request`**, kod iz originalnog repozitorijuma će biti izvršen, tako da **napadač ne može kontrolisati izvršeni kod**.
|
||||
U slučaju radnog toka koji koristi **`pull_request_target` ili `workflow_run`** koji zavisi od radnog toka koji može biti pokrenut iz **`pull_request_target` ili `pull_request`**, kod iz originalnog repozitorijuma će biti izvršen, tako da **napadač ne može kontrolisati izvršeni kod**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Međutim, ako **akcija** ima **eksplicitni PR checkout** koji će **uzeti kod iz PR-a** (a ne iz osnove), koristiće napadačev kontrolisani kod. Na primer (proverite liniju 12 gde se preuzima kod PR-a):
|
||||
> Međutim, ako **akcija** ima **eksplicitni PR checkout** koji će **uzeti kod iz PR** (a ne iz osnove), koristiće kod pod kontrolom napadača. Na primer (proverite liniju 12 gde se preuzima kod PR-a):
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml"># INSECURE. Pruženo samo kao primer.
|
||||
<pre class="language-yaml"><code class="lang-yaml"># INSECURE. Provided as an example only.
|
||||
on:
|
||||
pull_request_target
|
||||
|
||||
@@ -266,13 +266,13 @@ arg1: ${{ secrets.supersecret }}
|
||||
- uses: fakerepo/comment-on-pr@v1
|
||||
with:
|
||||
message: |
|
||||
Hvala!
|
||||
Thank you!
|
||||
</code></pre>
|
||||
|
||||
Potencijalno **nepouzdan kod se izvršava tokom `npm install` ili `npm build`** jer su skripte za izgradnju i referencirane **pakete pod kontrolom autora PR-a**.
|
||||
Potencijalno **nepouzdan kod se izvršava tokom `npm install` ili `npm build`** jer su skripte za izgradnju i referencirani **paketi pod kontrolom autora PR-a**.
|
||||
|
||||
> [!WARNING]
|
||||
> Github dork za pretragu ranjivih akcija je: `event.pull_request pull_request_target extension:yml` međutim, postoje različiti načini za konfiguraciju poslova da se izvršavaju sigurno čak i ako je akcija konfigurisana nesigurno (kao što je korišćenje uslovnih izraza o tome ko je akter koji generiše PR).
|
||||
> Github dork za pretragu ranjivih akcija je: `event.pull_request pull_request_target extension:yml` međutim, postoje različiti načini za konfiguraciju poslova da budu izvršeni sigurno čak i ako je akcija konfigurisana nesigurno (poput korišćenja uslovnih izraza o tome ko je akter koji generiše PR).
|
||||
|
||||
### Kontekst Injekcije Skripti <a href="#understanding-the-risk-of-script-injections" id="understanding-the-risk-of-script-injections"></a>
|
||||
|
||||
@@ -284,11 +284,11 @@ gh-actions-context-script-injections.md
|
||||
|
||||
### **GITHUB_ENV Injekcija Skripti** <a href="#what-is-usdgithub_env" id="what-is-usdgithub_env"></a>
|
||||
|
||||
Iz dokumenata: Možete učiniti **promenljivu okruženja dostupnom za sve naredne korake** u workflow poslu tako što ćete definisati ili ažurirati promenljivu okruženja i napisati to u **`GITHUB_ENV`** datoteku okruženja.
|
||||
Prema dokumentaciji: Možete učiniti **promenljivu okruženja dostupnom za sve naredne korake** u radnom toku tako što ćete definisati ili ažurirati promenljivu okruženja i napisati to u **`GITHUB_ENV`** datoteku okruženja.
|
||||
|
||||
Ako bi napadač mogao **ubaciti bilo koju vrednost** unutar ove **env** promenljive, mogao bi ubaciti env promenljive koje bi mogle izvršiti kod u narednim koracima kao što su **LD_PRELOAD** ili **NODE_OPTIONS**.
|
||||
|
||||
Na primer ([**ovo**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) i [**ovo**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), zamislite workflow koji veruje da je učitani artifact da čuva svoj sadržaj unutar **`GITHUB_ENV`** env promenljive. Napadač bi mogao da učita nešto poput ovoga da bi ga kompromitovao:
|
||||
Na primer ([**ovo**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) i [**ovo**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), zamislite radni tok koji veruje da je učitani artefakt da skladišti svoj sadržaj unutar **`GITHUB_ENV`** env promenljive. Napadač bi mogao da učita nešto poput ovoga da bi ga kompromitovao:
|
||||
|
||||
<figure><img src="../../../images/image (261).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -296,11 +296,11 @@ Na primer ([**ovo**](https://www.legitsecurity.com/blog/github-privilege-escalat
|
||||
|
||||
#### [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact)
|
||||
|
||||
Kao što je pomenuto u [**ovom blog postu**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), ova Github Akcija omogućava pristup artifact-ima iz različitih workflow-a i čak repozitorijuma.
|
||||
Kao što je pomenuto u [**ovom blog postu**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), ova Github Akcija omogućava pristup artefaktima iz različitih radnih tokova i čak repozitorijuma.
|
||||
|
||||
Problem je u tome što ako **`path`** parametar nije postavljen, artifact se ekstrahuje u trenutni direktorijum i može prepisati datoteke koje bi kasnije mogle biti korišćene ili čak izvršene u workflow-u. Stoga, ako je Artifact ranjiv, napadač bi mogao da zloupotrebi ovo da kompromituje druge workflow-e koji veruju Artifact-u.
|
||||
Glavni problem je što ako **`path`** parametar nije postavljen, artefakt se ekstrahuje u trenutni direktorijum i može prepisati datoteke koje bi mogle biti kasnije korišćene ili čak izvršene u radnom toku. Stoga, ako je Artefakt ranjiv, napadač bi mogao da zloupotrebi ovo da kompromituje druge radne tokove koji veruju Artefaktu.
|
||||
|
||||
Primer ranjivog workflow-a:
|
||||
Primer ranjivog radnog toka:
|
||||
```yaml
|
||||
on:
|
||||
workflow_run:
|
||||
@@ -323,7 +323,7 @@ with:
|
||||
name: artifact
|
||||
path: ./script.py
|
||||
```
|
||||
Ovo bi moglo biti napadnuto ovim radnim tokom:
|
||||
Ovo bi moglo biti napadnuto ovom radnom procedurom:
|
||||
```yaml
|
||||
name: "some workflow"
|
||||
on: pull_request
|
||||
@@ -356,9 +356,9 @@ Ako su drugi repozitorijumi koristili **zavisnosti iz ovih korisničkih repozito
|
||||
## Repo Pivoting
|
||||
|
||||
> [!NOTE]
|
||||
> U ovom odeljku ćemo govoriti o tehnikama koje bi omogućile **pivotiranje sa jednog repozitorijuma na drugi**, pod pretpostavkom da imamo neku vrstu pristupa prvom (proverite prethodni odeljak).
|
||||
> U ovoj sekciji ćemo govoriti o tehnikama koje bi omogućile **pivotiranje sa jednog repozitorijuma na drugi** pod pretpostavkom da imamo neku vrstu pristupa na prvom (proverite prethodnu sekciju).
|
||||
|
||||
### Trovanje Kešom
|
||||
### Trovanje Keša
|
||||
|
||||
Keš se održava između **izvršavanja radnih tokova u istoj grani**. Što znači da ako napadač **kompromituje** **paket** koji se zatim čuva u kešu i **preuzima** i izvršava ga **privilegovaniji** radni tok, on će moći da **kompromituje** i taj radni tok.
|
||||
|
||||
@@ -366,7 +366,7 @@ Keš se održava između **izvršavanja radnih tokova u istoj grani**. Što zna
|
||||
gh-actions-cache-poisoning.md
|
||||
{{#endref}}
|
||||
|
||||
### Trovanje Artefaktima
|
||||
### Trovanje Artefakata
|
||||
|
||||
Radni tokovi mogu koristiti **artefakte iz drugih radnih tokova i čak repozitorijuma**, ako napadač uspe da **kompromituje** Github Akciju koja **otprema artefakt** koji se kasnije koristi od strane drugog radnog toka, on bi mogao da **kompromituje druge radne tokove**:
|
||||
|
||||
@@ -466,11 +466,11 @@ key: ${{ secrets.PUBLISH_KEY }}
|
||||
|
||||
### Zloupotreba samostalno hostovanih izvršilaca
|
||||
|
||||
Način da se pronađe koje **Github Actions se izvršavaju u ne-github infrastrukturi** je pretraga za **`runs-on: self-hosted`** u konfiguraciji yaml za Github Action.
|
||||
Način da se pronađe koje **Github akcije se izvršavaju u ne-github infrastrukturi** je pretraga za **`runs-on: self-hosted`** u konfiguraciji yaml za Github akcije.
|
||||
|
||||
**Samostalno hostovani** izvršioci mogu imati pristup **dodatnim osetljivim informacijama**, drugim **mrežnim sistemima** (ranjivi krajnji tački u mreži? servis za metapodatke?) ili, čak i ako je izolovan i uništen, **više od jedne akcije može biti pokrenuto u isto vreme** i zlonamerna može **ukrasti tajne** druge.
|
||||
|
||||
U samostalno hostovanim izvršiocima takođe je moguće dobiti **tajne iz \_Runner.Listener**\_\*\* procesa\*\* koji će sadržati sve tajne radnih tokova u bilo kojoj fazi dumpovanjem njegove memorije:
|
||||
U samostalno hostovanim izvršiocima takođe je moguće dobiti **tajne iz \_Runner.Listener**\_\*\* procesa\*\* koji će sadržati sve tajne radnih tokova u bilo kojoj fazi dumpovanjem svoje memorije:
|
||||
```bash
|
||||
sudo apt-get install -y gdb
|
||||
sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ print $1 }')"
|
||||
@@ -517,12 +517,12 @@ ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ e
|
||||
|
||||
Kao što ste mogli videti u prethodnom kodu, Github registry je hostovan na **`ghcr.io`**.
|
||||
|
||||
Korisnik sa pravima čitanja nad repozitorijumom će moći da preuzme Docker sliku koristeći lični pristupni token:
|
||||
Korisnik sa dozvolama za čitanje nad repozitorijumom će moći da preuzme Docker sliku koristeći lični pristupni token:
|
||||
```bash
|
||||
echo $gh_token | docker login ghcr.io -u <username> --password-stdin
|
||||
docker pull ghcr.io/<org-name>/<repo_name>:<tag>
|
||||
```
|
||||
Then, the user could search for **leaked secrets in the Docker image layers:**
|
||||
Zatim, korisnik može pretraživati **leakovane tajne u slojevima Docker slike:**
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics
|
||||
@@ -534,9 +534,9 @@ https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-m
|
||||
|
||||
## Sakrivanje tragova
|
||||
|
||||
(Teknika iz [**ovde**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Prvo, svaki PR koji je podnet je jasno vidljiv javnosti na Github-u i ciljanom GitHub nalogu. Na GitHub-u po defaultu, **ne možemo obrisati PR sa interneta**, ali postoji obrt. Za GitHub naloge koji su **suspendovani** od strane GitHub-a, svi njihovi **PR-ovi se automatski brišu** i uklanjaju sa interneta. Dakle, da biste sakrili svoju aktivnost, potrebno je da ili dobijete **suspendovan GitHub nalog ili da vam nalog bude označen**. Ovo bi **sakrilo sve vaše aktivnosti** na GitHub-u sa interneta (u suštini uklonilo sve vaše exploit PR-ove)
|
||||
(Teknika iz [**ovde**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Prvo, svaki PR koji je podnet je jasno vidljiv javnosti na Github-u i ciljanom GitHub nalogu. Na GitHub-u po defaultu, **ne možemo obrisati PR sa interneta**, ali postoji caka. Za GitHub naloge koji su **suspendovani** od strane GitHub-a, svi njihovi **PR-ovi se automatski brišu** i uklanjaju sa interneta. Dakle, da biste sakrili svoju aktivnost, potrebno je da ili dobijete **suspendovan GitHub nalog ili da vam nalog bude označen**. Ovo bi **sakrilo sve vaše aktivnosti** na GitHub-u sa interneta (u suštini uklonilo sve vaše exploit PR-ove)
|
||||
|
||||
Organizacija na GitHub-u je veoma proaktivna u izveštavanju naloga GitHub-u. Sve što treba da uradite je da podelite "neke stvari" u Issue i oni će se pobrinuti da vaš nalog bude suspendovan za 12 sati :p i eto, učinili ste svoj exploit nevidljivim na github-u.
|
||||
Organizacija na GitHub-u je veoma proaktivna u izveštavanju naloga GitHub-u. Sve što treba da uradite je da podelite "neke stvari" u Issue i oni će se pobrinuti da vaš nalog bude suspendovan za 12 sati :p i eto, učinili ste svoj exploit nevidljivim na GitHub-u.
|
||||
|
||||
> [!WARNING]
|
||||
> Jedini način na koji organizacija može da sazna da su bili meta je da proveri GitHub logove iz SIEM-a, jer bi iz GitHub UI PR bio uklonjen.
|
||||
|
||||
@@ -1 +1 @@
|
||||
# GH Actions - Cache Poisoning
|
||||
# GH Actions - Zagađenje keša
|
||||
|
||||
@@ -1 +1 @@
|
||||
# Gh Actions - Kontekstualne Injekcije Skripti
|
||||
# Gh Actions - Injekcije skripti u kontekstu
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Accessible Deleted Data in Github
|
||||
# Pristupačni Obbrisani Podaci na Githubu
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Ovi načini za pristup podacima sa GitHub-a koji su navodno obrisani su [**prijavljeni u ovom blog postu**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github).
|
||||
Ovi načini pristupa podacima sa Github-a koji su navodno obrisani su [**prijavljeni u ovom blog postu**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github).
|
||||
|
||||
## Accessing Deleted Fork Data
|
||||
## Pristup Obbrisanom Fork Podacima
|
||||
|
||||
1. Forkujete javni repozitorijum
|
||||
2. Komitujete kod u vaš fork
|
||||
@@ -13,31 +13,44 @@ Ovi načini za pristup podacima sa GitHub-a koji su navodno obrisani su [**prija
|
||||
> [!CAUTION]
|
||||
> Podaci komitovani u obrisanom forku su i dalje dostupni.
|
||||
|
||||
## Accessing Deleted Repo Data
|
||||
## Pristup Obbrisanom Repo Podacima
|
||||
|
||||
1. Imate javni repozitorijum na GitHub-u.
|
||||
2. Korisnik fork-uje vaš repozitorijum.
|
||||
1. Imate javni repo na GitHub-u.
|
||||
2. Korisnik fork-uje vaš repo.
|
||||
3. Komitujete podatke nakon što su fork-ovali (i nikada ne sinhronizuju svoj fork sa vašim ažuriranjima).
|
||||
4. Brišete ceo repozitorijum.
|
||||
4. Brišete ceo repo.
|
||||
|
||||
> [!CAUTION]
|
||||
> Čak i ako ste obrisali vaš repozitorijum, sve promene napravljene na njemu su i dalje dostupne kroz forke.
|
||||
> Čak i ako ste obrisali vaš repo, sve promene napravljene na njemu su i dalje dostupne kroz forke.
|
||||
|
||||
## Accessing Private Repo Data
|
||||
## Pristup Privatnim Repo Podacima
|
||||
|
||||
1. Kreirate privatni repozitorijum koji će na kraju postati javan.
|
||||
2. Kreirate privatnu, internu verziju tog repozitorijuma (putem forkovanja) i komitujete dodatni kod za funkcije koje nećete učiniti javnim.
|
||||
1. Kreirate privatni repo koji će na kraju postati javan.
|
||||
2. Kreirate privatnu, internu verziju tog repoa (putem fork-ovanja) i komitujete dodatni kod za funkcije koje nećete učiniti javnim.
|
||||
3. Činite vaš “upstream” repozitorijum javnim i zadržavate vaš fork privatnim.
|
||||
|
||||
> [!CAUTION]
|
||||
> Moguće je pristupiti svim podacima koji su poslati u internu fork u vremenu između kada je interna fork kreirana i kada je javna verzija postala javna.
|
||||
> Moguće je pristupiti svim podacima koji su poslati na internu fork u vremenu između kada je interna fork kreirana i kada je javna verzija postala javna.
|
||||
|
||||
## How to discover commits from deleted/hidden forks
|
||||
## Kako otkriti komite iz obrisanih/skrivenih forka
|
||||
|
||||
Isti blog post predlaže 2 opcije:
|
||||
|
||||
### Directly accessing the commit
|
||||
### Direktan pristup komitu
|
||||
|
||||
Ako je poznata vrednost ID-a komita (sha-1), moguće je pristupiti mu na `https://github.com/<user/org>/<repo>/commit/<commit_hash>`
|
||||
|
||||
### Brute-forcing short SHA-1 values
|
||||
### Brute-forcing kratkih SHA-1 vrednosti
|
||||
|
||||
Isto je pristupiti oba od ovih:
|
||||
|
||||
- [https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14](https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14)
|
||||
- [https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463](https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463)
|
||||
|
||||
I poslednji koristi kratak sha-1 koji se može bruteforce-ovati.
|
||||
|
||||
## Reference
|
||||
|
||||
- [https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -16,7 +16,7 @@ I konačno, **repozitorijumi mogu imati posebne mehanizme zaštite**.
|
||||
|
||||
### Uloge u preduzeću
|
||||
|
||||
- **Vlasnik preduzeća**: Osobe sa ovom ulogom mogu **upravljati administratorima, upravljati organizacijama unutar preduzeća, upravljati postavkama preduzeća, sprovoditi politiku širom organizacija**. Međutim, oni **ne mogu pristupiti postavkama organizacije ili sadržaju** osim ako nisu postavljeni za vlasnika organizacije ili im nije dat direktan pristup repozitorijumu koji poseduje organizacija.
|
||||
- **Vlasnik preduzeća**: Osobe sa ovom ulogom mogu **upravljati administratorima, upravljati organizacijama unutar preduzeća, upravljati postavkama preduzeća, sprovoditi politiku širom organizacija**. Međutim, **ne mogu pristupiti postavkama organizacije ili sadržaju** osim ako nisu postavljeni za vlasnika organizacije ili im nije dat direktan pristup repozitorijumu koji poseduje organizacija.
|
||||
- **Članovi preduzeća**: Članovi organizacija koje poseduje vaše preduzeće su takođe **automatski članovi preduzeća**.
|
||||
|
||||
### Uloge u organizaciji
|
||||
@@ -24,7 +24,7 @@ I konačno, **repozitorijumi mogu imati posebne mehanizme zaštite**.
|
||||
U organizaciji korisnici mogu imati različite uloge:
|
||||
|
||||
- **Vlasnici organizacije**: Vlasnici organizacije imaju **potpun pristup administraciji vaše organizacije**. Ova uloga bi trebala biti ograničena, ali ne na manje od dve osobe, u vašoj organizaciji.
|
||||
- **Članovi organizacije**: **Podrazumevana**, neadministrativna uloga za **ljude u organizaciji** je član organizacije. Po defaultu, članovi organizacije **imaju određeni broj dozvola**.
|
||||
- **Članovi organizacije**: **Podrazumevana**, ne-administrativna uloga za **ljude u organizaciji** je član organizacije. Po defaultu, članovi organizacije **imaju određeni broj dozvola**.
|
||||
- **Menadžeri naplate**: Menadžeri naplate su korisnici koji mogu **upravljati postavkama naplate za vašu organizaciju**, kao što su informacije o plaćanju.
|
||||
- **Menadžeri bezbednosti**: To je uloga koju vlasnici organizacije mogu dodeliti bilo kojem timu u organizaciji. Kada se primeni, daje svakom članu tima dozvole da **upravljaju bezbednosnim upozorenjima i postavkama širom vaše organizacije, kao i dozvole za čitanje za sve repozitorijume** u organizaciji.
|
||||
- Ako vaša organizacija ima tim za bezbednost, možete koristiti ulogu menadžera bezbednosti da članovima tima date minimalan pristup koji im je potreban za organizaciju.
|
||||
@@ -37,15 +37,15 @@ Možete **uporediti dozvole** ovih uloga u ovoj tabeli: [https://docs.github.com
|
||||
|
||||
Na _https://github.com/organizations/\<org_name>/settings/member_privileges_ možete videti **dozvole koje korisnici imaju samo zato što su deo organizacije**.
|
||||
|
||||
Postavke ovde konfigurisane će ukazivati na sledeće dozvole članova organizacije:
|
||||
Postavke ovde konfigurirane će ukazivati na sledeće dozvole članova organizacije:
|
||||
|
||||
- Biti administrator, pisac, čitalac ili bez dozvole nad svim repozitorijumima organizacije.
|
||||
- Da li članovi mogu kreirati privatne, interne ili javne repozitorijume.
|
||||
- Da li je moguće fork-ovati repozitorijume.
|
||||
- Da li je moguće pozvati spoljne saradnike.
|
||||
- Da li se mogu objavljivati javne ili privatne stranice.
|
||||
- Ako članovi mogu kreirati privatne, interne ili javne repozitorijume.
|
||||
- Ako je moguće fork-ovati repozitorijume.
|
||||
- Ako je moguće pozvati spoljne saradnike.
|
||||
- Ako se mogu objaviti javne ili privatne stranice.
|
||||
- Dozvole koje administratori imaju nad repozitorijumima.
|
||||
- Da li članovi mogu kreirati nove timove.
|
||||
- Ako članovi mogu kreirati nove timove.
|
||||
|
||||
### Uloge u repozitorijumu
|
||||
|
||||
@@ -85,7 +85,7 @@ Možete konfigurisati svoj nalog sa jednim ili više javnih ključeva koji omogu
|
||||
|
||||
#### **GPG ključevi**
|
||||
|
||||
Ne **možete se pretvarati da ste korisnik sa ovim ključevima**, ali ako ih ne koristite, može biti moguće da **budete otkriveni zbog slanja commit-a bez potpisa**. Saznajte više o [vigilant mode ovde](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode).
|
||||
Ne možete **imiti korisnika sa ovim ključevima**, ali ako ih ne koristite, može biti moguće da **budete otkriveni zbog slanja commit-a bez potpisa**. Saznajte više o [vigilant mode here](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode).
|
||||
|
||||
### **Lični pristupni tokeni**
|
||||
|
||||
@@ -93,7 +93,7 @@ Možete generisati lični pristupni token da **dajte aplikaciji pristup vašem n
|
||||
|
||||
### Oauth aplikacije
|
||||
|
||||
Oauth aplikacije mogu vas pitati za dozvole **da pristupe delu vaših github informacija ili da se pretvaraju da ste vi** da bi obavili neke radnje. Uobičajen primer ove funkcionalnosti je **dugme za prijavu sa github-om** koje možete pronaći na nekim platformama.
|
||||
Oauth aplikacije mogu vas pitati za dozvole **da pristupite delu vaših github informacija ili da imitirate vas** da obavite neke radnje. Uobičajen primer ove funkcionalnosti je **dugme prijave sa github-om** koje možete pronaći na nekim platformama.
|
||||
|
||||
- Možete **kreirati** svoje **Oauth aplikacije** na [https://github.com/settings/developers](https://github.com/settings/developers)
|
||||
- Možete videti sve **Oauth aplikacije koje imaju pristup vašem nalogu** na [https://github.com/settings/applications](https://github.com/settings/applications)
|
||||
@@ -102,41 +102,41 @@ Oauth aplikacije mogu vas pitati za dozvole **da pristupe delu vaših github inf
|
||||
|
||||
Neke **preporuke za bezbednost**:
|
||||
|
||||
- **OAuth aplikacija** bi uvek trebala **delovati kao autentifikovani GitHub korisnik širom celog GitHub-a** (na primer, kada pruža obaveštenja korisnicima) i sa pristupom samo do specificiranih opsega.
|
||||
- **OAuth aplikacija** uvek treba da **deluje kao autentifikovani GitHub korisnik širom celog GitHub-a** (na primer, kada pruža obaveštenja korisnicima) i sa pristupom samo do specificiranih opsega.
|
||||
- Oauth aplikacija može se koristiti kao provajder identiteta omogućavanjem "Prijava sa GitHub-om" za autentifikovanog korisnika.
|
||||
- **Ne** pravite **OAuth aplikaciju** ako želite da vaša aplikacija deluje na **jednom repozitorijumu**. Sa `repo` Oauth opsegom, Oauth aplikacije mogu **delovati na \_svi\_\*\* repozitorijumima autentifikovanog korisnika\*\*.
|
||||
- **Ne** pravite Oauth aplikaciju da deluje kao aplikacija za vaš **tim ili kompaniju**. Oauth aplikacije se autentifikuju kao **jedan korisnik**, tako da ako jedna osoba kreira Oauth aplikaciju za korišćenje u kompaniji, a zatim napusti kompaniju, niko drugi neće imati pristup.
|
||||
- **Više** ovde [ovde](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps).
|
||||
- **Nemojte** praviti **OAuth aplikaciju** ako želite da vaša aplikacija deluje na **jednom repozitorijumu**. Sa `repo` Oauth opsegom, Oauth aplikacije mogu **delovati na _svim_** repozitorijumima autentifikovanog korisnika.
|
||||
- **Nemojte** praviti Oauth aplikaciju da deluje kao aplikacija za vaš **tim ili kompaniju**. Oauth aplikacije se autentifikuju kao **jedan korisnik**, tako da ako jedna osoba kreira Oauth aplikaciju za korišćenje u kompaniji, a zatim napusti kompaniju, niko drugi neće imati pristup.
|
||||
- **Više** ovde [more](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps).
|
||||
|
||||
### Github aplikacije
|
||||
|
||||
Github aplikacije mogu tražiti dozvole da **pristupe vašim github informacijama ili da se pretvaraju da ste vi** da bi obavili specifične radnje nad specifičnim resursima. U Github aplikacijama morate navesti repozitorijume kojima će aplikacija imati pristup.
|
||||
Github aplikacije mogu tražiti dozvole da **pristupite vašim github informacijama ili da imitirate vas** da obavite specifične radnje nad specifičnim resursima. U Github aplikacijama morate navesti repozitorijume kojima će aplikacija imati pristup.
|
||||
|
||||
- Da biste instalirali GitHub aplikaciju, morate biti **vlasnik organizacije ili imati administratorske dozvole** u repozitorijumu.
|
||||
- GitHub aplikacija bi trebala **biti povezana sa ličnim nalogom ili organizacijom**.
|
||||
- Možete kreirati svoju GitHub aplikaciju na [https://github.com/settings/apps](https://github.com/settings/apps)
|
||||
- Možete videti sve **GitHub aplikacije koje imaju pristup vašem nalogu** na [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations)
|
||||
- Ovo su **API krajnje tačke za GitHub aplikacije** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). U zavisnosti od dozvola aplikacije, moći će da pristupi nekima od njih.
|
||||
- GitHub aplikacija treba da **poveže sa ličnim nalogom ili organizacijom**.
|
||||
- Možete kreirati svoju Github aplikaciju na [https://github.com/settings/apps](https://github.com/settings/apps)
|
||||
- Možete videti sve **Github aplikacije koje imaju pristup vašem nalogu** na [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations)
|
||||
- Ovo su **API krajnje tačke za Github aplikacije** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). U zavisnosti od dozvola aplikacije, moći će da pristupi nekim od njih.
|
||||
- Možete videti instalirane aplikacije u **organizaciji** na _https://github.com/organizations/\<org_name>/settings/installations_
|
||||
|
||||
Neke preporuke za bezbednost:
|
||||
|
||||
- GitHub aplikacija bi trebala **preduzimati radnje nezavisno od korisnika** (osim ako aplikacija koristi [token za korisnika na serveru](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests)). Da biste održali token za pristup korisnika na serveru sigurnijim, možete koristiti pristupne tokene koji će isteći 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 pristup korisnika na serveru](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)."
|
||||
- GitHub aplikacija treba da **preduzima radnje nezavisno od korisnika** (osim ako aplikacija koristi [user-to-server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) token). Da biste zadržali korisničke pristupne tokene sigurnijim, možete koristiti pristupne tokene koji će isteći nakon 8 sati, i osvežavajući token koji se može zameniti za novi pristupni token. Za više informacija, pogledajte "[Osvežavanje korisničkih pristupnih tokena](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)."
|
||||
- Uverite se da se GitHub aplikacija integriše sa **specifičnim repozitorijumima**.
|
||||
- GitHub aplikacija bi trebala **biti povezana sa ličnim nalogom ili organizacijom**.
|
||||
- GitHub aplikacija treba da **poveže sa ličnim nalogom ili organizacijom**.
|
||||
- Ne očekujte da GitHub aplikacija zna i radi sve što korisnik može.
|
||||
- **Ne koristite GitHub aplikaciju ako vam je potrebna samo usluga "Prijava sa GitHub-om"**. Ali GitHub aplikacija može koristiti [tok identifikacije korisnika](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) da prijavi korisnike _i_ obavi druge stvari.
|
||||
- **Nemojte koristiti GitHub aplikaciju ako vam je potrebna samo usluga "Prijava sa GitHub-om"**. Ali GitHub aplikacija može koristiti [tokene za identifikaciju korisnika](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) da prijavi korisnike _i_ obavi druge stvari.
|
||||
- Ne pravite GitHub aplikaciju ako _samo_ želite da delujete kao GitHub korisnik i radite sve što taj korisnik može.
|
||||
- Ako koristite svoju aplikaciju sa GitHub Actions i želite da modifikujete datoteke radnog toka, morate se autentifikovati u ime korisnika sa Oauth tokenom koji uključuje `workflow` opseg. Korisnik mora imati administratorske ili pisane dozvole za repozitorijum koji sadrži datoteku radnog toka. Za više informacija, pogledajte "[Razumevanje opsega za Oauth aplikacije](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)."
|
||||
- **Više** ovde [ovde](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps).
|
||||
- **Više** ovde [more](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps).
|
||||
|
||||
### Github Actions
|
||||
|
||||
Ovo **nije način za autentifikaciju na github-u**, ali **maliciozna** Github akcija bi mogla dobiti **neovlašćen pristup github-u** i **u zavisnosti** od **privilegija** datih akciji, moglo bi se izvršiti nekoliko **različitih napada**. Pogledajte u nastavku za više informacija.
|
||||
Ovo **nije način za autentifikaciju u github-u**, ali **maliciozna** Github akcija bi mogla dobiti **neovlašćen pristup github-u** i **u zavisnosti** od **privilegija** datih akciji, moglo bi se izvršiti nekoliko **različitih napada**. Pogledajte u nastavku za više informacija.
|
||||
|
||||
## Git akcije
|
||||
|
||||
Git akcije omogućavaju automatizaciju **izvršavanja koda kada se dogodi događaj**. Obično je izvršeni kod **neka vrsta povezanosti sa kodom repozitorijuma** (možda izgradnja docker kontejnera ili provera da PR ne sadrži tajne).
|
||||
Git akcije omogućavaju automatizaciju **izvršavanja koda kada se dogodi događaj**. Obično je izvršeni kod **neka vrsta povezanosti sa kodom repozitorijuma** (možda izgraditi docker kontejner ili proveriti da PR ne sadrži tajne).
|
||||
|
||||
### Konfiguracija
|
||||
|
||||
@@ -144,13 +144,13 @@ Na _https://github.com/organizations/\<org_name>/settings/actions_ moguće je pr
|
||||
|
||||
Moguće je potpuno zabraniti korišćenje github akcija, **dozvoliti sve github akcije**, ili samo dozvoliti određene akcije.
|
||||
|
||||
Takođe je moguće konfigurisati **ko treba da odobri pokretanje Github akcije** i **dozvole GITHUB_TOKEN** Github akcije kada se pokrene.
|
||||
Takođe je moguće konfigurisati **ko treba da dobije odobrenje za pokretanje Github akcije** i **dozvole GITHUB_TOKEN** Github akcije kada se pokrene.
|
||||
|
||||
### Git tajne
|
||||
|
||||
Github akcije obično trebaju neku vrstu tajni da bi interagovale sa github-om ili aplikacijama trećih strana. Da bi se **izbeglo stavljanje u čistom tekstu** u repozitorijum, github omogućava da se one postave kao **Tajne**.
|
||||
|
||||
Ove tajne mogu biti konfigurisane **za repozitorijum ili za celu organizaciju**. Zatim, da bi **Akcija mogla da pristupi tajni**, potrebno je da je deklarisete kao:
|
||||
Ove tajne mogu biti konfigurirane **za repozitorijum ili za celu organizaciju**. Zatim, da bi **Akcija mogla da pristupi tajni**, potrebno je da je deklarisete kao:
|
||||
```yaml
|
||||
steps:
|
||||
- name: Hello world action
|
||||
@@ -170,9 +170,9 @@ example-command "$SUPER_SECRET"
|
||||
> [!WARNING]
|
||||
> Tajne informacije **mogu se pristupiti samo iz Github Actions** koje ih imaju deklarisane.
|
||||
|
||||
> Kada se jednom konfigurišu u repozitorijumu ili organizacijama, **korisnici github-a više neće moći da im pristupe**, samo će moći da **promene**.
|
||||
> Kada su konfigurisane u repozitorijumu ili organizacijama, **korisnici Githuba više neće moći da im pristupe**, samo će moći da **promene**.
|
||||
|
||||
Dakle, **jedini način da se ukradu github tajne je da se može pristupiti mašini koja izvršava Github Action** (u toj situaciji ćete moći da pristupite samo tajnama deklarisanim za Action).
|
||||
Dakle, **jedini način da se ukradu github tajne je da se pristupi mašini koja izvršava Github Action** (u toj situaciji ćete moći da pristupite samo tajnama deklarisanim za Action).
|
||||
|
||||
### Git Okruženja
|
||||
|
||||
@@ -184,7 +184,7 @@ runs-on: ubuntu-latest
|
||||
environment: env_name
|
||||
```
|
||||
Možete konfigurisati okruženje da bude **pristupačno** **svim granama** (podrazumevano), **samo za zaštićene** grane ili **odrediti** koje grane mogu da mu pristupe.\
|
||||
Takođe može postaviti **broj potrebnih pregleda** pre **izvršavanja** **akcije** koristeći **okruženje** ili **čekati** neko **vreme** pre nego što dozvoli da se implementacije nastave.
|
||||
Takođe može postaviti **broj potrebnih recenzija** pre **izvršavanja** **akcije** koristeći **okruženje** ili **čekati** neko **vreme** pre nego što dozvoli da se implementacije nastave.
|
||||
|
||||
### Git Action Runner
|
||||
|
||||
@@ -194,9 +194,9 @@ Nekoliko organizacija će dozvoliti pokretanje Github akcija u **infrastrukturi
|
||||
|
||||
Možete **navesti self-hosted trkače** organizacije na _https://github.com/organizations/\<org_name>/settings/actions/runners_
|
||||
|
||||
Način da saznate koje **Github akcije se izvršavaju u ne-github infrastrukturi** je da pretražujete `runs-on: self-hosted` u yaml konfiguraciji Github akcije.
|
||||
Način da saznate koje **Github akcije se izvršavaju u ne-github infrastrukturi** je da potražite `runs-on: self-hosted` u yaml konfiguraciji Github akcije.
|
||||
|
||||
**Nije moguće pokrenuti Github akciju organizacije unutar self-hosted okruženja** druge organizacije jer **se generiše jedinstveni token za trkača** prilikom njegove konfiguracije kako bi se znalo kojoj organizaciji trkač pripada.
|
||||
**Nije moguće pokrenuti Github akciju organizacije unutar self-hosted okruženja** druge organizacije jer se **generiše jedinstveni token za trkača** prilikom njegove konfiguracije kako bi se znalo kojoj organizaciji trkač pripada.
|
||||
|
||||
Ako je prilagođeni **Github trkač konfiguran na mašini unutar AWS-a ili GCP-a**, akcija **može imati pristup metapodacima** i **ukrasti token servisnog naloga** sa kojim mašina radi.
|
||||
|
||||
@@ -215,7 +215,7 @@ Ako su sve akcije (ili zla akcija) dozvoljene, korisnik bi mogao koristiti **Git
|
||||
|
||||
Zaštite grana su dizajnirane da **ne daju potpunu kontrolu nad repozitorijumom** korisnicima. Cilj je **postaviti nekoliko metoda zaštite pre nego što se može pisati kod unutar neke grane**.
|
||||
|
||||
**Zaštite grana repozitorijuma** mogu se naći na _https://github.com/\<orgname>/\<reponame>/settings/branches_
|
||||
**Zaštite grana repozitorijuma** mogu se pronaći na _https://github.com/\<orgname>/\<reponame>/settings/branches_
|
||||
|
||||
> [!NOTE]
|
||||
> **Nije moguće postaviti zaštitu grane na nivou organizacije**. Tako da sve one moraju biti deklarisane na svakom repozitorijumu.
|
||||
@@ -224,19 +224,19 @@ Različite zaštite mogu se primeniti na granu (kao na master):
|
||||
|
||||
- Možete **zahtevati PR pre spajanja** (tako da ne možete direktno spojiti kod preko grane). Ako je ovo odabrano, različite druge zaštite mogu biti na snazi:
|
||||
- **Zahtevati broj odobrenja**. Veoma je uobičajeno zahtevati 1 ili 2 osobe da odobre vaš PR tako da jedan korisnik ne može direktno spojiti kod.
|
||||
- **Odbaciti odobrenja kada su novi commit-i poslati**. Ako ne, korisnik može odobriti legitiman kod, a zatim dodati zli kod i spojiti ga.
|
||||
- **Zahtevati preglede od vlasnika koda**. Najmanje 1 vlasnik koda repozitorijuma treba da odobri PR (tako da "slučajni" korisnici ne mogu to odobriti)
|
||||
- **Ograničiti ko može odbaciti preglede pull request-a.** Možete odrediti ljude ili timove koji su dozvoljeni da odbace preglede pull request-a.
|
||||
- **Dozvoliti određenim akterima da zaobiđu zahteve pull request-a**. Ovi korisnici će moći da zaobiđu prethodne restrikcije.
|
||||
- **Zahtevati da status provere prođe pre spajanja.** Neke provere moraju proći pre nego što se može spojiti commit (kao što je github akcija koja proverava da li nema tajni u čistom tekstu).
|
||||
- **Odbaciti odobrenja kada su novi commitovi poslati**. Ako ne, korisnik može odobriti legitiman kod, a zatim dodati zli kod i spojiti ga.
|
||||
- **Zahtevati recenzije od vlasnika koda**. Najmanje 1 vlasnik koda repozitorijuma treba da odobri PR (tako da "slučajni" korisnici ne mogu da ga odobre)
|
||||
- **Ograničiti ko može da odbaci recenzije pull zahteva.** Možete odrediti ljude ili timove koji mogu da odbace recenzije pull zahteva.
|
||||
- **Dozvoliti određenim akterima da zaobiđu zahteve pull zahteva**. Ovi korisnici će moći da zaobiđu prethodne restrikcije.
|
||||
- **Zahtevati da status provere prođe pre spajanja.** Neke provere moraju proći pre nego što se može spojiti commit (kao što je github akcija koja proverava da li nema tajnih podataka u čistom tekstu).
|
||||
- **Zahtevati rešenje razgovora pre spajanja**. Svi komentari na kod moraju biti rešeni pre nego što se PR može spojiti.
|
||||
- **Zahtevati potpisane commit-e**. Commit-i moraju biti potpisani.
|
||||
- **Zahtevati linearnu istoriju.** Sprečava spajanje commit-a koji se šalju na odgovarajuće grane.
|
||||
- **Zahtevati potpisane commitove**. Commitovi moraju biti potpisani.
|
||||
- **Zahtevati linearnu istoriju.** Sprečava spajanje commitova da budu poslati na odgovarajuće grane.
|
||||
- **Uključiti administratore**. Ako ovo nije postavljeno, administratori mogu zaobići restrikcije.
|
||||
- **Ograničiti ko može slati na odgovarajuće grane**. Ograničiti ko može poslati PR.
|
||||
- **Ograničiti ko može da šalje na odgovarajuće grane**. Ograničiti ko može da pošalje PR.
|
||||
|
||||
> [!NOTE]
|
||||
> Kao što vidite, čak i ako ste uspeli da dobijete neka akreditivna sredstva korisnika, **repozitorijumi mogu biti zaštićeni sprečavajući vas da šaljete kod na master** na primer da kompromitujete CI/CD pipeline.
|
||||
> Kao što vidite, čak i ako uspete da dobijete neka akreditivna sredstva korisnika, **repozitorijumi mogu biti zaštićeni sprečavajući vas da šaljete kod na master** na primer da kompromitujete CI/CD pipeline.
|
||||
|
||||
## References
|
||||
|
||||
|
||||
Reference in New Issue
Block a user