# Gitea Sekuriteit

{{#include ../../banners/hacktricks-training.md}}

## Wat is Gitea

**Gitea** is 'n **self-hosted gemeenskapsbestuurde liggewig kode hosting** oplossing geskryf in Go.

![](<../../images/image (160).png>)

### Basiese Inligting

{{#ref}}
basic-gitea-information.md
{{#endref}}

## Laboratorium

Om 'n Gitea-instansie plaaslik te laat loop, kan jy net 'n docker-container uitvoer:
```bash
docker run -p 3000:3000 gitea/gitea
```
Verbind met poort 3000 om toegang tot die webblad te verkry.

Jy kan dit ook met kubernetes uitvoer:
```
helm repo add gitea-charts https://dl.gitea.io/charts/
helm install gitea gitea-charts/gitea
```
## Ongeauthentiseerde Enumerasie

- Publieke repos: [http://localhost:3000/explore/repos](http://localhost:3000/explore/repos)
- Geregistreerde gebruikers: [http://localhost:3000/explore/users](http://localhost:3000/explore/users)
- Geregistreerde Organisasies: [http://localhost:3000/explore/organizations](http://localhost:3000/explore/organizations)

Let daarop dat **Gitea standaard nuwe gebruikers toelaat om te registreer**. Dit sal nie spesiaal interessante toegang aan die nuwe gebruikers oor ander organisasies/gebruiker repos gee nie, maar 'n **ingelogde gebruiker** mag in staat wees om **meer repos of organisasies te visualiseer**.

## Interne Exploitatie

Vir hierdie scenario gaan ons veronderstel dat jy toegang tot 'n github rekening verkry het.

### Met Gebruiker Kredensiale/Web Koekie

As jy op een of ander manier reeds kredensiale vir 'n gebruiker binne 'n organisasie het (of jy het 'n sessie koekie gesteel) kan jy **net aanmeld** en kyk watter **toestemmings jy het** oor watter **repos,** in **watter spanne** jy is, **lys ander gebruikers**, en **hoe die repos beskerm word.**

Let daarop dat **2FA gebruik mag word** so jy sal slegs toegang tot hierdie inligting hê as jy ook **daardie toets kan slaag**.

> [!NOTE]
> Let daarop dat as jy **slaag om die `i_like_gitea` koekie te steel** (huidiglik geconfigureer met SameSite: Lax) kan jy **volledig die gebruiker naboots** sonder om kredensiale of 2FA te benodig.

### Met Gebruiker SSH Sleutel

Gitea laat **gebruikers** toe om **SSH sleutels** in te stel wat as **authentikasie metode gebruik sal word om kode namens hulle te ontplooi** (geen 2FA word toegepas nie).

Met hierdie sleutel kan jy **veranderings in repositories waar die gebruiker sekere voorregte het, uitvoer**, egter kan jy dit nie gebruik om toegang tot die gitea api te verkry om die omgewing te enumerate nie. Jy kan egter **lokale instellings enumerate** om inligting oor die repos en gebruiker waartoe jy toegang het, te verkry:
```bash
# Go to the the repository folder
# Get repo config and current user name and email
git config --list
```
As die gebruiker sy gebruikersnaam as sy gitea gebruikersnaam gekonfigureer het, kan jy toegang verkry tot die **publieke sleutels wat hy gestel het** in sy rekening op _https://github.com/\<gitea_username>.keys_, jy kan dit nagaan om te bevestig dat die private sleutel wat jy gevind het, gebruik kan word.

**SSH sleutels** kan ook in repositories as **deploy sleutels** gestel word. Enigeen met toegang tot hierdie sleutel sal in staat wees om **projekte vanaf 'n repository te begin**. Gewoonlik in 'n bediener met verskillende deploy sleutels sal die plaaslike lêer **`~/.ssh/config`** jou inligting gee oor watter sleutel verband hou.

#### GPG Sleutels

Soos verduidelik [**hier**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/gitea-security/broken-reference/README.md) is dit soms nodig om die verbintenisse te teken of jy mag ontdek word.

Kontroleer plaaslik of die huidige gebruiker enige sleutel het met:
```shell
gpg --list-secret-keys --keyid-format=long
```
### Met Gebruikerstoken

Vir 'n inleiding oor [**Gebruikerstokens kyk na die basiese inligting**](basic-gitea-information.md#personal-access-tokens).

'n Gebruikerstoken kan gebruik word **in plaas van 'n wagwoord** om teen die Gitea-bediener **te verifieer** [**via API**](https://try.gitea.io/api/swagger#/). Dit sal **volledige toegang** oor die gebruiker hê.

### Met Oauth Toepassing

Vir 'n inleiding oor [**Gitea Oauth Toepassings kyk na die basiese inligting**](./#with-oauth-application).

'n Aanvaller mag 'n **kwaadwillige Oauth Toepassing** skep om toegang te verkry tot bevoorregte data/aksies van die gebruikers wat hulle waarskynlik as deel van 'n phishingveldtog aanvaar.

Soos in die basiese inligting verduidelik, sal die toepassing **volle toegang oor die gebruikersrekening** hê.

### Takbeskerming Omseiling

In Github het ons **github aksies** wat standaard 'n **token met skrywe toegang** oor die repo kry wat gebruik kan word om **takbeskermings te omseil**. In hierdie geval **bestaan dit nie**, so die omseilings is meer beperk. Maar kom ons kyk na wat gedoen kan word:

- **Aktiveer Push**: As iemand met skrywe toegang na die tak kan push, push net daarna.
- **Whitelist Beperkte Push**: Op dieselfde manier, as jy deel van hierdie lys is, push na die tak.
- **Aktiveer Merge Whitelist**: As daar 'n samensmeltings-whitelist is, moet jy binne dit wees.
- **Vereis goedkeuring is groter as 0**: Dan... moet jy 'n ander gebruiker kompromitteer.
- **Beperk goedkeuring tot whitelisted**: As slegs whitelisted gebruikers kan goedkeur... moet jy 'n ander gebruiker kompromitteer wat binne daardie lys is.
- **Verwerp verouderde goedkeuring**: As goedkeuring nie verwyder word met nuwe verbintenisse nie, kan jy 'n reeds goedgekeurde PR oorneem om jou kode in te voeg en die PR te meng.

Let daarop dat **as jy 'n org/repo admin is** jy die beskermings kan omseil.

### Enumereer Webhooks

**Webhooks** is in staat om **spesifieke gitea-inligting na sekere plekke te stuur**. Jy mag in staat wees om daardie kommunikasie te **benut**.\
E however, gewoonlik word 'n **geheim** wat jy **nie kan herwin nie** in die **webhook** gestel wat **voorkom** dat eksterne gebruikers wat die URL van die webhook ken maar nie die geheim nie, daardie webhook kan **benut**.\
Maar in sommige gevalle, in plaas daarvan om die **geheim** op sy plek te stel, stel mense dit **in die URL** as 'n parameter, so **om die URL's te kontroleer** kan jou toelaat om **geheime** en ander plekke te vind wat jy verder kan benut.

Webhooks kan op **repo en org vlak** gestel word.

## Post Exploitatie

### Binne die bediener

As jy op een of ander manier daarin geslaag het om binne die bediener waar gitea loop te kom, moet jy soek na die gitea-konfigurasie-lêer. Standaard is dit geleë in `/data/gitea/conf/app.ini`

In hierdie lêer kan jy **sleutels** en **wagwoorde** vind.

In die gitea-pad (standaard: /data/gitea) kan jy ook interessante inligting vind soos:

- Die **sqlite** DB: As gitea nie 'n eksterne db gebruik nie, sal dit 'n sqlite db gebruik.
- Die **sessies** binne die sessies-gids: Deur `cat sessions/*/*/*` te loop, kan jy die gebruikersname van die ingelogde gebruikers sien (gitea kan ook die sessies binne die DB stoor).
- Die **jwt private sleutel** binne die jwt-gids.
- Meer **sensitiewe inligting** kan in hierdie gids gevind word.

As jy binne die bediener is, kan jy ook die **`gitea` binêre** gebruik om inligting te bekom/wysig:

- `gitea dump` sal gitea dump en 'n .zip-lêer genereer.
- `gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET` sal 'n token van die aangeduide tipe genereer (volharding).
- `gitea admin user change-password --username admin --password newpassword` Verander die wagwoord.
- `gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token` Skep 'n nuwe admin gebruiker en kry 'n toegangstoken.

{{#include ../../banners/hacktricks-training.md}}
