
Ausnutzung von CVE-2018-18925, einer Remote Code Execution gegen das selbst gehostete Git-Tool: Gogs.
Ausnutzung von CVE-2018-18925, eine Remote-Codeausführung gegen das selbst gehostete Git-Tool: Gogs.
Gogs basiert auf dem Macaron-Framework. Das System zur Verwaltung von Sitzungen ist dem von PHP sehr ähnlich. Die Sitzungskennung im Cookie wird einer Datei im Dateisystem zugeordnet. Wenn der Webserver eine Anfrage mit einer Sitzungskennung (als Cookie) erhält, sucht er die entsprechende Datei im Dateisystem.
Die Schwachstelle ist ein einfacher Directory Traversal beim Abrufen der Datei, die für die Sitzung im Dateisystem verwendet wird. Sie können beispielsweise den Cookie i_like_gogits auf ../../../../../../etc/passwd setzen, um einen Fehler vom Server zu erhalten.

Um die Sitzungsumgehung auszunutzen, benötigen wir eine Möglichkeit, eine speziell präparierte Datei hochzuladen. Anschließend verwenden wir diese Datei als unsere Sitzungs-ID. Wir können eine eigene präparierte Sitzungs-ID-Datei mit https://github.com/RyouYoo/CVE-2018-18925/blob/main/main.go erstellen.
go run main.go
Beim lokalen Erstellen einer Kopie des Repositorys legt Gogs die Dateien unter /data/gogs/data/tmp/local-repo/[REPO_ID]/[DATEINAME] ab (dieses Repository wird nur erstellt, wenn Sie die Funktion "Datei hochladen" verwenden).

Wobei [DATEINAME] der Name der hochgeladenen Datei ist und [REPO_ID] die Repository-Kennung, die über den Fork-Link gefunden werden kann:

Wobei 5 die Repository-ID ist.
Standardmäßig werden die Sitzungen unter /data/gogs/data/sessions/ gespeichert. Daher können Sie den folgenden relativen Pfad für Ihre Sitzungs-ID verwenden: ../tmp/local-repo/[REPO_ID]/[DATEINAME]. Durch die Verwendung dieses Pfades in Ihrem i_like_gogits-Cookie sollten Sie als administrator eingeloggt sein.

Um RCE zu erreichen, können Sie die Git-Hooks-Funktionalität in einem bestimmten Repository nutzen, um ein Shell-Skript auszuführen.

Fügen Sie in pre-receive Ihren Code ein:

Führen Sie dann einen Push-Vorgang aus (entweder mit git oder mit der Datei-Erstellungsfunktion), um den Hook auszuführen.