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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Šta je Gitea
Gitea je rešenje za hostovanje koda koje se lako upravlja i koje se samostalno hostuje, napisano u Go.
Osnovne informacije
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 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
- Javni repozitorijumi: http://localhost:3000/explore/repos
- Registrovani korisnici: http://localhost:3000/explore/users
- Registrovane organizacije: http://localhost:3000/explore/organizations
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:
# 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:
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.