← volver
CVE-2025-8110highbajo ataqueCWE-22

File overwrite in file update API in Gogs

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 8.7epss 83%
de la publicación al arma1 días
Publicada en NVD10 dic
1ª PoC+1d
CISA KEV+33d
probabilidad de explotación
83%top 1% de las CVE
explotación observada
CISA + VulnCheck
35 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2026-02-02

Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.

Resumen

A API PutContents do Gogs (PUT /api/v1/repos/:owner/:repo/contents/:path), usada para criar/editar arquivos de um repositório via REST, não verificava se algum componente do caminho de destino era um link simbólico antes de escrever conteúdo nele. Um usuário autenticado com permissão de escrita num repositório pode commitar um symlink apontando para fora do working copy (por exemplo .git/config) e depois usar a API para 'editar' esse arquivo, fazendo o Gogs seguir o link e sobrescrever o destino real — o que permite escalar para execução de comandos via configuração Git. Está no catálogo KEV da CISA com exploração confirmada; a pesquisa da Wiz citada no próprio repositório do projeto menciona mais de 700 instâncias comprometidas até dezembro de 2025.

Detalle técnico

A falha é uma variante de CWE-59 (Improper Link Resolution Before File Access — 'Link Following'). A função UpdateRepoFile, em internal/database/repo_editor.go, resolve os caminhos relativos informados pela API (OldTreeName/NewTreeName) dentro do working copy local do repositório (localPath) e grava o conteúdo diretamente com os.WriteFile. Antes da correção, a única verificação de symlink existente se aplicava apenas ao caso de criação de arquivo novo (IsNewFile) sobre o caminho final — não cobria diretórios intermediários do caminho nem o caso de atualização de arquivo existente.

Isso permite que um atacante com permissão de push num repositório faça, via git push comum (fora da API), o commit de um link simbólico dentro do repositório apontando para um caminho sensível acessível ao processo do Gogs — o exemplo documentado pelos próprios desenvolvedores é um symlink para .git/config. Em seguida, uma chamada à API PutContents referenciando esse caminho faz o servidor seguir o link e escrever ali o conteúdo controlado pelo atacante.

O impacto de maior gravidade é a sobrescrita de .git/config com diretivas como core.sshCommand (ou hooks), que passam a ser executadas pelo processo Git do servidor na próxima operação sobre aquele repositório (fetch, clone, push), resultando em execução de comando arbitrário com os privilégios do serviço Gogs.

O commit de correção (553707f3) introduz a função hasSymlinkInPath(), que percorre cada segmento do caminho relativo e usa osutil.IsSymlink para detectar link simbólico em qualquer nível da hierarquia, tanto para o caminho antigo quanto o novo, rejeitando a operação antes de qualquer escrita — cobertura mais ampla que a checagem anterior, restrita ao arquivo final em caso de criação.

Cómo se explota

Pré-requisito real: conta autenticada no Gogs com permissão de escrita (push) em algum repositório — em instâncias com registro de usuário aberto, isso equivale a qualquer visitante que crie conta e um repositório próprio. Não é uma falha pré-autenticação nem exige configuração exótica além do comportamento padrão de hospedagem de repositórios Git.

A exploração ocorre em duas etapas: primeiro o atacante usa git push normal (não a API) para commitar um objeto symlink (modo 120000) dentro do repositório apontando para um caminho sensível, tipicamente .git/config do próprio repositório; em seguida chama a API PutContents referenciando esse caminho como se fosse um arquivo normal, enviando conteúdo em base64. O servidor resolve o link e grava o conteúdo no destino real. Não há necessidade de exploração de memória ou payload binário — é abuso de lógica de validação de caminho para converter uma primitiva de 'escrita de arquivo dentro do repo' em escrita arbitrária, escalada depois para execução de comando via configuração/hooks Git processados pelo servidor.

A presença no catálogo KEV da CISA confirma exploração ativa observada. A pesquisa da Wiz referenciada no pull request de correção do próprio projeto relata centenas de instâncias Gogs expostas publicamente já comprometidas, compatível com campanha de varredura e exploração automatizada contra instâncias com registro aberto de usuários.

