## https://sploitus.com/exploit?id=00D41843-5D0A-5FE1-9A86-4BC22796652C
# Gogs Arbitrary File Write to RCE (CVE-2025-8110) - Exploit de Uso Educativo
Este repositorio contiene un script de prueba de concepto (PoC) en Python para demostrar y analizar la vulnerabilidad registrada como **CVE-2025-8110** en el servicio de Git auto-alojado **Gogs** (versiones 0.13.3 y anteriores).
---
## β οΈ Descargo de Responsabilidad (Disclaimer)
> [!WARNING]
> **ESTE SOFTWARE SE PROPORCIONA ΓNICAMENTE CON FINES EDUCATIVOS Y DE INVESTIGACIΓN DE SEGURIDAD.** > El uso de este material contra objetivos sin el consentimiento previo y por escrito de sus propietarios es completamente ilegal. El autor de este repositorio no se hace responsable de ningΓΊn daΓ±o, perjuicio o mal uso derivado del uso de este cΓ³digo. UtilΓzalo siempre bajo tu propio riesgo y dentro de entornos controlados o simulaciones autorizadas (como laboratorios de CTF).
---
## ΒΏQuΓ© es el CVE-2025-8110?
El **CVE-2025-8110** es una vulnerabilidad crΓtica de **Escritura de Archivos Arbitrarios** provocada por una validaciΓ³n insuficiente al manejar enlaces simbΓ³licos (*symlinks*) a travΓ©s de la API `PutContents` de Gogs.
### Mecanismo de Impacto
Un atacante autenticado puede:
1. Crear un repositorio de Git local que contenga un enlace simbΓ³lico que apunta a un archivo sensible fuera de la carpeta del repositorio (por ejemplo, el propio archivo de configuraciΓ³n `.git/config` del servidor).
2. Subir (*push*) este repositorio al servidor Gogs.
3. Utilizar la API de Gogs para modificar el archivo del enlace simbΓ³lico. Dado que la API no verifica si el destino es un acceso directo, el sistema operativo subyacente sigue el enlace y sobreescribe archivos del sistema con los privilegios con los que se ejecuta Gogs.
4. Si el servicio de Gogs corre como `root`, la escritura de archivos se puede escalar a **EjecuciΓ³n Remota de CΓ³digo (RCE)** inyectando el comando deseado dentro de la propiedad `sshCommand` del archivo de configuraciΓ³n de Git.
---
## ExplicaciΓ³n del CΓ³digo (`exploit.py`)
El script automatiza todo el proceso de explotaciΓ³n utilizando credenciales vΓ‘lidas y un Token de API previamente generado de forma manual en la interfaz 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 β
ββββββββββββββββββββββββββββββββββββββββββββββββ
### Componentes Principales del Script:
1. **`create_malicious_repo`**: Realiza una peticiΓ³n `POST` a la API de Gogs (`/api/v1/user/repos`) autenticΓ‘ndose con el token de acceso proporcionado para crear un nuevo repositorio con un nombre aleatorio generado de manera dinΓ‘mica.
2. **`upload_malicious_symlink`**:
- Clona el repositorio reciΓ©n creado en la carpeta temporal local `/tmp/`.
- Crea un enlace simbΓ³lico localmente en la mΓ‘quina atacante apuntando a `.git/config` (el archivo de configuraciΓ³n de Git del servidor).
- Realiza un *commit* y envΓa los cambios de vuelta al servidor mediante un comando de sistema (`git push`).
3. **`exploit`**: Define la carga ΓΊtil (payload) utilizando un truco de inyecciΓ³n en la propiedad `sshCommand` de Git. Al actualizar el contenido a travΓ©s de la API, Gogs es forzado a sobreescribir su propio `.git/config` en el servidor. Cuando se activa la ΓΊltima parte del proceso de Git, el sistema de Gogs ejecuta el comando de terminal (una shell reversa en Bash) devolviendo la conexiΓ³n a tu escucha en Netcat.
---
## GuΓa de Uso en Laboratorios (HTB - Silentium)
### Requisitos Previos
AsegΓΊrate de configurar los datos de identidad globales en Git antes de correr el script para evitar errores al realizar el commit automΓ‘tico:
```bash
git config --global user.email "estudiante@seguridad.local"
git config --global user.name "estudiante"
### Uso: python3 exploit.py -u (http://127.0.0.1:8080) -lh -lp 4446