Gitea Security

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Was ist Gitea

Gitea ist eine selbstgehostete, von der Community verwaltete, leichte Code-Hosting-Lösung, die in Go geschrieben ist.

Grundlegende Informationen

pageBasic Gitea Information

Labor

Um eine Gitea-Instanz lokal auszuführen, können Sie einfach einen Docker-Container ausführen:

docker run -p 3000:3000 gitea/gitea

Verbinde dich mit Port 3000, um auf die Webseite zuzugreifen.

Du könntest es auch mit Kubernetes ausführen:

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

Nicht authentifizierte Auflistung

Beachten Sie, dass standardmäßig Gitea neuen Benutzern die Registrierung erlaubt. Dies gibt neuen Benutzern zwar keinen besonders interessanten Zugriff auf Repositories anderer Organisationen/Benutzer, aber ein angemeldeter Benutzer könnte möglicherweise mehr Repositories oder Organisationen visualisieren.

Interne Ausnutzung

Für dieses Szenario gehen wir davon aus, dass Sie Zugriff auf ein GitHub-Konto erhalten haben.

Wenn Sie auf irgendeine Weise bereits Anmeldeinformationen für einen Benutzer innerhalb einer Organisation haben (oder Sie haben ein Sitzungscookie gestohlen), können Sie sich einfach anmelden und überprüfen, welche Berechtigungen Sie über welche Repositories haben, in welchen Teams Sie sind, andere Benutzer auflisten und wie die Repositories geschützt sind.

Beachten Sie, dass 2FA verwendet werden kann, sodass Sie nur auf diese Informationen zugreifen können, wenn Sie auch diese Überprüfung bestehen.

Beachten Sie, dass wenn es Ihnen gelingt, das i_like_gitea-Cookie zu stehlen (derzeit konfiguriert mit SameSite: Lax), können Sie den Benutzer vollständig imitieren, ohne Anmeldeinformationen oder 2FA zu benötigen.

Mit Benutzer-SSH-Schlüssel

Gitea erlaubt Benutzern, SSH-Schlüssel festzulegen, die als Authentifizierungsmethode zum Bereitstellen von Code in ihrem Namen verwendet werden (kein 2FA wird angewendet).

Mit diesem Schlüssel können Sie Änderungen in Repositories vornehmen, in denen der Benutzer einige Berechtigungen hat, jedoch können Sie ihn nicht verwenden, um auf die Gitea-API zuzugreifen und die Umgebung aufzulisten. Sie können jedoch lokale Einstellungen auflisten, um Informationen über die Repositories und Benutzer zu erhalten, auf die Sie Zugriff haben:

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

Wenn der Benutzer seinen Benutzernamen als seinen Gitea-Benutzernamen konfiguriert hat, können Sie auf die öffentlichen Schlüssel zugreifen, die er in seinem Konto unter https://github.com/<gitea_username>.keys festgelegt hat. Sie könnten dies überprüfen, um zu bestätigen, dass der gefundene private Schlüssel verwendet werden kann.

SSH-Schlüssel können auch in Repositories als Deploy-Keys festgelegt werden. Jeder, der Zugriff auf diesen Schlüssel hat, kann Projekte aus einem Repository starten. Normalerweise gibt Ihnen die lokale Datei ~/.ssh/config auf einem Server mit verschiedenen Deploy-Keys Informationen darüber, welcher Schlüssel damit verbunden ist.

GPG-Schlüssel

Wie hier erklärt, ist es manchmal erforderlich, die Commits zu signieren, oder Sie könnten entdeckt werden.

Überprüfen Sie lokal, ob der aktuelle Benutzer einen Schlüssel hat mit:

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

Mit Benutzertoken

Für eine Einführung zu Benutzertoken überprüfen Sie die grundlegenden Informationen.

Ein Benutzertoken kann anstelle eines Passworts verwendet werden, um sich gegen den Gitea-Server über die API zu authentifizieren. Es hat vollen Zugriff auf den Benutzer.

Mit Oauth-Anwendung

Für eine Einführung zu Gitea Oauth-Anwendungen überprüfen Sie die grundlegenden Informationen.

Ein Angreifer könnte eine bösartige Oauth-Anwendung erstellen, um auf privilegierte Daten/Aktionen der Benutzer zuzugreifen, die sie wahrscheinlich im Rahmen einer Phishing-Kampagne akzeptieren.

Wie in den grundlegenden Informationen erklärt, wird die Anwendung vollen Zugriff auf das Benutzerkonto haben.

Umgehung des Branch-Schutzes

Bei Github haben wir Github-Aktionen, die standardmäßig ein Token mit Schreibzugriff auf das Repository erhalten, das verwendet werden kann, um Branch-Schutzmaßnahmen zu umgehen. In diesem Fall existiert das nicht, daher sind die Umgehungen begrenzter. Aber schauen wir uns an, was getan werden kann:

  • Push aktivieren: Wenn jeder mit Schreibzugriff auf den Branch pushen kann, einfach pushen.

  • Whitelist für eingeschränktes Pushen: Auf die gleiche Weise, wenn Sie Teil dieser Liste sind, pushen Sie auf den Branch.

  • Merge-Whitelist aktivieren: Wenn es eine Merge-Whitelist gibt, müssen Sie darin sein.

  • Genehmigungen größer als 0 erforderlich: Dann... müssen Sie einen anderen Benutzer kompromittieren.

  • Genehmigungen auf Whitelist beschränken: Wenn nur Benutzer auf der Whitelist genehmigen können... müssen Sie einen anderen Benutzer kompromittieren, der in dieser Liste steht.

  • Veraltete Genehmigungen ablehnen: Wenn Genehmigungen nicht mit neuen Commits entfernt werden, könnten Sie einen bereits genehmigten PR übernehmen, um Ihren Code einzufügen und den PR zu mergen.

Beachten Sie, dass wenn Sie ein Org/Repo-Admin sind, Sie die Schutzmaßnahmen umgehen können.

Webhooks auflisten

Webhooks können spezifische Gitea-Informationen an bestimmte Orte senden. Möglicherweise können Sie diese Kommunikation ausnutzen. Normalerweise wird ein Geheimnis, das Sie nicht abrufen können, im Webhook festgelegt, um externe Benutzer daran zu hindern, den Webhook zu auszunutzen, wenn sie die URL des Webhooks, aber nicht das Geheimnis kennen. In einigen Fällen setzen Personen das Geheimnis jedoch nicht an seinen Platz, sondern als Parameter in der URL, sodass das Überprüfen der URLs Ihnen ermöglichen könnte, Geheimnisse und andere Stellen zu finden, die Sie weiter ausnutzen könnten.

Webhooks können auf Repo- und Org-Ebene festgelegt werden.

Nach der Ausnutzung

Innerhalb des Servers

Wenn es Ihnen irgendwie gelungen ist, auf den Server zu gelangen, auf dem Gitea läuft, sollten Sie nach der Gitea-Konfigurationsdatei suchen. Standardmäßig befindet sie sich in /data/gitea/conf/app.ini

In dieser Datei finden Sie Schlüssel und Passwörter.

Im Gitea-Pfad (standardmäßig: /data/gitea) finden Sie auch interessante Informationen wie:

  • Die sqlite-Datenbank: Wenn Gitea keine externe Datenbank verwendet, wird eine sqlite-Datenbank verwendet.

  • Die Sitzungen im Sitzungsordner: Durch Ausführen von cat sessions/*/*/* können Sie die Benutzernamen der angemeldeten Benutzer sehen (Gitea könnte die Sitzungen auch in der Datenbank speichern).

  • Der JWT-Privatschlüssel im jwt-Ordner

  • Weitere sensible Informationen könnten in diesem Ordner gefunden werden.

Wenn Sie sich auf dem Server befinden, können Sie auch das gitea-Binärprogramm verwenden, um auf Informationen zuzugreifen/Informationen zu ändern:

  • gitea dump wird Gitea dumpen und eine .zip-Datei generieren.

  • gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET wird ein Token des angegebenen Typs generieren (Persistenz).

  • gitea admin user change-password --username admin --password newpassword Passwort ändern.

  • gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token Neuen Admin-Benutzer erstellen und einen Zugriffstoken erhalten.

Last updated