
Gitea diffpatch RCE (CVE-2026-60004) PoC - repo-write to RCE as Gitea service account
PoC de execução remota de código no endpoint diffpatch do Gitea. Uma conta com permissão de escrita em um repositório (bastando registrar-se anonimamente em instâncias com registro aberto) pode executar comandos shell arbitrários no servidor como a conta de serviço do Gitea.
O POST /api/v1/repos/{owner}/{repo}/diffpatch aplica um patch controlado pelo atacante em um clone temporário bare compartilhado:
git apply --index --recount --cached --binary # Git ≥ 2.32 时追加 -3 三路合并回退
Cadeia de ataque: enviar o mesmo patch duas vezes → conflito add/add → o fallback de merge de três vias faz checkout do caminho do índice (mesmo com --cached) → em um repositório bare, root = $GIT_DIR, e o hooks/post-index-change (100755) obtido via checkout torna-se um Git hook ativo → o Git o executa automaticamente ao gravar o índice → RCE.
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H470d34b1)-3)diffpatch disponível# 设置账户密码
export GITEA_PASSWORD='account-password'
python3 gitea_diffpatch_rce_poc.py \
https://<gitea-base-url> \
<username> \
'id; uname -srm; pwd'
| Parâmetro | Descrição |
|---|---|
url | URL base do Gitea |
username | Nome de usuário Gitea existente (disponibilidade: registro aberto por padrão) |
Dependências: Python 3 + cliente git local.
Fluxo do PoC: autenticação → criação de um repositório privado inicializado → construção do patch hooks/post-index-change → envio duas vezes consecutivas para diffpatch (disparando conflito add/add) → o Git executa o hook → recuperação da saída do comando via Smart HTTP autenticado. Sem callbacks de saída; a saída é retornada in-band.
Apenas para pesquisa de segurança, validação de vulnerabilidades e testes defensivos. Este PoC cria repositórios, envia patches e dispara execução de comandos no servidor na instância alvo; execute apenas em instâncias de teste próprias e não utilize em ambientes não autorizados ou de produção.
command | Comando shell a ser executado no alvo |
GITEA_PASSWORD | Senha da conta (variável de ambiente, ou entrada interativa) |