Gitea Security
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 InformationLaboratório
Para executar uma instância do Gitea localmente, você pode simplesmente executar um contêiner docker:
Conecte à porta 3000 para acessar a página web.
Você também pode executá-lo com o Kubernetes:
Enumeração não autenticada
Repositórios públicos: http://localhost:3000/explore/repos
Usuários registrados: http://localhost:3000/explore/users
Organizações registradas: http://localhost:3000/explore/organizations
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.
Com Credenciais de Usuário/Cookie da Web
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:
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:
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 .zipgitea 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 senhagitea 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