Github Security

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

Drugi načini podrške HackTricks-u:

Šta je Github

(Preuzeto sa ovde) Na visokom nivou, GitHub je veb sajt i cloud-based servis koji pomaže programerima da skladište i upravljaju svojim kodom, kao i da prate i kontrolišu promene u svom kodu.

Osnovne Informacije

pageBasic Github Information

Spoljni Recon

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 ceo internet moći da mu pristupi.

Ukoliko znate korisnika, repozitorijum ili organizaciju koju želite da ciljate možete koristiti github dorks da pronađete osetljive informacije ili tražite curenja osetljivih informacija na svakom repozitorijumu.

Github Dorks

Github omogućava da pretražujete nešto specificirajući opseg korisnika, repozitorijuma ili organizacije. Stoga, sa listom stringova koji će se pojaviti blizu osetljivih informacija možete lako tražiti potencijalne osetljive informacije na vašem cilju.

Alati (svaki alat sadrži svoju listu dorkova):

Github Curenja

Molimo, imajte na umu da su github dorkovi takođe namenjeni za pretragu curenja korišćenjem opcija pretrage na github-u. Ova sekcija je posvećena alatima koji će preuzeti svaki repozitorijum i tražiti osetljive informacije u njima (čak proveravajući određenu dubinu commit-ova).

Alati (svaki alat sadrži svoju listu regexa):

Kada tražite curenja u repozitorijumu i pokrenete nešto poput git log -p ne zaboravite da bi mogli postojati druge grane sa drugim commit-ovima koji sadrže tajne informacije!

Spoljni Forkovi

Moguće je ugroziti repozitorijume zloupotrebom pull zahteva. Da biste saznali da li je repozitorijum ranjiv, uglavnom treba da pročitate konfiguracije yaml fajlova Github akcija. Više informacija o tome ispod.

Jačanje Organizacije

Privilegije Članova

Postoje neke podrazumevane privilegije koje se mogu dodeliti članovima organizacije. Ove se mogu kontrolisati sa stranice https://github.com/organizations/<org_name>/settings/member_privileges ili preko Organizations API-ja.

  • Osnovna dozvola: Članovi će imati dozvolu Nijedna/Čitanje/Pisanje/Admin nad repozitorijumima organizacije. Preporučeno je Nijedna ili Čitanje.

  • 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 org repozitorijuma. Ako je potrebno, možete dozvoliti kreiranje javnih ili privatnih stranica.

  • Zahtevi za pristup integracijama: Sa ovim omogućenim, spoljni saradnici će moći da zatraže pristup GitHub ili OAuth aplikacijama za pristup ovoj organizaciji i njenim resursima. Obično je potrebno, ali ako nije, bolje je onemogućiti.

  • Nisam mogao da pronađem ove informacije u odgovoru API-ja, podelite ako vi 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 da menjaju vidljivost repozitorijuma. Ako ne želite da ljudi čine stvari javno dostupnim, pobrinite se da je ovo onemogućeno.

  • Nisam mogao da pronađem ove informacije u odgovoru API-ja, podelite ako vi pronađete

  • Brisanje i transfer 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 da pronađem ove informacije u odgovoru API-ja, podelite ako vi pronađete

  • Dozvoli č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 da kreiraju nove timove. Bolje je imati ovo onemogućeno.

  • Nisam mogao da pronađem ove informacije u odgovoru API-ja, podelite ako vi pronađete

  • Još stvari se mogu konfigurisati na ovoj stranici, ali prethodne su one koje se odnose na bezbednost.

Podešavanja Akcija

Mogu se konfigurisati razna podešavanja vezana za bezbednost akcija sa stranice https://github.com/organizations/<org_name>/settings/actions.

Imajte na umu da se sva ova podešavanja mogu postaviti i na svakom repozitorijumu nezavisno

  • Politike Github akcija: Omogućava vam da naznačite koje repozitorijume mogu pokrenuti radne tokove i koje radne tokove treba dozvoliti. Preporučuje se naznačiti koje repozitorijume treba dozvoliti i ne dozvoliti pokretanje svih akcija.

  • Forkovanje radnih tokova pull zahteva od spoljnih saradnika: Preporučuje se zahtevati odobrenje za sve spoljne saradnike.

  • Nisam pronašao API sa ovim informacijama, podelite ako vi pronađete

  • Pokretanje radnih tokova iz pull zahteva: Visoko se odvraća pokretanje radnih tokova iz pull zahteva jer će održavaoci izvornog forka dobiti mogućnost korišćenja tokena sa dozvolama za čitanje na izvornom repozitorijumu.

  • Nisam pronašao API sa ovim informacijama, podelite ako vi pronađete

  • Dozvole radnog toka: Visoko se preporučuje da se daju samo dozvole za čitanje repozitorijuma. Odvraća se davanje dozvola za pisanje i kreiranje/odobravanje pull zahteva kako bi se izbegla zloupotreba GITHUB_TOKEN-a datog za pokretanje radnih tokova.

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 one koje su potrebne (nakon pregleda).

  • Instalirane GitHub aplikacije: Preporučuje se dozvoliti samo one koje su potrebne (nakon pregleda).

