Gitea Security

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

O que é o Gitea

Gitea é uma solução de hospedagem de código leve, gerenciada pela comunidade e auto-hospedada escrita em Go.

Informações Básicas

pageBasic Gitea Information

Laboratório

Para executar uma instância do Gitea localmente, você pode simplesmente executar um contêiner docker:

docker run -p 3000:3000 gitea/gitea

Conecte à porta 3000 para acessar a página web.

Você também pode executá-lo com o Kubernetes:

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

Enumeração não autenticada

Observe que por padrão o Gitea permite que novos usuários se registrem. Isso não dará acesso especialmente interessante aos novos usuários sobre os repositórios de outras organizações/usuários, mas um usuário logado pode ser capaz de visualizar mais repositórios ou organizações.

Exploração Interna

Para este cenário, vamos supor que você obteve algum acesso a uma conta do github.

Se de alguma forma você já possui credenciais de um usuário dentro de uma organização (ou você roubou um cookie de sessão) você pode apenas fazer login e verificar quais permissões você tem sobre quais repositórios, em quais equipes você está, listar outros usuários, e como os repositórios estão protegidos.

Observe que a autenticação de dois fatores (2FA) pode ser usada, então você só poderá acessar essas informações se também passar por essa verificação.

Observe que se você conseguir roubar o cookie i_like_gitea (atualmente configurado com SameSite: Lax) você pode se passar completamente pelo usuário sem precisar de credenciais ou 2FA.

Com Chave SSH do Usuário

O Gitea permite que usuários configurem chaves SSH que serão usadas como método de autenticação para implantar código em seu nome (nenhum 2FA é aplicado).

Com essa chave, você pode fazer alterações nos repositórios onde o usuário tem alguns privilégios, no entanto, você não pode usá-la para acessar a API do gitea para enumerar o ambiente. No entanto, você pode enumerar as configurações locais para obter informações sobre os repositórios e usuários aos quais você tem acesso:

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

Se o usuário tiver configurado seu nome de usuário como seu nome de usuário do gitea, você pode acessar as chaves públicas que ele definiu em sua conta em https://github.com/<gitea_username>.keys, você pode verificar isso para confirmar se a chave privada que você encontrou pode ser usada.

As chaves SSH também podem ser definidas em repositórios como chaves de implantação. Qualquer pessoa com acesso a essa chave poderá iniciar projetos a partir de um repositório. Geralmente, em um servidor com diferentes chaves de implantação, o arquivo local ~/.ssh/config fornecerá informações sobre qual chave está relacionada.

Chaves GPG

Conforme explicado aqui às vezes é necessário assinar os commits ou você pode ser descoberto.

Verifique localmente se o usuário atual possui alguma chave com:

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

Com Token de Usuário

Para uma introdução sobre Tokens de Usuário, confira as informações básicas.

Um token de usuário pode ser usado em vez de uma senha para autenticar contra o servidor Gitea via API. Ele terá acesso completo sobre o usuário.

Com Aplicativo Oauth

Para uma introdução sobre Aplicativos Oauth do Gitea, confira as informações básicas.

Um atacante pode criar um Aplicativo Oauth malicioso para acessar dados/ações privilegiados dos usuários que os aceitam, provavelmente como parte de uma campanha de phishing.

Conforme explicado nas informações básicas, o aplicativo terá acesso total à conta do usuário.

Bypass de Proteção de Branch

No Github, temos ações do github que por padrão obtêm um token com acesso de gravação sobre o repositório que pode ser usado para burlar as proteções de branch. Neste caso que não existe, então os bypasses são mais limitados. Mas vamos ver o que pode ser feito:

  • Habilitar Push: Se qualquer pessoa com acesso de gravação puder fazer push para o branch, basta fazer push para ele.

  • Whitelist de Push Restrito: Da mesma forma, se você fizer parte desta lista, faça push para o branch.

  • Habilitar Lista Branca de Merge: Se houver uma lista branca de merge, você precisa estar dentro dela.

  • Exigir aprovações maiores que 0: Então... você precisa comprometer outro usuário.

  • Restringir aprovações a usuários da lista branca: Se apenas usuários da lista branca puderem aprovar... você precisa comprometer outro usuário que esteja dentro dessa lista.

  • Ignorar aprovações obsoletas: Se as aprovações não forem removidas com novos commits, você poderia se apropriar de um PR já aprovado para injetar seu código e mesclar o PR.

Observe que se você for um administrador de org/repo você pode burlar as proteções.

Enumerar Webhooks

Webhooks são capazes de enviar informações específicas do gitea para alguns lugares. Você pode ser capaz de explorar essa comunicação. No entanto, geralmente um segredo que você não pode recuperar é definido no webhook que irá impedir usuários externos que conhecem a URL do webhook, mas não o segredo, de explorar esse webhook. Mas em algumas ocasiões, as pessoas, em vez de definir o segredo em seu lugar, o definem na URL como um parâmetro, então verificar as URLs poderia permitir que você encontre segredos e outros lugares que você poderia explorar ainda mais.

Os webhooks podem ser configurados no nível do repositório e da organização.

Pós-Exploração

Dentro do servidor

Se de alguma forma você conseguiu acessar o servidor onde o gitea está sendo executado, você deve procurar pelo arquivo de configuração do gitea. Por padrão, ele está localizado em /data/gitea/conf/app.ini

Neste arquivo, você pode encontrar chaves e senhas.

No caminho do gitea (por padrão: /data/gitea), você também pode encontrar informações interessantes como:

  • O DB sqlite: Se o gitea não estiver usando um db externo, ele usará um db sqlite

  • As sessões dentro da pasta de sessões: Executando cat sessions/*/*/* você pode ver os nomes de usuário dos usuários logados (o gitea também pode salvar as sessões dentro do DB).

  • A chave privada jwt dentro da pasta jwt

  • Mais informações sensíveis podem ser encontradas nesta pasta

Se você estiver dentro do servidor, também pode usar o binário gitea para acessar/modificar informações:

  • gitea dump irá fazer dump do gitea e gerar um arquivo .zip

  • gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET irá gerar um token do tipo indicado (persistência)

  • gitea admin user change-password --username admin --password novasenha Alterar a senha

  • gitea admin user create --username novousuario --password superpassword --email user@user.user --admin --access-token Criar novo usuário administrador e obter um token de acesso

Última actualización