flawopen.com/AI Security/progress-arcgenai-generator-command-injection-cve-2026-91140
CVE-2026-91140: injeção de comandos no ARCGenAI-Generator
Um documento Swagger/OpenAPI criado para isso podia influenciar a limpeza de arquivos temporários baseada em shell no ARCGenAI-Generator 2.0 quando um desenvolvedor o executasse. A Progress corrigiu o fluxo na versão 2.1; o aviso não relata exploração ativa.[1], [3], [4]
Uma instrução de limpeza da oficina recebe um nome de arquivo de outra etapa e o repassa ao sistema operacional. Se esse nome for tratado como parte de uma instrução de shell, em vez de texto simples, a limpeza poderá executar comandos inesperados. A correção evita o shell sempre que possível e restringe e coloca entre aspas qualquer nome de arquivo que ainda precise ser passado a ele.[1], [2]
Conceitos Centrais e Termos
ARCGenAI-Generator- Ferramenta Progress DataDirect que gera artefatos de conector REST a partir de entradas Swagger/OpenAPI. A versão afetada é 2.0; a Progress identifica 2.1 como corrigida.[1], [3]
Documento Swagger/OpenAPI- Descrição estruturada de API fornecida ao gerador. Nomes de esquema e metadados são entrada externa e não podem virar sintaxe de shell.[1], [4]
Injeção de comandos no shell- Falha no limite entre dados e comandos, na qual entrada não confiável altera o comando interpretado pelo shell do sistema operacional.[1], [4], [5]
Limpeza de arquivos temporários- Remoção de arquivos intermediários após a montagem. O aviso localiza a falha nas instruções de limpeza baseadas em shell.[1], [2]
CWE-78- Neutralização inadequada de elementos especiais usados em um comando do sistema operacional; atribuída ao
CVE-2026-91140.[4]
Mapeamentos de frameworks
- Referência CWE para a fraqueza descrita neste guia: CWE-78
Fluxo de Ataque Passo a Paso
Nomes derivados do documento entram no fluxo
O registro CVE identifica um documento Swagger/OpenAPI preparado como condição para o problema e exige que um desenvolvedor invoque o gerador. O commit público da correção mostra a limpeza recebendo {fileName} do orquestrador; as fontes citadas não comprovam que esse nome venha do documento.[1], [2]
As instruções de limpeza chegam ao shell
As instruções públicas do agente antes da correção usavam o terminal para limpar arquivos temporários e interpolavam {fileName} em expressões de caminho. O commit da correção identifica esse valor como recebido do orquestrador; as fontes citadas não comprovam que ele derive do documento.[2]
O sistema operacional pode interpretar a entrada como sintaxe
Um documento preparado pode fazer a instrução de limpeza executar comandos inesperados no contexto do processo do desenvolvedor. O registro CVE descreve execução de comandos na máquina do desenvolvedor; não publica uma cadeia específica nem afirma que toda execução do gerador seja vulnerável.[1], [4], [5]
Código-Fonte: Vulnerável vs. Seguro
O painel vulnerável cita as instruções do agente da Progress antes da correção. O painel corrigido resume as mudanças de instrução do commit 7ede6d9: preferir operações nativas, validar nomes pela allowlist e colocar cada expansão entre aspas se o fallback de shell for necessário. Comandos de limpeza executáveis e entradas de exploração foram omitidos.[2]
# Antes da correção da Progress: instruções do agente para limpar arquivos temporários
After successful assembly, delete temp files using the terminal with shell-native commands.
Use retry logic to handle transient file locks.
# Correção da Progress: prefira uma operação nativa sempre que possível
Prefer your file-editing tool's native delete/remove capability over the terminal.
Removing temp files is a plain file-system operation — it does not need a shell.
# Se for necessário usar shell, valide {fileName} com ^[A-Za-z0-9._-]+$
# e coloque entre aspas cada expansão nas instruções de limpeza específicas da plataforma.
Lista de Verificação de Segurança para Engenharia
- ✓Inventarie instalações do ARCGenAI-Generator, cópias em repositórios e ambientes de desenvolvimento ou CI; confirme a versão do produto, não apenas a do conector principal.[1], [3]
- ✓Atualize o ARCGenAI-Generator para 2.1 ou posterior. Até a atualização, não processe documentos Swagger/OpenAPI não confiáveis com a versão 2.0.[1], [3]
- ✓Revise as instruções corrigidas em
.github/agents/ARCGenAI-Generator.agent.md: operações nativas de arquivo são preferidas,{fileName}segue uma allowlist e expansões de shell ficam entre aspas.[2] - ✓Orientação da FlawOpen: Trate especificações de API e nomes derivados do esquema como entrada não confiável durante geração, limpeza e validação; não presuma que o agente preserve a separação entre dados e comandos sem controles explícitos.
- ✓Orientação da FlawOpen: Execute ferramentas de desenvolvimento com privilégios mínimos e, quando possível, isole a geração de documentos de repositórios, material de assinatura, credenciais de nuvem e segredos de produção.
- ✓Orientação da FlawOpen: Adicione testes de regressão não destrutivos para a allowlist de nomes e a seleção de limpeza sem shell; use nomes benignos e apenas fixtures temporárias de teste.
- ✓Orientação da FlawOpen: Para ambientes de desenvolvimento ou CI que executaram o ARCGenAI-Generator 2.0 com documentos não confiáveis, revise a telemetria disponível de processos e arquivos em torno dessas execuções. A ausência de telemetria é uma lacuna de garantia, não prova de comprometimento ou segurança.