Feed de ameaças

CVE-2026-60004 — injeção de código no Gitea que leva à execução de comandos no servidor

CVE-2026-60004 é uma injeção de código (CWE-94, CVSS 9,8, KEV) no endpoint diffpatch do Gitea, corrigida na 1.27.1. Por que o registro aberto atende à condição de acesso de escrita.

Publicado 2026-09-05 Atualizado 2026-10-04 Última verificação 2026-09-05 8 min de leitura
Nesta página

Um resumo sobre uma vulnerabilidade com exploração confirmada (listada no KEV da CISA): o que acontece, o que é afetado e o que fazer — do ponto de vista do defensor, sem passos de reprodução.

Resumo do aviso
CVE
CVE-2026-60004
Severidade
Crítica (CVSS 9,8, v3.1; a pontuação registrada no NVD é atribuída à autoridade de numeração de CVEs)
Classe
Injeção de código (CWE-94)
Impacto
Um hook Git malicioso é instalado → comandos executados como o usuário do sistema operacional do Gitea
Afetados
Gitea 1.17 – 1.27.0 segundo o aviso do fornecedor. Corrigido na 1.27.1
Exploração
Listada no KEV da CISA (adicionada em 25 de agosto de 2026, prazo em 28 de agosto). Uso em campanhas de ransomware registrado como "Desconhecido"
Probabilidade
EPSS 0,868 (do nosso feed em 2026-09-05) — faixa mais alta
9,8
CVSS v3.1
1.27.1
Versão corrigida
0,868
EPSS (exploração estimada)
KEV
Explorada na natureza

Não leia "privilégios necessários" como tranquilidade

Leitura A (descrição da CISA)

"um atacante com acesso de escrita ao repositório" — parece condicional

Leitura B (vetor CVSS)

PR:N — nenhum privilégio necessário

↓ o aviso do fornecedor explica as duas

Com o registro aberto ativado

registrar-se → criar um repositório → conceder a si mesmo o acesso de escrita que o ataque precisa

Se o privilégio exigido está disponível com um cadastro, a exigência de privilégio custa ao atacante apenas um passo extra: criar uma conta.

Buscar conforto em "mas exige o privilégio X" é uma forma comum de avaliar mal uma vulnerabilidade. A pergunta não é quem tem esse privilégio, mas se o privilégio pode ser obtido de fora. Registro aberto, cadastro sem convite, permissões concedidas por padrão — um privilégio com um caminho de obtenção não é, na prática, uma condição.

Isso é o mesmo que o item ② em erros comuns de segurança são falhas de premissa. E verifique o caminho de registro via HTTP, e não no arquivo de configuração (autenticação versus autorização).

Qual é a falha

Do aviso do fornecedor
Caminho
O endpoint diffpatch lida incorretamente com a aplicação de patches em clones temporários compartilhados
Resultado
Um hook Git malicioso (hooks/post-index-change) pode ser instalado
Gatilho
O hook é executado como o usuário do sistema operacional do Gitea quando o Git grava o índice
Acessível a partir daí
Segredos da aplicação, credenciais de banco de dados, tokens OAuth, repositórios montados
Pré-condições
O fornecedor indica que a exploração requer Git 2.32+, a rota diffpatch habilitada e um sistema de arquivos temporário gravável e executável

Um hook Git plantado permanece após a atualização, então atualizar não é o fim

Esta falha termina com algo executável deixado no servidor. A atualização fecha o caminho que o instala; ela não remove nada que já tenha sido instalado.

Um hook Git é projetado como um ponto legítimo de execução remota, então, depois de instalado, não parece suspeito. O que separa a manutenção legítima de uma backdoor é apenas quem o criou, com qual permissão e se ele aparece no registro. Depois de corrigir a falha, verifique se o atacante deixou algo para trás. Não pule essa etapa.

O que fazer

1

Atualize para a 1.27.1 ou posterior (a ação principal)

O aviso do fornecedor indica como afetadas as versões 1.17 – 1.27.0 e como correção a 1.27.1. Comece por aqui. Ninguém atualiza uma instância self-hosted por você. Verifique primeiro a versão em execução, como descrito em o playbook de remediação de CVEs.

2

Verifique de fato a configuração de registro

Como dito acima, o registro aberto é o que efetivamente remove a condição de privilégio. Não se limite a ler a configuração — abra a página de registro sem estar logado e veja o que acontece. Em uma instância interna, desative o registro e restrinja o acesso na camada de rede, em vez de depender apenas da autenticação.

3

Procure hooks e arquivos que você não reconhece