Izviđanje i napadi zloupotrebom akreditacija

Za ovaj scenario pretpostavićemo da ste dobili pristup nekom GitHub nalogu.

Sa korisničkim akreditacijama

Ako već na neki način imate akreditacije za korisnika unutar organizacije, možete samo se prijaviti i proveriti koje uloge preduzeća i organizacije imate, ako ste običan član, proverite koje dozvole imaju obični članovi, u kojim grupama se nalazite, koje dozvole imate nad kojim repozitorijumima, i kako su repozitorijumi zaštićeni.

Imajte na umu da se može koristiti 2FA, tako da ćete moći pristupiti ovim informacijama samo ako možete proći tu proveru.

Imajte na umu da ako uspete ukrasti user_session kolačić (trenutno konfigurisan sa SameSite: Lax) možete potpuno se predstaviti kao korisnik bez potrebe za akreditacijama ili 2FA.

Pogledajte odeljak ispod o zaobilasku zaštite grana u slučaju da je korisno.

Sa korisničkim SSH ključem

Github dozvoljava korisnicima da postave SSH ključeve koji će se koristiti kao metoda autentifikacije za implementaciju koda u njihovo ime (bez primene 2FA).

Sa ovim ključem možete izvršiti promene u repozitorijumima gde korisnik ima određene privilegije, međutim ne možete ga koristiti za pristup github API-ju radi enumeracije okruženja. Ipak, možete enumerisati lokalna podešavanja da biste dobili informacije o repozitorijumima i korisnicima kojima imate pristup:

# Go to the the repository folder
# Get repo config and current user name and email
git config --list

Ako je korisnik konfigurisao svoje korisničko ime kao njegovo github korisničko ime možete pristupiti javnom ključu koje je postavio na svom nalogu na https://github.com/<github_username>.keys, možete proveriti ovo da potvrdite da li pronađeni privatni ključ može biti korišćen.

SSH ključevi takođe mogu biti postavljeni u repozitorijumima kao deploy ključevi. Svako ko ima pristup ovom ključu će moći da pokrene projekte iz repozitorijuma. Obično na serveru sa različitim deploy ključevima lokalna datoteka ~/.ssh/config će vam pružiti informacije o tome koji ključ je povezan.

GPG Ključevi

Kao što je objašnjeno ovde ponekad je potrebno potpisati commit-ove ili biste mogli biti otkriveni.

Lokalno proverite da li trenutni korisnik ima bilo koji ključ sa:

gpg --list-secret-keys --keyid-format=long

Sa korisničkim tokenom

Za uvod o Korisničkim tokenima proverite osnovne informacije.

Korisnički token se može koristiti umesto lozinke za Git preko HTTPS-a, ili se može koristiti za autentifikaciju na API preko Osnovne autentifikacije. Zavisno od privilegija koje su mu dodeljene, možete izvršavati različite akcije.

Korisnički token izgleda ovako: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123

Sa Oauth aplikacijom

Za uvod o Github Oauth aplikacijama proverite osnovne informacije.

Napadač može kreirati zlonamernu Oauth aplikaciju kako bi pristupio privilegovanim podacima/akcijama korisnika koji ih prihvataju, verovatno kao deo kampanje prevare.

Ovo su opsezi koje Oauth aplikacija može zatražiti. Uvek treba proveriti zatražene opsege pre nego što ih prihvatite.

Osim toga, kako je objašnjeno u osnovnim informacijama, organizacije mogu dozvoliti/odbaciti pristup aplikacijama trećih lica informacijama/repositorijumima/akcijama povezanim sa organizacijom.

Sa Github aplikacijom

Za uvod o Github aplikacijama proverite osnovne informacije.

Napadač može kreirati zlonamernu Github aplikaciju kako bi pristupio privilegovanim podacima/akcijama korisnika koji ih prihvataju, verovatno kao deo kampanje prevare.

Osim toga, kako je objašnjeno u osnovnim informacijama, organizacije mogu dozvoliti/odbaciti pristup aplikacijama trećih lica informacijama/repositorijumima/akcijama povezanim sa organizacijom.

Kompromitacija i zloupotreba Github akcije

Postoji nekoliko tehnika za kompromitaciju i zloupotrebu Github akcije, proverite ih ovde:

pageAbusing Github Actions

