Gitea Security

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks AWS)!

Altri modi per supportare HackTricks:

Cos'è Gitea

Gitea è una soluzione di hosting leggera per il codice autogestita dalla comunità scritta in Go.

Informazioni di Base

pageBasic Gitea Information

Laboratorio

Per eseguire un'istanza di Gitea in locale, è sufficiente eseguire un container docker:

docker run -p 3000:3000 gitea/gitea

Connettiti alla porta 3000 per accedere alla pagina web.

Puoi anche eseguirlo con Kubernetes:

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

Enumerazione non autenticata

Si noti che per impostazione predefinita Gitea consente ai nuovi utenti di registrarsi. Questo non darà accesso particolarmente interessante ai nuovi utenti rispetto ad altri repository di organizzazioni/utenti, ma un utente connesso potrebbe essere in grado di visualizzare più repository o organizzazioni.

Sfruttamento interno

Per questo scenario supponiamo che tu abbia ottenuto un certo accesso a un account GitHub.

Se in qualche modo hai già le credenziali di un utente all'interno di un'organizzazione (o hai rubato un cookie di sessione) puoi semplicemente effettuare il login e controllare quali permessi hai su quali repository, in quali team sei, elencare altri utenti, e come sono protetti i repository.

Si noti che potrebbe essere utilizzato 2FA quindi potrai accedere a queste informazioni solo se riesci anche a superare tale controllo.

Si noti che se riesci a rubare il cookie i_like_gitea (attualmente configurato con SameSite: Lax) puoi impersonare completamente l'utente senza necessità di credenziali o 2FA.

Con Chiave SSH Utente

Gitea consente agli utenti di impostare chiavi SSH che verranno utilizzate come metodo di autenticazione per distribuire codice per loro conto (nessun 2FA viene applicato).

Con questa chiave puoi effettuare modifiche nei repository in cui l'utente ha alcuni privilegi, tuttavia non puoi usarla per accedere all'API di Gitea per enumerare l'ambiente. Tuttavia, puoi enumerare le impostazioni locali per ottenere informazioni sui repository e sull'utente a cui hai accesso:

# Go to the the repository folder
# Get repo config and current user name and email
git config --list

Se l'utente ha configurato il proprio nome utente come il suo nome utente gitea, è possibile accedere alle chiavi pubbliche che ha impostato nel suo account su https://github.com/<gitea_username>.keys, potresti controllare questo per confermare che la chiave privata che hai trovato possa essere utilizzata.

Le chiavi SSH possono anche essere impostate nei repository come chiavi di deploy. Chiunque abbia accesso a questa chiave potrà avviare progetti da un repository. Di solito, in un server con diverse chiavi di deploy, il file locale ~/.ssh/config ti darà informazioni su quale chiave è correlata.

Chiavi GPG

Come spiegato qui a volte è necessario firmare i commit o potresti essere scoperto.

Controlla localmente se l'utente attuale ha qualche chiave con:

gpg --list-secret-keys --keyid-format=long

Con Token Utente

Per una introduzione sui Token Utente controlla le informazioni di base.

Un token utente può essere utilizzato al posto di una password per autenticarsi sul server Gitea tramite API. Avrà accesso completo sull'utente.

Con Applicazione Oauth

Per una introduzione sulle Applicazioni Oauth di Gitea controlla le informazioni di base.

Un attaccante potrebbe creare una Applicazione Oauth malevola per accedere ai dati/azioni privilegiate degli utenti che li accettano probabilmente come parte di una campagna di phishing.

Come spiegato nelle informazioni di base, l'applicazione avrà accesso completo sull'account utente.

Bypass Protezione Branch

In Github abbiamo le azioni di Github che per impostazione predefinita ottengono un token con accesso in scrittura sul repository che può essere utilizzato per bypassare le protezioni del branch. In questo caso ciò non esiste, quindi i bypass sono più limitati. Ma vediamo cosa si può fare:

  • Abilita Push: Se chiunque con accesso in scrittura può fare push sul branch, basta fare push su di esso.

  • Whitelist Push Limitato: Allo stesso modo, se fai parte di questa lista fai push sul branch.

  • Abilita Whitelist Merge: Se c'è una whitelist di merge, devi farne parte

  • Richiedi approvazioni maggiori di 0: Allora... devi compromettere un altro utente

  • Limita approvazioni agli utenti in whitelist: Se solo gli utenti in whitelist possono approvare... devi compromettere un altro utente che è dentro quella lista

  • Ignora approvazioni obsolete: Se le approvazioni non vengono rimosse con nuovi commit, potresti dirottare una PR già approvata per iniettare il tuo codice e fare il merge della PR.

Nota che se sei un amministratore di org/repo puoi bypassare le protezioni.

Enumerare Webhooks

I Webhook sono in grado di inviare informazioni specifiche di Gitea in alcuni luoghi. Potresti essere in grado di sfruttare quella comunicazione. Tuttavia, di solito viene impostato un segreto che non puoi recuperare nel webhook che impedirà agli utenti esterni che conoscono l'URL del webhook ma non il segreto di sfruttare quel webhook. Ma in alcune occasioni, le persone invece di impostare il segreto al suo posto, lo impostano nell'URL come parametro, quindi controllare gli URL potrebbe permetterti di trovare segreti e altri luoghi che potresti sfruttare ulteriormente.

I webhook possono essere impostati a livello di repo e a livello di org.

Post Esploitation

All'interno del server

Se in qualche modo sei riuscito a entrare nel server dove gira Gitea dovresti cercare il file di configurazione di Gitea. Per impostazione predefinita si trova in /data/gitea/conf/app.ini

In questo file puoi trovare chiavi e password.

Nel percorso di Gitea (per impostazione predefinita: /data/gitea) puoi trovare anche informazioni interessanti come:

  • Il DB sqlite: Se Gitea non sta utilizzando un db esterno utilizzerà un db sqlite

  • Le sessioni all'interno della cartella delle sessioni: Eseguendo cat sessions/*/*/* puoi vedere i nomi utente degli utenti loggati (Gitea potrebbe anche salvare le sessioni all'interno del DB).

  • La chiave privata jwt all'interno della cartella jwt

  • Altre informazioni sensibili potrebbero essere trovate in questa cartella

Se sei all'interno del server puoi anche usare il gitea binario per accedere/modificare informazioni:

  • gitea dump farà il dump di Gitea e genererà un file .zip

  • gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET genererà un token del tipo indicato (persistenza)

  • gitea admin user change-password --username admin --password newpassword Cambia la password

  • gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token Crea un nuovo utente amministratore e ottieni un token di accesso

Last updated