Gitea 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 Gitea

Gitea je samostalno hostovano rešenje za upravljanje lakim kodom u zajednici napisano u Go-u.

Osnovne Informacije

pageBasic Gitea Information

Laboratorija

Da biste pokrenuli Gitea instancu lokalno, možete jednostavno pokrenuti docker kontejner:

docker run -p 3000:3000 gitea/gitea

Povežite se na port 3000 da biste pristupili web stranici.

Takođe ga možete pokrenuti sa Kubernetes-om:

helm repo add gitea-charts https://dl.gitea.io/charts/
helm install gitea gitea-charts/gitea

Neovjerena enumeracija

Imajte na umu da podrazumevano Gitea dozvoljava novim korisnicima registraciju. Ovo neće dati poseban pristup novim korisnicima nad repozitorijumima drugih organizacija/korisnika, ali prijavljeni korisnik može možda vizualizovati više repozitorijuma ili organizacija.

Interna eksploatacija

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

Sa korisničkim podacima/Veb kolačićem

Ako već na neki način imate pristup podacima korisnika unutar organizacije (ili ste ukrali sesioni kolačić) možete samo se prijaviti i proveriti koje dozvole imate nad kojim repozitorijumima, u kojim timovima ste, navesti druge korisnike, i kako su repozitorijumi zaštićeni.

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

Imajte na umu da ako uspete u krađi i_like_gitea kolačića (trenutno konfigurisan sa SameSite: Lax) možete potpuno se predstaviti kao korisnik bez potrebe za pristupnim podacima ili 2FA.

Sa korisničkim SSH ključem

Gitea dozvoljava korisnicima da postave SSH ključeve koji će se koristiti kao metod autentifikacije za implementaciju koda u njihovo ime (ne primenjuje se 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 gitea API-ju radi enumeracije okruženja. Ipak, možete enumerisati lokalna podešavanja da biste dobili informacije o repozitorijumima i korisnicima do kojih 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 svoje gitea korisničko ime možete pristupiti javnom ključu koje je postavio na svom nalogu na https://github.com/<gitea_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 može se koristiti umesto lozinke za autentifikaciju na Gitea serveru putem API-ja. Imaće potpuni pristup nad korisnikom.

Sa Oauth aplikacijom

Za uvod o Gitea 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 ribarenja.

Kao što je objašnjeno u osnovnim informacijama, aplikacija će imati potpuni pristup nad korisničkim nalogom.

Zaobilaženje zaštite grane

Na Github-u imamo github akcije koje podrazumevano dobijaju token sa pristupom za pisanje nad repozitorijumom koji se može koristiti za zaobilaženje zaštite grane. U ovom slučaju to ne postoji, pa su zaobilazaženja ograničenija. Ali hajde da pogledamo šta se može uraditi:

  • Omogući Povlačenje: Ako bilo ko sa pristupom za pisanje može povući granu, jednostavno povucite je.

  • Whitelist Restrikcija Povlačenja: Na isti način, ako ste deo ove liste, povucite granu.

  • Omogući Whitelistu za Spajanje: Ako postoji whitelist za spajanje, morate biti unutra

  • Potrebno je odobrenje veće od 0: Onda... morate kompromitovati drugog korisnika

  • Ograniči odobrenja na belu listu: Ako samo korisnici sa bele liste mogu odobriti... morate kompromitovati drugog korisnika koji je unutar te liste

  • Odbaci zastarela odobrenja: Ako odobrenja nisu uklonjena sa novim commit-ovima, možete preuzeti već odobren PR da ubacite svoj kod i spojite PR.

Imajte na umu da ako ste admin org/repozitorijuma možete zaobići zaštitu.

Nabrojavanje Webhook-ova

Webhook-ovi mogu slati specifične informacije sa Gitea na neka mesta. Možda ćete moći da iskoristite tu komunikaciju. Međutim, obično je postavljen tajni ključ u webhook-u koji ne možete povratiti i koji će sprečiti spoljne korisnike koji znaju URL webhook-a, ali ne i tajni ključ, da iskoriste taj webhook. Ali u nekim slučajevima, ljudi umesto postavljanja tajnog ključa na odgovarajuće mesto, postave ga u URL kao parametar, pa provera URL-ova može omogućiti da pronađete tajne ključeve i druge lokacije koje biste mogli dalje iskoristiti.

Webhook-ovi se mogu postaviti na nivou repozitorijuma i na nivou orgnizacije.

Post Eksploatacija

Unutar servera

Ako ste nekako uspeli da uđete unutar servera gde se izvršava Gitea, trebalo bi da potražite konfiguracioni fajl Gitea. Podrazumevano se nalazi u /data/gitea/conf/app.ini

U ovom fajlu možete pronaći ključeve i lozinke.

U Gitea putanji (podrazumevano: /data/gitea) možete pronaći i interesantne informacije kao što su:

  • sqlite DB: Ako Gitea ne koristi spoljni db, koristiće sqlite db

  • sesije unutar foldera sesija: Pokretanjem cat sessions/*/*/* možete videti korisnička imena prijavljenih korisnika (Gitea takođe može čuvati sesije unutar DB-a).

  • jwt privatni ključ unutar foldera jwt

  • Više osetljivih informacija može se pronaći u ovom folderu

Ako ste unutar servera, takođe možete koristiti gitea binarni fajl da pristupite/izmenite informacije:

  • gitea dump će izbaciti Gitea i generisati .zip fajl

  • gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET će generisati token određenog tipa (persistence)

  • gitea admin user change-password --username admin --password newpassword Promenite lozinku

  • gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token Kreirajte novog admin korisnika i dobijte pristupni token

Last updated