Share
## 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