Gitea Security

Reading time: 7 minutes

tip

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) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Šta je Gitea

Gitea je rešenje za hostovanje koda koje se lako upravlja i koje se samostalno hostuje, napisano u Go.

Osnovne informacije

Basic Gitea Information

Laboratorija

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

bash
docker run -p 3000:3000 gitea/gitea

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

Takođe možete da ga pokrenete sa kubernetes:

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

Neautentifikovana Enumeracija

Imajte na umu da podrazumevano Gitea omogućava novim korisnicima da se registruju. Ovo neće pružiti posebno zanimljiv pristup novim korisnicima u odnosu na druge organizacije/korisnike repozitorijuma, ali prijavljeni korisnik može biti u mogućnosti da vidi više repozitorijuma ili organizacija.

Interna Eksploatacija

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

Sa Korisničkim Akreditivima/Web Kolačićem

Ako već imate akreditive za korisnika unutar organizacije (ili ste ukrali kolačić sesije) možete samo da se prijavite i proverite koje dozvole imate nad kojim repozitorijumima, u kojim timovima se nalazite, lista drugih korisnika, 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 i_like_gitea kolačić (trenutno konfigurisan sa SameSite: Lax) možete potpuno imitirati korisnika bez potrebe za akreditivima ili 2FA.

Sa Korisničkim SSH Ključem

Gitea 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 neka prava, međutim ne možete ga koristiti za pristup gitea API-ju da enumerišete okruženje. Međutim, možete enumerisati lokalne postavke da dobijete informacije o repozitorijumima i korisniku kojem imate pristup:

bash
# 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 javnim ključevima koje je postavio na svom nalogu na https://github.com/<gitea_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čeve. 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 pripada.

GPG Ključevi

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:

shell
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 autentifikaciju protiv Gitea servera putem API-ja. Imaće potpun pristup korisniku.

Sa Oauth aplikacijom

Za uvod o Gitea Oauth aplikacijama proverite osnovne informacije.

Napadač može kreirati malicious Oauth aplikaciju da bi pristupio privilegovanim podacima/akcijama korisnika koji ih verovatno prihvataju kao deo phishing kampanje.

Kao što je objašnjeno u osnovnim informacijama, aplikacija će imati potpun pristup korisničkom nalogu.

Zaobilaženje zaštite grane

Na Github-u imamo github akcije koje po defaultu dobijaju token sa pristupom za pisanje na repozitorijum koji se može koristiti za zaobilaženje zaštita grane. U ovom slučaju to ne postoji, tako da su zaobilaženja ograničenija. Ali hajde da pogledamo šta može da se uradi:

  • Omogući Push: Ako bilo ko sa pristupom za pisanje može da pošalje na granu, samo pošaljite na nju.
  • Whitelist Restricted Push: Na isti način, ako ste deo ove liste, pošaljite na granu.
  • Omogući Merge Whitelist: Ako postoji whitelist za spajanje, morate biti unutar nje.
  • Zahtevajte odobrenja veće od 0: Tada... morate kompromitovati drugog korisnika.
  • Ograničite odobrenja na whitelisted: Ako samo whitelisted korisnici mogu odobriti... morate kompromitovati drugog korisnika koji je unutar te liste.
  • Odbacite zastarela odobrenja: Ako odobrenja nisu uklonjena novim commit-ima, mogli biste preuzeti već odobren PR da ubacite svoj kod i spojite PR.

Napomena: ako ste admin org/repo možete zaobići zaštite.

Enumeracija Webhook-ova

Webhook-ovi su sposobni da pošalju specifične gitea informacije na neka mesta. Možda ćete moći da iskoristite tu komunikaciju.
Međutim, obično se postavlja tajna koju ne možete dobiti u webhook-u koja će sprečiti spoljne korisnike koji znaju URL webhook-a, ali ne i tajnu, da iskoriste taj webhook.
Ali u nekim prilikama, ljudi umesto da postave tajnu na njeno mesto, postavljaju je u URL kao parametar, tako da proveravanje URL-ova može omogućiti da pronađete tajne i druga mesta koja biste mogli dalje iskoristiti.

Webhook-ovi se mogu postaviti na repo i na org nivou.

Post Eksploatacija

Unutar servera

Ako ste nekako uspeli da uđete u server na kojem se gitea pokreće, trebali biste potražiti gitea konfiguracioni fajl. Po defaultu se nalazi u /data/gitea/conf/app.ini

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

U gitea putanji (po defaultu: /data/gitea) možete pronaći i zanimljive informacije kao što su:

  • sqlite DB: Ako gitea ne koristi eksternu bazu podataka, koristiće sqlite bazu.
  • sesije unutar foldera sesija: Pokretanjem cat sessions/*/*/* možete videti korisnička imena prijavljenih korisnika (gitea takođe može sačuvati sesije unutar DB).
  • jwt privatni ključ unutar jwt foldera.
  • Više osetljivih informacija može se pronaći u ovom folderu.

Ako ste unutar servera, takođe možete koristiti gitea binarni fajl za pristup/modifikaciju informacija:

  • gitea dump će dumpovati gitea i generisati .zip fajl.
  • gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET će generisati token naznač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.

tip

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) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks