Gitea Security
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 InformationLabor
Um eine Gitea-Instanz lokal auszuführen, können Sie einfach einen Docker-Container ausführen:
Verbinde dich mit Port 3000, um auf die Webseite zuzugreifen.
Du könntest es auch mit Kubernetes ausführen:
Nicht authentifizierte Auflistung
Öffentliche Repositories: http://localhost:3000/explore/repos
Registrierte Benutzer: http://localhost:3000/explore/users
Registrierte Organisationen: http://localhost:3000/explore/organizations
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.
Mit Benutzeranmeldeinformationen/Web-Cookie
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:
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:
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