Gitea Security

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

¿Qué es Gitea

Gitea es una solución de alojamiento de código ligera autohospedada y gestionada por la comunidad escrita en Go.

Información Básica

Laboratorio

Para ejecutar una instancia de Gitea localmente, simplemente puedes ejecutar un contenedor de docker:

docker run -p 3000:3000 gitea/gitea

Conéctese al puerto 3000 para acceder a la página web.

También puede ejecutarlo con Kubernetes:

helm repo add gitea-charts https://dl.gitea.io/charts/
helm install gitea gitea-charts/gitea

Enumeración sin autenticación

Tenga en cuenta que por defecto Gitea permite que los nuevos usuarios se registren. Esto no dará acceso especialmente interesante a los nuevos usuarios sobre otros repositorios de organizaciones/usuarios, pero un usuario conectado podría ser capaz de visualizar más repositorios u organizaciones.

Explotación interna

Para este escenario vamos a suponer que has obtenido acceso a una cuenta de github.

Si de alguna manera ya tienes credenciales para un usuario dentro de una organización (o robaste una cookie de sesión) puedes simplemente iniciar sesión y verificar qué permisos tienes sobre qué repositorios, en qué equipos estás, listar otros usuarios, y cómo están protegidos los repositorios.

Tenga en cuenta que puede usarse la autenticación de dos factores (2FA), por lo que solo podrás acceder a esta información si también puedes superar esa verificación.

Tenga en cuenta que si logras robar la cookie i_like_gitea (actualmente configurada con SameSite: Lax) puedes hacerte pasar completamente por el usuario sin necesidad de credenciales o 2FA.

Con Clave SSH de Usuario

Gitea permite a los usuarios configurar claves SSH que se utilizarán como método de autenticación para implementar código en su nombre (no se aplica 2FA).

Con esta clave puedes realizar cambios en repositorios donde el usuario tiene algunos privilegios, sin embargo, no puedes usarla para acceder a la API de gitea para enumerar el entorno. Sin embargo, puedes enumerar configuraciones locales para obtener información sobre los repositorios y usuarios a los que tienes acceso:

# Go to the the repository folder
# Get repo config and current user name and email
git config --list

Si el usuario ha configurado su nombre de usuario como su nombre de usuario de gitea, puedes acceder a las claves públicas que ha establecido en su cuenta en https://github.com/<gitea_username>.keys, podrías verificar esto para confirmar que la clave privada que encontraste se puede usar.

Las claves SSH también se pueden configurar en los repositorios como claves de despliegue. Cualquier persona con acceso a esta clave podrá lanzar proyectos desde un repositorio. Por lo general, en un servidor con diferentes claves de despliegue, el archivo local ~/.ssh/config te dará información sobre qué clave está relacionada.

Claves GPG

Como se explica aquí a veces es necesario firmar los commits o podrías ser descubierto.

Verifica localmente si el usuario actual tiene alguna clave con:

gpg --list-secret-keys --keyid-format=long

Con Token de Usuario

Para obtener una introducción sobre Tokens de Usuario, revisa la información básica.

Un token de usuario puede ser utilizado en lugar de una contraseña para autenticarse contra el servidor de Gitea a través de la API. Tendrá acceso completo sobre el usuario.

Con Aplicación Oauth

Para obtener una introducción sobre Aplicaciones Oauth de Gitea, revisa la información básica.

Un atacante podría crear una Aplicación Oauth maliciosa para acceder a datos/acciones privilegiados de los usuarios que los aceptan, probablemente como parte de una campaña de phishing.

Como se explica en la información básica, la aplicación tendrá acceso total a la cuenta del usuario.

Bypass de Protección de Ramas

En Github tenemos acciones de Github que por defecto obtienen un token con acceso de escritura sobre el repositorio que puede ser utilizado para burlar las protecciones de rama. En este caso que no existe, por lo que los bypasses son más limitados. Pero veamos qué se puede hacer:

  • Habilitar Push: Si alguien con acceso de escritura puede hacer push a la rama, simplemente haz push a ella.

  • Lista blanca de Push restringidos: De la misma manera, si eres parte de esta lista haz push a la rama.

  • Habilitar Lista blanca de Merge: Si hay una lista blanca de merge, necesitas estar dentro de ella.

  • Requerir aprobaciones es mayor que 0: Entonces... necesitas comprometer a otro usuario.

  • Restringir aprobaciones a usuarios de la lista blanca: Si solo los usuarios de la lista blanca pueden aprobar... necesitas comprometer a otro usuario que esté dentro de esa lista.

  • Descartar aprobaciones obsoletas: Si las aprobaciones no se eliminan con nuevos commits, podrías secuestrar un PR ya aprobado para inyectar tu código y fusionar el PR.

Ten en cuenta que si eres un administrador de la org/repositorio puedes burlar las protecciones.

Enumerar Webhooks

Los Webhooks pueden enviar información específica de Gitea a algunos lugares. Es posible que puedas explotar esa comunicación. Sin embargo, generalmente se establece un secreto en el webhook que no se puede recuperar, lo cual evitará que los usuarios externos que conozcan la URL del webhook pero no el secreto exploten ese webhook. Pero en algunas ocasiones, en lugar de configurar el secreto en su lugar, lo configuran en la URL como un parámetro, por lo que verificar las URLs podría permitirte encontrar secretos y otros lugares que podrías explotar aún más.

Los webhooks se pueden configurar a nivel de repositorio y a nivel de org.

Post Explotación

Dentro del servidor

Si de alguna manera lograste acceder al servidor donde se está ejecutando Gitea, debes buscar el archivo de configuración de Gitea. Por defecto, se encuentra en /data/gitea/conf/app.ini

En este archivo puedes encontrar claves y contraseñas.

En la ruta de Gitea (por defecto: /data/gitea) también puedes encontrar información interesante como:

  • La base de datos sqlite: Si Gitea no está utilizando una base de datos externa, utilizará una base de datos sqlite.

  • Las sesiones dentro de la carpeta de sesiones: Ejecutando cat sessions/*/*/* puedes ver los nombres de usuario de los usuarios conectados (Gitea también podría guardar las sesiones dentro de la base de datos).

  • La clave privada jwt dentro de la carpeta jwt.

  • Se podría encontrar más información sensible en esta carpeta.

Si estás dentro del servidor, también puedes utilizar el binario gitea para acceder/modificar información:

  • gitea dump volcará Gitea y generará un archivo .zip.

  • gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET generará un token del tipo indicado (persistencia).

  • gitea admin user change-password --username admin --password newpassword Cambiar la contraseña.

  • gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token Crear un nuevo usuario administrador y obtener un token de acceso.

Última actualización