Github 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)
(Iz ovde) Na visokom nivou, GitHub je veb sajt i usluga zasnovana na oblaku koja pomaže programerima da čuvaju i upravljaju svojim kodom, kao i da prate i kontrolišu promene u svom kodu.
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 više organizacija) moći da mu pristupe
Javni znači da će svi na internetu moći da mu pristupe.
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 omogućava da pretražujete nešto specificirajući kao opseg korisnika, repozitorijuma ili organizacije. Stoga, sa listom stringova koji će se pojaviti blizu osetljivih informacija, možete lako pretražiti potencijalne osetljive informacije u vašem cilju.
Alati (svaki alat sadrži svoju listu dorks):
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):
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 koji sadrže tajne!
Moguće je kompromitovati repozitorijume zloupotrebom pull zahteva. Da biste znali da li je repozitorijum ranjiv, uglavnom treba da pročitate yaml konfiguracije Github Actions. Više informacija o ovome u nastavku.
Čak i ako su obrisani ili interni, može biti moguće dobiti osetljive podatke iz forkova github repozitorijuma. Proverite ovde:
Accessible Deleted Data in GithubPostoje neka podrazumevana prava koja se mogu dodeliti članovima organizacije. Ova prava se mogu kontrolisati sa stranice https://github.com/organizations/<org_name>/settings/member_privileges
ili iz Organizations API.
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 integracijama: Sa ovim omogućeno, spoljnim saradnicima će biti omogućeno da zatraže pristup za GitHub ili OAuth aplikacije za pristup ovoj organizaciji i njenim resursima. Obično je potrebno, ali ako nije, bolje je onemogućiti to.
Nisam mogao pronaći ovu informaciju u API-ju, podelite ako je 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 čine stvari javnim, uverite se da je ovo onemogućeno.
Nisam mogao pronaći ovu informaciju u API-ju, podelite ako je pronađete
Brisanje i prebacivanje repozitorijuma: Ako je omogućeno, članovi sa admin dozvolama za repozitorijum će moći da obrišu ili prebace javne i privatne repozitorijume.
Nisam mogao pronaći ovu informaciju u API-ju, podelite ako je 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 ovu informaciju u API-ju, podelite ako je pronađete
Još stvari se mogu konfigurisati na ovoj stranici, ali prethodne su one koje su više vezane za bezbednost.
Nekoliko podešavanja vezanih za bezbednost može se konfigurisati za akcije sa stranice https://github.com/organizations/<org_name>/settings/actions
.
Imajte na umu da se sve ove konfiguracije takođe mogu postaviti na svakom repozitorijumu nezavisno
Politike Github akcija: Omogućava vam da navedete koji repozitorijumi mogu pokretati radne tokove i koji radni tokovi bi trebali biti dozvoljeni. Preporučuje se da specificirate koji repozitorijumi bi trebali biti dozvoljeni i ne dozvoliti svim akcijama da se pokreću.
Fork pull request radni tokovi od spoljnjih saradnika: Preporučuje se da zahtevate odobrenje za sve spoljne saradnike.
Nisam mogao pronaći API sa ovom informacijom, podelite ako je 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 ovom informacijom, podelite ako je pronađete
Dozvole radnog toka: Veoma se preporučuje da dajte samo 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.
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).
Instalirane GitHub aplikacije: Preporučuje se dozvoliti samo potrebne (nakon pregleda).
Za ovaj scenario pretpostavićemo da ste dobili neki pristup github nalogu.
Ako nekako već imate kredencijale za korisnika unutar organizacije, možete samo da se prijavite i proverite koje preduzeće 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.
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.
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 ispod o zaobilaženju zaštite grana u slučaju da je korisno.
Github omogućava korisnicima da postave SSH ključeve koji će se koristiti kao metoda autentifikacije za implementaciju koda u njihovo ime (2FA se ne primenjuje).
Sa ovim ključem možete izvršiti promene u repozitorijumima gde korisnik ima neke privilegije, međutim ne možete ga koristiti za pristup github API-ju da enumerišete okruženje. Međutim, možete enumerisati lokalne postavke da dobijete informacije o repozitorijumima i korisniku kojem imate pristup:
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.
Kao što je objašnjeno ovde, ponekad je potrebno potpisati commit-e ili biste mogli biti otkriveni.
Proverite lokalno da li trenutni korisnik ima neki ključ sa:
Za uvod o korisničkim tokenima proverite osnovne informacije.
Korisnički token može se koristiti umesto lozinke za Git preko HTTPS-a, ili se može koristiti za autentifikaciju na API preko osnovne autentifikacije. U zavisnosti od privilegija koje su mu dodeljene, možda ćete moći da izvršite različite radnje.
Korisnički token izgleda ovako: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123
Za uvod o Github Oauth aplikacijama proverite osnovne informacije.
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. Uvek treba proveriti opsegove koji se traže pre nego što ih prihvatite.
Pored toga, kao što je objašnjeno u osnovnim informacijama, organizacije mogu dati/oduzeti pristup aplikacijama trećih strana informacijama/repozitorijumima/radnjama vezanim za organizaciju.
Za uvod o Github aplikacijama proverite osnovne informacije.
Napadač može kreirati malicious Github aplikaciju da bi pristupio privilegovanim podacima/radnjama korisnika koji je prihvataju, verovatno kao deo phishing kampanje.
Pored toga, kao što je objašnjeno u osnovnim informacijama, organizacije mogu dati/oduzeti pristup aplikacijama trećih strana informacijama/repozitorijumima/radnjama vezanim za organizaciju.
Postoji nekoliko tehnika za kompromitovanje i zloupotrebu Github akcije, proverite ih ovde:
Abusing Github ActionsZahtevajte 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.
Odbacite odobrenja kada su novi commit-ovi poslati: Ako ovo nije postavljeno, možete poslati legitimni kod, čekati da ga neko odobri, a zatim staviti maliciozni kod i spojiti ga u zaštićenu granu.
Zahtevajte preglede od vlasnika koda: Ako je ovo aktivirano i vi ste vlasnik koda, mogli biste napraviti Github Action da kreira vaš PR i zatim ga sami odobrite.
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 se ne primenjuje.
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ž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štite 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 džoker *
).
Ako imate pristup za pisanje 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.
Za uvod o Github okruženju proverite osnovne informacije.
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 kreiranjem nove github akcije (ili modifikovanjem jedne).
Napomena, možete naići na ivicu slučaja gde su sve grane zaštićene (putem džokera *
) 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.
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.
Generišite korisnički token
Uk盗ite github tokene iz tajni
Brisanje rezultata workflow-a i grana
Dajte više dozvola celoj organizaciji
Kreirajte webhook-ove za eksfiltraciju informacija
Pozovite spoljašnje saradnike
Uklonite webhook-ove koje koristi SIEM
Kreirajte/izmenite Github Action sa bekdoor-om
Pronađite ranjivu Github Action za injekciju komandi putem modifikacije vrednosti tajne
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.
Kao ovaj:
Za više informacija proverite https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd
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)