A Gitea, plataforma Git auto-hospedada, corrigiu uma vulnerabilidade crítica de execução remota de código.
Com acesso de gravação a um repositório, um usuário pode transformar conteúdo de patch controlado pelo atacante em um hook Git ativo e executar comandos de shell com a conta de serviço da Gitea.
Identificada como CVE-2026-60004, com pontuação CVSS de 9,8, a falha afeta as versões 1.17 e posteriores até a 1.27.1, já corrigida nessa versão.
A chamada vulnerável da API exige autenticação e permissão de gravação no repositório.
No entanto, a Gitea habilita o cadastro por padrão, o que permite que um visitante externo crie uma conta e um repositório normais em uma instalação sem alterações e explore o bug sem credenciais prévias.
A atualização para a versão 1.27.1 é a correção recomendada.
Em 27 de julho, a Gitea informou que as instâncias do Gitea Cloud seriam atualizadas automaticamente.
O aviso de segurança publicado em 28 de julho não afirma que a falha tenha sido explorada no mundo real, mas inclui código público de proof of concept.
Desativar o cadastro aberto pode eliminar o caminho público de criação de contas enquanto a atualização não é aplicada, mas isso não corrige a falha nem protege contra usuários já existentes com permissão de gravação em repositórios.
A vulnerabilidade foi reportada pelo pesquisador de segurança Shai Rod, conhecido como NightRang3r.
A Gitea o credita como responsável pela descoberta em seu aviso.
A rota afetada da Gitea chama reqToken(), que rejeita solicitações sem um usuário autenticado.
O caminho sem credenciais prévias vem da configuração padrão do projeto, que deixa o cadastro aberto, não exige e-mail nem aprovação manual, não marca novos usuários como restritos e não impõe limite padrão para a criação de repositórios.
O bug está no endpoint POST /api/v1/repos/{owner}/{repo}/diffpatch.
Segundo o aviso de segurança da Gitea, o endpoint aplica um patch fornecido dentro de um clone temporário bare compartilhado.
As versões vulneráveis chamam git apply com as opções --index, --recount, --cached e --binary, adicionando a opção de fallback de três vias -3 quando o servidor executa Git 2.32 ou posterior.
O atacante envia o mesmo patch duas vezes para criar um conflito add/add.
O fallback de três vias então faz o checkout do caminho indexado, mesmo com a operação usando --cached.
Como o clone temporário é bare, sua raiz é $GIT_DIR.
Um arquivo executável colocado em hooks/post-index-change, portanto, cai no diretório de hooks do Git e passa a ser ativado.
O Git o executa durante a atualização do índice.
A proof of concept faz login com uma conta normal, cria um repositório privado inicializado, envia o patch malicioso duas vezes e recupera a saída do comando.
Não há necessidade de callback para fora da rede.
O hook armazena a saída em objetos Git, cria uma branch com o resultado e permite que o atacante a obtenha por meio de smart HTTP autenticado.
Em 29 de julho de 2026, nenhuma das fontes primárias citadas informava se a falha foi explorada antes ou depois da disponibilidade da versão 1.27.1.
Se a exploração for bem-sucedida, o atacante obtém os privilégios da conta do sistema operacional usada pelo Gitea.
Dependendo de como a instância esteja isolada, a Gitea informou que isso pode expor segredos da aplicação e do ambiente, repositórios montados, credenciais e conteúdo de banco de dados, credenciais OAuth e serviços internos acessíveis.
A exploração ainda exige permissão de gravação no repositório, Git 2.32 ou posterior, o endpoint diffpatch habilitado e um sistema de arquivos temporário gravável e executável.
O cadastro padrão permite que um invasor obtenha a permissão necessária em uma instalação sem alterações.
A correção é fácil de passar despercebida no histórico de mudanças.
A Gitea alterou o clone temporário de bare para non-bare.
O comentário no código alerta explicitamente que comandos Git com --index podem operar na árvore de trabalho.
A mudança foi incorporada e levada de volta a versões anteriores em 26 de julho de 2026.
A versão 1.27.1 foi lançada em 27 de julho, e o aviso de segurança saiu em 28 de julho.
As notas de versão listaram a mudança em MISC como "refactor: git patch apply", e não na seção SECURITY.
Rod já havia antecipado a RCE junto com um problema separado de inclusão de arquivo, com uma prova de conceito que recuperava /etc/passwd de um host com Gitea 1.27.0.
Esse problema parece corresponder a uma mudança separada incluída na 1.27.1, que alterou o renderizador Org-mode da Gitea para que caminhos de #+INCLUDE sejam retornados como texto simples, em vez de serem lidos do sistema de arquivos do servidor.
A Gitea não publicou um aviso separado nem um CVE específico para o problema de inclusão de arquivo.
Publicidade
Tenha acesso aos melhores hackers éticos do mercado através de um serviço personalizado, especializado e adaptado para o seu negócio. Guardsi: qualidade, confiança e especialidade em segurança ofensiva de quem já protegeu centenas de empresas. Saiba mais...