
Preuve de concept Python pour CVE-2025-8110, démontrant l'écriture arbitraire de fichiers vers RCE dans Gogs via un lien symbolique et l'API, avec une utilisation en laboratoire éducatif.
Ce dépôt contient un script de preuve de concept (PoC) en Python pour démontrer et analyser la vulnérabilité référencée sous le nom CVE-2025-8110 dans le service Git auto-hébergé Gogs (versions 0.13.3 et antérieures).
[!WARNING] CE LOGICIEL EST FOURNI UNIQUEMENT À DES FINS ÉDUCATIVES ET DE RECHERCHE EN SÉCURITÉ. > L'utilisation de ce matériel contre des cibles sans le consentement préalable et écrit de leurs propriétaires est totalement illégale. L'auteur de ce dépôt ne saurait être tenu responsable de tout dommage, préjudice ou mauvaise utilisation découlant de l'usage de ce code. Utilisez-le toujours à vos propres risques et dans des environnements contrôlés ou des simulations autorisées (comme des laboratoires de CTF).
Le CVE-2025-8110 est une vulnérabilité critique d'Écriture Arbitraire de Fichiers provoquée par une validation insuffisante lors de la gestion des liens symboliques (symlinks) via l'API PutContents de Gogs.
Un attaquant authentifié peut :
.git/config du serveur lui-même).root, l'écriture de fichiers peut être élevée en Exécution de Code à Distance (RCE) en injectant la commande souhaitée dans la propriété sshCommand du fichier de configuration Git.exploit.py)Le script automatise tout le processus d'exploitation en utilisant des identifiants valides et un jeton d'API préalablement généré manuellement dans l'interface web de Gogs :
┌──────────────────────────────────────────────┐
│ Máquina del Atacante (Kali) │
└──────────────────────┬───────────────────────┘
│
(1) Crea Repositorio │ (3) Sube Symlink (.git/config)
Malicioso vía API │ vía git push
▼
┌──────────────────────────────────────────────┐
│ Túnel SSH Local (puerto 8080) │
└──────────────────────┬───────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Servidor Víctima Gogs │
│ (Puerto 3001) │
└──────────────────────┬───────────────────────┘
│
│ (4) API PUT "contents"
│ Sigue Symlink y escribe
│ "sshCommand" en .git/config
▼
┌──────────────────────────────────────────────┐
│ Ejecución del Payload como ROOT │
└──────────────────────────────────────────────┘
create_malicious_repo : envoie une requête POST à l'API de Gogs (/api/v1/user/repos) en s'authentifiant avec le jeton d'accès fourni afin de créer un nouveau dépôt avec un nom aléatoire généré dynamiquement.upload_malicious_symlink :
/tmp/..git/config (le fichier de configuration Git du serveur).git push).exploit : définit la charge utile (payload) en utilisant une astuce d'injection dans la propriété sshCommand de Git. En mettant à jour le contenu via l'API, Gogs est forcé de réécrire son propre .git/config sur le serveur. Lorsque la dernière partie du processus Git est déclenchée, le système Gogs exécute la commande terminal (un shell inversé en Bash) qui renvoie la connexion vers votre écouteur Netcat.Assurez-vous de configurer les données d'identité globales dans Git avant d'exécuter le script pour éviter des erreurs lors du commit automatique :
git config --global user.email "[email protected]"
git config --global user.name "estudiante"