Cómo protegerse

Atualizar para uma versão do Gogs que já incorpore o commit 553707f3fd5f68f47f531cfcff56aa3ec294c6f6 (branch main), que adiciona a verificação hasSymlinkInPath antes de qualquer escrita via PutContents. As fontes consultadas não trazem o número de release exato em que esse commit foi publicado — confirme no changelog/notas de release do projeto antes de considerar corrigido.

Há um pull request adicional (#8078), ainda em revisão com pedido de mudanças do mantenedor em janeiro de 2026, propondo hardening mais amplo (resolução de symlinks com filepath.EvalSymlinks e validação centralizada num pacote pathutil) para cobrir casos como symlinks encadeados ou relativos que escapem do diretório do repositório. Isso sugere que o fix inicial pode não eliminar todos os vetores de bypass — acompanhe o merge desse PR antes de assumir cobertura completa.

Controles compensatórios caso a atualização não seja imediata: restringir ou desabilitar o autorregistro de usuários e a criação livre de repositórios (a falha depende de o atacante controlar conteúdo/commits de um repositório); revisar permissões de escrita em instâncias públicas; monitorar chamadas PUT para /api/v1/repos/*/contents/* de contas não totalmente confiáveis. Bloquear apenas o acesso à API REST não resolve, pois a criação do symlink malicioso ocorre via git push comum, e não pela própria API.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
Improper Symbolic link handling in the PutContents API in Gogs allows Local Execution of Code.
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:A/AU:Y/R:U/V:C
Productos afectados
Gogs · Gogs
PoCs públicas encontradas35
githubgithub.com/zAbuQasem/gogs-CVE-2025-811027githubgithub.com/rxerium/CVE-2025-811022githubgithub.com/kayl22/cve-2025-8110-GOGS-RCE4githubgithub.com/3jee/CVE-2025-81102githubgithub.com/Ghxstsec/CVE-2025-81102githubgithub.com/George0Papasotiriou/CVE-2025-8110-Gogs-Remote-Code-Execution1githubgithub.com/0dgt/CVE-2025-81101githubgithub.com/mananispiwpiw/CVE-2025-8110-PoC0githubgithub.com/popyue/CVE-2025-81100githubgithub.com/X4BROZER/CVE-2025-81100githubgithub.com/tovd-go/CVE-2025-81100githubgithub.com/111ddea/goga-cve-2025-81100githubgithub.com/hassan-hamadi/CVE-2025-8110-Silentium-HTB0githubgithub.com/AdityaInnovates/CVE-2025-8110-Gogs-RCE-Exploit0githubgithub.com/get-xor/coreweave-demo-2026-050vulncheckvulncheck.com/xdb/942ecab2b7f3no verificadovulncheckvulncheck.com/xdb/09d4e433b3f5no verificadovulncheckvulncheck.com/xdb/171bf6de0983no verificadovulncheckvulncheck.com/xdb/44dce5b3aeaeno verificadovulncheckvulncheck.com/xdb/4cdb8568f534no verificadovulncheckvulncheck.com/xdb/296e89f144f1no verificadovulncheckvulncheck.com/xdb/d68ff06fafb4no verificadovulncheckvulncheck.com/xdb/ead9b44096c4no verificadovulncheckvulncheck.com/xdb/b5ef86fdc299no verificadovulncheckvulncheck.com/xdb/71e20d83ec6eno verificadovulncheckvulncheck.com/xdb/eb4ab0711710no verificadovulncheckvulncheck.com/xdb/d77d0ae38d33no verificadovulncheckvulncheck.com/xdb/b54a4a7d5b85no verificadovulncheckvulncheck.com/xdb/3bd09f5454e2no verificadovulncheckvulncheck.com/xdb/4c10f660ef24no verificadovulncheckvulncheck.com/xdb/f4c9b7664327no verificadovulncheckvulncheck.com/xdb/1f47c9cb7409no verificadovulncheckvulncheck.com/xdb/de4a1007db99no verificadovulncheckvulncheck.com/xdb/05917d8228dbno verificadovulncheckvulncheck.com/xdb/ac0be103d4c4no verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.