Zaobilaženje zaštite grane

  • Zahtevaj određeni broj odobrenja: Ako ste kompromitovali nekoliko naloga, možete prihvatiti svoje zahteve za povlačenje sa drugih naloga. Ako imate pristup okruženju Github akcije unutar repozitorijuma, koristeći GITHUB_TOKEN možda ćete moći odobriti svoj zahtev za povlačenje i na taj način dobiti 1 odobrenje.

  • Napomena za ovo i za ograničenje vlasnika koda da obično korisnik neće moći odobriti svoje zahteve za povlačenje, ali ako možete, možete zloupotrebiti da prihvatite svoje zahteve za povlačenje.

  • Odbaci odobrenja kada se pošalju novi komitovi: Ako ovo nije podešeno, možete poslati legitimni kod, sačekati da ga neko odobri, ubaciti zlonamerni kod i spojiti ga u zaštićenu granu.

  • Zahtevaj recenzije od vlasnika koda: Ako je ovo aktivirano i vi ste vlasnik koda, možete napraviti Github akciju koja kreira vaš zahtev za povlačenje, a zatim ga sami odobriti.

  • Kada je CODEOWNER fajl netačno konfigurisan Github ne prijavljuje grešku, ali ga ne koristi. Dakle, ako je netačno konfigurisan, njegova zaštita vlasnika koda se ne primenjuje.

  • Dozvoli određenim akterima da zaobiđu zahteve za povlačenje zahteva za povlačenje: Ako ste jedan od tih aktera, možete zaobići zaštitu zahteva za povlačenje.

  • Uključi administratore: Ako ovo nije podešeno, a vi ste administrator repozitorijuma, možete zaobići ovu zaštitu grane.

  • Otimačka PR: Možda ćete moći izmeniti PR nekog drugog dodajući zlonamerni kod, odobriti rezultirajući PR sami i spojiti sve.

  • Uklanjanje zaštite grane: Ako ste administrator repozitorijuma, možete onemogućiti zaštitu, spojiti svoj PR i ponovo postaviti zaštitu.

  • Zaobilaženje zaštite za slanje: Ako repozitorijum samo dozvoljava određenim korisnicima slanje koda (spajanje koda) u granama (zaštita grane može štititi sve grane navođenjem wildcard *).

  • Ako imate pristup pisanju nad repozitorijumom ali vam nije dozvoljeno slanje koda zbog zaštite grane, i dalje možete napraviti novu granu i unutar nje kreirati Github akciju koja se pokreće kada se kod pošalje. Pošto zaštita grane neće štititi granu dok nije kreirana, ovaj prvi kod koji se pošalje u granu će izvršiti Github akciju.

Zaobilaženje zaštite okruženja

Za uvod o Github okruženjima proverite osnovne informacije.

U slučaju da se okruženje može pristupiti sa svih grana, ono nije zaštićeno i lako možete pristupiti tajnama unutar okruženja. Imajte na umu da biste mogli naići na repozitorijume gde su sve grane zaštićene (navođenjem njihovih imena ili korišćenjem *), u tom scenariju, pronađite granu u kojoj možete poslati kod i možete eksfiltrirati tajne kreiranjem nove Github akcije (ili modifikacijom postojeće).

Imajte na umu da biste mogli naići na ekstremni slučaj gde su sve grane zaštićene (putem wildcard *) i specificirano je ko može poslati kod u grane (to možete specificirati u zaštiti grane) i vašem korisniku nije dozvoljeno. Ipak možete pokrenuti prilagođenu Github akciju jer možete kreirati granu i koristiti okidač za slanje preko same sebe. Zaštita grane dozvoljava slanje u novu granu tako da će se Github akcija pokrenuti.

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

Nakon kreiranja grane, zaštitna mera će se primeniti na novu granu i nećete moći da je menjate, ali do tada ćete već izložiti tajne informacije.

Upornost

  • Generišite korisnički token

  • Ukradite Github tokene iz tajni

  • Brisanje rezultata radnog toka i grana

  • Dajte više dozvola svim organizacijama

  • Kreirajte webkuke za eksfiltraciju informacija

  • Pozovite spoljne saradnike

  • Uklonite webkuke koje koristi SIEM

  • Kreirajte/izmenite Github akciju sa zadnjim vratima

  • Pronađite ranjivu Github akciju za ubacivanje komandi putem modifikacije vrednosti tajne

Lažni commitovi - Zadnja vrata putem commitova repozitorijuma

Na Github-u je moguće kreirati PR ka repozitorijumu sa forka. Čak i ako PR nije prihvaćen, id commita unutar originalnog repozitorijuma će biti kreiran za forka verziju koda. Stoga, napadač može da se zakaci za korišćenje određenog commita iz navodno legitimnog repozitorijuma koji nije kreirao vlasnik repozitorijuma.

Kao ovde:

name: example
on: [push]
jobs:
commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e
- shell: bash
run: |
echo 'hello world!'

Za više informacija pogledajte https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd

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

Drugi načini podrške HackTricks-u:

Last updated