Ir para o conteúdo principal
ArchPrompts
Voltar ao blog
Caderno técnico / Nota de campo

Radar Tech: RCE crítico no Forgejo (CVE-2026-89094) — quando a expansão de template cruza a fronteira de confiança

Forgejo < 16.0.4 tem um RCE de CVSS 9.9: um repositório de template pode plantar uma pasta .git que a inicialização do repositório adota. Um usuário autenticado, execução no host. O que a arquitetura da sua forja precisa mudar.

João Gabriel
3 min de leitura
Radar Tech: RCE crítico no Forgejo (CVE-2026-89094) — quando a expansão de template cruza a fronteira de confiança
AP / Prancha visual 01
Leitura principal

Radar Tech: RCE crítico no Forgejo (CVE-2026-89094) — quando a expansão de template cruza a fronteira de confiança

Na semana de 11 de setembro de 2026 apareceu uma das correções mais desconfortáveis do ano para quem mantém plataforma de código auto-hospedada: o Forgejo publicou a versão 16.0.4 fechando um RCE crítico — CVE-2026-89094, CVSS 9.9 — no caminho de geração de repositório a partir de um template.

O detalhe é o tipo de coisa que só dói quando você desenha a fronteira de confiança no papel.

O que aconteceu, exatamente

Quando você cria um repositório a partir de um template, a forja faz uma sequência banal: clona o repositório de template, remove a pasta .git, expande variáveis nos arquivos listados em .forgejo/template (para substituir nome do repo, dono etc.) e então inicializa um repositório git novo.

O problema é a ordem e a confiança implícita no meio. A expansão de variáveis podia ser usada para criar uma nova pasta .git — e a inicialização seguinte, sem saber, adotava esse .git controlado pelo atacante. A partir daí, um repositório de template malicioso permitia leitura de dados arbitrários do host e execução de processos arbitrários — leia-se: RCE no servidor da forja.

A correção é simples: remover qualquer .git existente depois da expansão e antes da inicialização. Mas a correção é a parte fácil.

Por que o CVSS é 9.9 e não "só mais um RCE"

  • Pré-condição baixíssima: basta um usuário autenticado com permissão de criar repositório. Em muitas instalações, isso é todo mundo.
  • Ganho máximo: leitura de arquivo + execução de processo, no host que guarda o código.
  • Blast radius traiçoeiro: a forja raramente vive sozinha. Ela está ao lado de CI runners com segredos, tokens de API, webhooks e object storage. Comprometer a forja é comprometer a cadeia inteira.

O erro de arquitetura que a CVE expõe

Este não é um bug de "faltou escapar um caractere". É um bug de fronteira: conteúdo controlado pelo usuário (o template) foi processado por um componente que tinha poder demais (inicialização de repo com efeitos no filesystem), sem isolamento e sem validação de que a expansão não havia criado estruturas sensíveis.

Três perguntas que valem para a sua instância, hoje:

  • Quem pode criar repositório? Se a resposta é "qualquer usuário autenticado", todo mundo é um atacante em potencial.
  • O que a forja alcança? Se ela compartilha rede ou nó com o banco ou com runners com credenciais amplas, o RCE vira acesso a tudo.
  • O que você detectaria? Se não há log/alerta para criação de .git durante expansão de template, execução de processo filho inesperado, ou egress anômalo, o ataque passaria silencioso.

O que fazer nesta semana

  • Agora: atualize para ≥ 16.0.4 e, até lá, desabilite a criação de repositório a partir de template ou restrinja a criação de repositórios a admins.
  • Depois do patch: audite repositórios de template existentes e o conteúdo de .forgejo/template em busca de atividade suspeita.
  • Estrutural, no trimestre: trate forja e CI como zona de alto risco — egress deny-by-default, runners read-only, segredos efêmeros via OIDC, e segregação de rede entre forja, banco e storage.

A decisão que fica

A CVE é do Forgejo, mas o padrão se repete em toda plataforma que aceita conteúdo de usuário e o processa com privilégio: expansão de template, hooks, runners, importadores de migração. Cada um desses é uma fronteira de confiança esperando um SUPOSIÇÃO: bem anotado.

O que separa um time que responde em horas de um que leva semanas não é talento — é ter a estrutura de decisão pronta antes da manchete.

Fontes

  • Forgejo 16.0.4 — release notes publicadas (release-notes-published/16.0.4.md, Codeberg)
  • NVD — CVE-2026-89094 (CVSS 3.1: 9.9 CRITICAL), CVE-2026-89151 (relacionada)

Quer o pacote completo de contenção — prompt + guardrails + few-shots + harness de verificação + variações por stack — para rodar essa análise na sua instância? Ele está no catálogo da ArchPrompts, na categoria segurança.

Do conceito à execução

Ferramentas práticas para levar as decisões desta nota ao seu próximo projeto.

12 / selecionados
SPA tradicional (REST + JSON) vs HTML over WebSockets: quem renderiza, quem guarda o estado e onde mora a latência em cada abordagem.
Event-Driven
01 / 03

