Sploitus

Exploit for Path Traversal in Gogs

githubexploit Β· 2026-07-16

Exploit Code

README79 lines
## 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