Depois de atualizar, verifique scripts nos diretórios de hooks dos repositórios que você não colocou ali, executáveis inesperados e tráfego de saída incomum do processo do Gitea. A pergunta não é "atualizamos?", mas "ficou alguma coisa para trás?".

4

Se um comprometimento for plausível, trate os itens acessíveis como expostos

O que o fornecedor lista como acessível são segredos da aplicação, credenciais de banco de dados e tokens OAuth. Se a sua inspeção não conseguir esclarecer a questão, lembre-se de que "não sabemos" não é "nada aconteceu" — faça a rotação deles. O tratamento de chaves está em o que é perigoso em .env e chaves de API.

5

Reavalie a escolha em si (sem pressa)

Executar por conta própria vem acompanhado do dever de aplicar as atualizações por conta própria. Os compromissos estão em Git self-hosted versus GitHub, qual é mais seguro. Isto não é um argumento para migrar — é um argumento para decidir com base na sua capacidade real de aplicar atualizações.

Visão deste site: CVSS e KEV medem coisas diferentes, então leia os dois

Este caso virou um exemplo prático do que escrevemos em triagem de CVEs com CVSS, EPSS e KEV. O CVSS diz quão grave é tecnicamente, a entrada da CISA diz como ela está sendo usada no campo, e o EPSS estima a probabilidade de exploração — três medições diferentes.

Aqui, o CVSS PR:N e o "acesso de escrita necessário" da CISA pareciam contraditórios. Lendo apenas um deles, você concluiria que "exige um privilégio, então pode esperar". Uma discrepância raramente é erro nos dados; é um sinal de que alguma premissa foi deixada de lado. Neste caso, o aviso do fornecedor continha a resposta (o registro aberto).

Fontes (primárias)

  • Aviso de segurança do Gitea GHSA-rcr6-4jqh-j84m — github.com (afetados 1.17–1.27.0 / corrigido na 1.27.1 / a condição de privilégio e sua relação com o registro aberto / o que é acessível / as pré-condições)
  • NIST NVD, "CVE-2026-60004" — nvd.nist.gov (CVSS v3.1 9,8, o vetor, CWE-94; status Analyzed)
  • Catálogo de Vulnerabilidades Exploradas Conhecidas da CISA — cisa.gov (adicionada em 25 de agosto de 2026, prazo em 28 de agosto, uso em campanha de ransomware "Desconhecido")
  • Gitea, "Release of 1.27.1" — blog.gitea.com

Todas verificadas em 5 de setembro de 2026. Não são publicados aqui passos de reprodução nem links para códigos de prova de conceito.

Leia a seguir

FAQ

QO que acontece com a CVE-2026-60004?
A

Segundo o aviso de segurança do fornecedor, o endpoint diffpatch lida incorretamente com a aplicação de patches, e o resultado é que um hook Git malicioso (hooks/post-index-change) pode ser instalado. Esse hook é executado como o usuário do sistema operacional do Gitea quando o Git grava o índice. O fornecedor lista segredos da aplicação, credenciais de banco de dados, tokens OAuth e repositórios montados entre os itens que se tornam acessíveis.

QA autenticação é necessária? O CVSS diz que não há privilégios, a CISA fala em acesso de escrita ao repositório.
A

As duas informações estão corretas e não se contradizem. O aviso do fornecedor afirma que o acesso de escrita a um repositório é necessário e, em seguida, explica que, quando o registro aberto está ativado, um usuário não autenticado pode criar uma conta e um repositório para obter exatamente esse acesso. Em outras palavras, quando o privilégio exigido pode ser obtido por qualquer pessoa, ele na prática não é uma exigência — o que o vetor CVSS reflete.

QQuais versões são afetadas e como corrigir?
A

O aviso do fornecedor indica como afetadas as versões 1.17 até 1.27.0, sendo a 1.27.1 a versão corrigida. A correção é atualizar para a 1.27.1 ou posterior. Um Gitea self-hosted não se atualiza sozinho, então quanto mais tempo a instância ficar sem atualização, por mais tempo continuará exposta.

QAtualizar resolve tudo?
A

Atualizar é a ação principal, mas não é o trabalho completo. Aquilo em que esta vulnerabilidade termina é um artefato executável deixado no servidor — um hook Git — e a atualização fecha o caminho que instala um hook, sem remover nada que já tenha sido instalado. Depois de atualizar, verifique hooks ou arquivos que você não reconhece e confirme se a configuração de registro é a que você pretendia. Se um comprometimento parecer plausível, trate como expostos os itens que o fornecedor lista como acessíveis — segredos, credenciais de banco de dados, tokens OAuth — e faça a rotação deles.