flawopen.com/AI Security/progress-arcgenai-generator-command-injection-cve-2026-91140
CVE-2026-91140: inyección de comandos en ARCGenAI-Generator
Un documento Swagger/OpenAPI preparado podía influir en la limpieza de temporales mediante shell de ARCGenAI-Generator 2.0 cuando un desarrollador lo ejecutaba. Progress corrigió el flujo en 2.1; el aviso no informa de explotación activa.[1], [3], [4]
Una instrucción de limpieza del taller recibe un nombre de archivo de otro paso y se lo pasa al sistema operativo. Si ese nombre se interpreta como parte de una instrucción de shell y no como texto, la limpieza puede ejecutar comandos inesperados. La corrección evita el shell cuando es posible y restringe y entrecomilla cualquier nombre de archivo que todavía deba pasarse.[1], [2]
Conceptos Clave y Términos
ARCGenAI-Generator- Herramienta de Progress DataDirect que genera artefactos de conectores REST a partir de entradas Swagger/OpenAPI. La versión afectada es 2.0; Progress identifica 2.1 como corregida.[1], [3]
Documento Swagger/OpenAPI- Descripción estructurada de una API que recibe el generador. Los nombres del esquema y metadatos son entradas externas y no deben convertirse en sintaxis de shell.[1], [4]
Inyección de comandos en shell- Fallo en el límite entre datos y comandos que permite que una entrada no confiable altere la orden interpretada por el shell del sistema operativo.[1], [4], [5]
Limpieza de temporales- Eliminación de archivos intermedios tras ensamblarlos. El aviso sitúa el fallo en las instrucciones de limpieza basadas en shell.[1], [2]
CWE-78- Neutralización incorrecta de elementos especiales usados en un comando del sistema operativo; asignada a
CVE-2026-91140.[4]
Mapeos de marcos
- Referencia CWE para la debilidad descrita en esta guía: CWE-78
Flujo de Ataque Paso a Paso
Los nombres derivados del documento entran en el flujo
El registro CVE identifica un documento Swagger/OpenAPI preparado como desencadenante y requiere que un desarrollador invoque el generador. El commit público de la corrección muestra que la limpieza recibe {fileName} del orquestador; las fuentes citadas no demuestran que ese nombre proceda del documento.[1], [2]
Las instrucciones de limpieza llegan al shell
Las instrucciones públicas del agente anteriores a la corrección usaban el terminal para limpiar temporales e interpolaban {fileName} en expresiones de ruta. El commit identifica ese valor como recibido del orquestador; las fuentes citadas no demuestran que proceda del documento.[2]
El sistema operativo puede interpretar la entrada como sintaxis
Un documento preparado puede hacer que la instrucción de limpieza ejecute comandos inesperados en el contexto del proceso del desarrollador. El registro CVE describe ejecución de comandos en su equipo; no publica una cadena de explotación concreta ni afirma que toda ejecución del generador sea vulnerable.[1], [4], [5]
Código Fuente: Vulnerable vs. Seguro
El panel vulnerable cita las instrucciones del agente de Progress anteriores al arreglo. El panel corregido resume los cambios del commit 7ede6d9: preferir operaciones nativas, validar los nombres con la allowlist y entrecomillar cada expansión si se necesita recurrir al shell. Se omiten comandos de limpieza ejecutables y entradas de explotación.[2]
# Antes de la corrección de Progress: instrucciones del agente para limpiar archivos temporales
After successful assembly, delete temp files using the terminal with shell-native commands.
Use retry logic to handle transient file locks.
# Corrección de Progress: use una operación nativa siempre que sea posible
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.
# Si necesita recurrir al shell, valide {fileName} con ^[A-Za-z0-9._-]+$
# y entrecomille cada expansión en las instrucciones de limpieza específicas de la plataforma.
Lista de Verificación de Seguridad para Ingeniería
- ✓Inventaríe las instalaciones de ARCGenAI-Generator, copias en repositorios y espacios de desarrollo o CI; confirme la versión del producto, no solo la del conector principal.[1], [3]
- ✓Actualice ARCGenAI-Generator a 2.1 o posterior. Hasta entonces, no procese documentos Swagger/OpenAPI no confiables con la versión 2.0.[1], [3]
- ✓Revise las instrucciones corregidas de
.github/agents/ARCGenAI-Generator.agent.md: se prefieren operaciones nativas,{fileName}debe cumplir una allowlist y las expansiones de shell van entre comillas.[2] - ✓Recomendación de FlawOpen: Trate las especificaciones API y los nombres derivados del esquema como entrada no confiable en generación, limpieza y validación; no suponga que el agente separará datos y comandos sin controles explícitos.
- ✓Recomendación de FlawOpen: Ejecute las herramientas de desarrollo con privilegios mínimos y, cuando sea práctico, aísle la generación de documentos de repositorios, material de firma, credenciales cloud y secretos de producción.
- ✓Recomendación de FlawOpen: Añada pruebas de regresión no destructivas para la allowlist y la selección de limpieza sin shell; utilice nombres benignos y solo fixtures temporales de prueba.
- ✓Recomendación de FlawOpen: En los espacios de desarrollo o CI que ejecutaron ARCGenAI-Generator 2.0 con documentos no confiables, revise la telemetría disponible de procesos y archivos alrededor de esas ejecuciones. La falta de telemetría es una brecha de garantía, no una prueba de compromiso ni de seguridad.