Um usuário GitLab autorizado a configurar um fluxo de agente não deveria ganhar os poderes do sistema operacional do serviço que o processa. CVE-2026-90970 rompe essa separação: uma configuração Duo preparada pode escapar da sandbox de templates de prompts e executar comandos arbitrários em um AI Gateway afetado.
A GitLab divulgou a falha em 2 de outubro de 2026 e atribuiu CVSS 3.1 de 9,9, crítico. Explorar exige autenticação e acesso ao Duo Agent Platform. Não é um relato de invasão anônima sem clique de todos os servidores GitLab. A gravidade está na fronteira atravessada após os pré-requisitos, não em fingir que eles não existem.
Gateways operados pela GitLab já foram corrigidos. Operadores de gateways próprios afetados devem atualizar e investigar sua implantação. Manter código e prompts em rede privada não mantém automaticamente o autor autenticado dentro da sandbox prevista.
Verifique a versão do gateway, não apenas do GitLab
Os intervalos divulgados começam no AI Gateway 18.1.6 e vão até antes de 19.2.4; o ramo 19.3 é afetado antes de 19.3.2, e o 19.4 antes de 19.4.1. As versões corrigidas são 19.2.4, 19.3.2 e 19.4.1. É necessário usar a correção adequada ou uma versão posterior compatível do gateway.
Os números pertencem ao gateway, serviço independente entre recursos nativos de IA GitLab e modelos. Ele processa lógica da aplicação e requisições, não é o modelo de linguagem. Sua imagem e ciclo de implantação podem diferir da aplicação principal. Conferir apenas a versão conhecida do GitLab pode deixar um gateway antigo passar.
Arranjos gerenciados, híbridos e totalmente próprios são diferentes. Em uma configuração híbrida, alguns recursos usam infraestrutura do cliente e outros serviços gerenciados. O inventário precisa de roteamento por recurso, todas as réplicas, desenvolvimento e provas de conceito, imagens em cache e recuperação de desastre, não só a interface de produção.
Uma instalação totalmente própria pode operar com pouco ou nenhum acesso geral à internet. Isso reduz rotas externas, mas não elimina um interno autorizado, conta roubada, token de serviço ou carga interna comprometida. Desconexão também pode atrasar avisos de segurança e patches.
A falha ocorre no software de templates
Um fluxo de agente combina prompts, ferramentas, decisões e ações numa tarefa de desenvolvimento com várias etapas. Templates convertem configuração e valores de execução em instruções para o modelo. A sandbox deve impedir que o conteúdo alcance funções perigosas da aplicação ou poderes do sistema operacional.
A classe é CWE-1336: neutralização imprópria de elementos especiais de um mecanismo de templates. Sintaxe controlada pelo invasor pode ser interpretada como comportamento executável, não dados inertes. A GitLab descreve comandos arbitrários no gateway; consequências dependem de permissões do processo, objetos expostos, credenciais e rotas de rede.
Isso difere de injeção de prompt, que tenta redirecionar o modelo com instruções. Injeção de template ataca o software convencional que constrói ou renderiza essas instruções. Comandos podem rodar independentemente da resposta do modelo. Uma instrução extra de segurança comportamental não corrige processamento inseguro de templates.
Também não prova que o modelo inventou uma fuga sozinho. A superfície de entrada é um fluxo de IA, mas a fronteira vulnerável pertence à aplicação. A revisão precisa de histórico de configuração, atividade do gateway/contêiner, permissões e credenciais posteriores. Transcrições de conversa não são o registro inteiro do incidente.
Por que uma falha autenticada recebe 9,9
O vetor publicado é AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H. Ataque pela rede não exige shell local prévio, mas “rede” não significa necessariamente internet pública. Baixa complexidade indica que a avaliação padronizada não depende de corrida estreita ou estado incomum. Baixos privilégios ainda exigem login e acesso à plataforma.
Sem interação adicional significa que outra pessoa não precisa abrir arquivo, aprovar diálogo ou clicar em isca após a configuração chegar ao caminho vulnerável. Escopo alterado descreve a passagem da entrada autorizada do fluxo para outra autoridade: o ambiente de comandos do gateway.
Impactos altos em confidencialidade, integridade e disponibilidade representam leitura, modificação e interrupção possíveis. A nota padronizada 9,9 não prova dano máximo em todo ambiente, nem qualquer invasão. Arquitetura, privilégio mínimo, sistemas alcançáveis e segredos definem a extensão real.
Um usuário autenticado não é automaticamente administrador. Autores de fluxo podem precisar de amplas funções sem merecer os poderes do processo interpretador. Um token roubado ou identidade de automação privilegiada demais torna a distinção relevante mesmo quando o usuário original era legítimo.
Contêineres são fronteiras, não apagadores de risco. Mesmo sem root, podem expor segredos montados, tokens, dados processados e rotas internas. Montagens graváveis, permissões excessivas e saída ampla aumentam consequências; comandos em um contêiner não provam comprometimento total da infraestrutura.
Uma segunda falha crítica levanta uma questão arquitetural
Em fevereiro, a GitLab corrigiu CVE-2026-1868 no Duo Workflow Service do gateway. Também envolvia expansão insegura de templates do usuário por fluxos preparados, com os mesmos 9,9 e vetor. Correções incluíram 18.6.2, 18.7.1 e 18.8.1; um membro interno descobriu a falha.
A semelhança justifica revisar a fronteira entre fluxo e template. Não prova regressão, correção incompleta em fevereiro ou caminho idêntico em outubro. Resumos públicos não estabelecem a relação; nenhuma hipótese deve aparecer como confirmada.
Configuração declarativa flexível pode atuar como linguagem de programação quando expressões, variáveis e plugins viram ações privilegiadas. Mais personalização amplia o que parsers e sandboxes precisam interpretar com segurança. O risco é juntar renderização não confiável e acesso valioso à infraestrutura no mesmo processo.
Camadas independentes ajudam: tratar entrada como dados, expor poucos objetos, autorizar submissão, limitar arquivos/rede/credenciais e preservar atribuição. Criar ou modificar um fluxo deve poder ser ligado ao comportamento posterior do gateway. Fluxos precisam de responsável, revisão, versões e testes como configurações CI.
Corrigir e determinar comprometimento são trabalhos distintos
Operadores devem preservar o digest anterior e evidências de implantação, instalar a versão corrigida, reiniciar cargas e confirmar a imagem real. Réplicas antigas, testes e recuperação não podem reter uma imagem afetada. Inicialização bem-sucedida não prova substituição de todas as cópias.
A revisão do período vulnerável deve identificar pessoas e serviços com poder de criar ou editar fluxos, guardar configurações e examinar auditoria. Processos filhos inesperados, interpretadores, alterações em arquivos, conexões de saída e reinícios incomuns merecem confronto com o normal. São pistas de investigação, não uma lista pública universal de indicadores desta CVE.
A documentação descreve JWTs assinados e serviços AI Gateway/Agent Platform separados, cada um com seu par de chaves. É preciso avaliar ambos, a relação de confiança e chaves/configuração de execução. Uma credencial não representa o sistema todo. Segredos acessíveis a um processo comprometido podem precisar de rotação quando evidências ou exposição justificarem.
Mapeie instância GitLab, servidores de modelo, monitoramento e sistemas internos acessíveis. Prompts derivados de código e contexto de issues podem ser sensíveis mesmo sem muito armazenamento no contêiner. Saída restrita, identidades de carga, sistemas somente leitura e poucos privilégios contêm impacto, mas não reparam templates nem substituem atualização.
Auto-hospedar divide trabalho entre equipes de plataforma, modelos, contêineres e rede. Uma imagem sem responsável pode cair entre essas fronteiras. Serviço gerenciado reduz essa tarefa específica do cliente, mas traz outros compromissos de fornecedor, residência e dependência. O caso não prova que uma configuração é sempre mais segura.
O que o registro público não demonstra
Os relatos disponíveis não estabelecem exploração ativa ou ampla em produção, prova de conceito pública, caminho detalhado ou indicadores universais após comprometimento. Ausência de confirmação pública não confirma ausência de ataques. Comandos confirmados pelo fornecedor e a classificação crítica justificam remediar sem esperar mais exposição.
As próximas evidências devem incluir adoção verificada de patches, explicação de causa pela GitLab e telemetria confiável ou novas orientações oficiais. Depois de tempo para atualizar, detalhes podem distinguir caminho separado, bypass ou regressão. Registros locais devem identificar imagens antiga/nova, reinício, validação e responsáveis junto do histórico de incidente e configuração.
O teste prático é saber quais gateways existem, quem alterava fluxos e quais ativos e segredos cada processo alcança. Middleware de IA precisa da disciplina de runners CI, repositórios de artefatos e gestores de segredos. Localização dos dados vira controle real quando a organização consegue inventariar, corrigir, isolar e investigar o serviço que executa o trabalho.
Fontes e leituras relacionadas
Registro CVE-2026-90970 · Documentação do AI Gateway · Falha de template CWE-1336 · Arquitetura Duo auto-hospedada · Instalação e chaves de assinatura · Registro anterior CVE-2026-1868 · Orientação para registros de incidente · Registro original de descoberta
