Gitea Security
Last updated
Last updated
Gitea je samostalno hostovano rešenje za upravljanje lakim kodom u zajednici napisano u Go-u.
Da biste pokrenuli Gitea instancu lokalno, možete jednostavno pokrenuti docker kontejner:
Povežite se na port 3000 da biste pristupili web stranici.
Takođe ga možete pokrenuti sa Kubernetes-om:
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 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.
Za ovaj scenario pretpostavićemo da ste dobili pristup nekom github nalogu.
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.
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:
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.
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:
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.
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.
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.
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.
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