HTML over WebSockets vs SPA — Pacote Multi-Arquivo para ADR de Adoção de Server-Driven UI (Event-Driven) — 5 Arquivos

por João Gabriel

gpt-4GPT-4oClaude+3
(0)
0 vendas
R$ 54,90
Pipeline de Desenvolvimento Seguro na Era da IA: estágios planejamento→implementação→verificação→entrega com feedback loop e papéis IA/humano.
Segurança
01 / 02

SSDLC na Era da IA: ADR + pipeline seguro para times que adotam copilotos e agentes de código (pacote de 5 arquivos)

por João Gabriel

gpt-4ClaudeGemini+1
(0)
0 vendas
R$ 49,90
Fluxo do envenenamento de build no incidente arrayref (20/08/2026): atacante com credencial/autor comprometido publica versão maliciosa no crates.io; o build script baixa payload (infostealer) durante o cargo build, na máquina dev/CI com privilégio; resposta do Rust Security Response Team retira os
Segurança
01 / 03

Plano de Endurecimento de Cadeia de Suprimentos com ADR e Runbook — Pacote Multi-Arquivo para Defesa em Profundidade de Dependências (âncora: incidente arrayref do Rust, 20/08/2026)

por João Gabriel

gpt-4ClaudeGemini
(0)
0 vendas
R$ 59,90
Diagrama do ataque: backdoor time-release em modelo open-source. O harness injeta a data no system prompt a cada turno; nos dias normais o modelo responde normalmente, mas no dia-gatilho um comando malicioso substitui a resposta e é executado pelo shell do agente sem confirmação.
Segurança
01 / 02

Revisão de Segurança e ADR de Adoção de Modelo de IA de Código (contra weight poisoning e backdoor time-release)

por João Gabriel

gpt-4ClaudeGemini+1
(0)
0 vendas
R$ 59,90
Fluxo de redefinição de credenciais: jornada legítima x jornada do atacante explorando o bypass (CVE-2026-18963, CVSS 9.1).
Segurança
01 / 02

ADR de Mitigação de Vulnerabilidade no Fluxo de Redefinição de Credenciais (CVE-2026-18963) — Pacote 5 Arquivos

por João Gabriel

gpt-4GPT-4oClaude+3
(0)
0 vendas
R$ 59,90
Arquitetura de isolamento KVM antes do patch — o caminho do escape guest→host via Januscape (CVE-2026-53359)
ADR
01 / 03

Mitigação de Escape KVM Guest-to-Host — CVE-2026-53359 (Januscape)

por João Gabriel

gpt-4GPT-4oclaude-3-opus+3
(0)
0 vendas
R$ 23,94
Cadeia de ataque: site legítimo publica llms.txt com comando non-dono; agente executa e cai em slot de registro reivindicado por atacante; EDR não alerta.
Segurança

Plano de Mitigação: Agentes de IA Instalando Código Não-Dono em Rede Corporativa

por João Gabriel

gpt-4ClaudeGemini
(0)
0 vendas
R$ 54,90
O clock do embargo colapsou: no modelo clássico, dias entre bug e exploit; hoje agentes transformam uma pista em exploit em menos de um minuto.
Segurança
01 / 03

ADR Reakt: decisão de arquitetura para o fim do embargo de vulnerabilidades (rumor virou exploit em minutos)

por João Gabriel

gpt-4ClaudeGemini+1
(0)
0 vendas
R$ 49,90
Arquitetura de sandbox para agentes de IA: agente não-confiável → orquestrador de política → sandbox descartável com controles de rede/credenciais e auditoria.
Segurança
01 / 02

ADR de adoção de sandbox seguro para agentes de IA (pacote multi-arquivo: prompt + guardrails + exemplos + harness de verificação)

por João Gabriel

gpt-4gpt-4-turboGPT-4o+3
(0)
0 vendas
R$ 49,90
Cadeia de ataque: entrada não confiável → Marshal.load → gadget chain universal → RCE, com o caminho de mitigação por ADR.
Segurança
01 / 03

ADR de Mitigação de RCE por Deserialização no Ruby 4.x — pacote multi-arquivo (prompt principal + regras + exemplos few-shot + harness de verificação + variações de stack)

por João Gabriel

gpt-4GPT-4oclaude-3-5-sonnet+3
(0)
0 vendas
R$ 59,90
Cadeia de ataque do incidente Snowflake×Wiz: do PR gerado por IA ao roubo do token Jira via injeção em GitHub Actions.
Segurança
01 / 02

Harness de Revisão de Segurança para Patches Gerados por IA (Injeção em CI/CD) — 5 arquivos

por João Gabriel

gpt-4ClaudeGemini
(0)
0 vendas
R$ 49,90
Antes: reservas em Redis + ledger em MySQL sem atomicidade entre o claim (UPDATE + DEL) - origem do oversell/undersell.
ADR
01 / 03

ADR de Simplificacao de Stack: Consolidar Reservas de Inventario no Banco Relacional (ACID) - Pacote Multi-Arquivo com Few-shot e Harness

por João Gabriel

GPT-4oclaude-3-5-sonnetgemini-1.5-pro
(0)
0 vendas
R$ 49,90