FlawOpen

flawopen.com/AI Security/progress-arcgenai-generator-command-injection-cve-2026-91140

● CVE-2026-91140 · CVSS 9.6 · 严重
安全研究 · FlawOpen

CVE-2026-91140:Progress ARCGenAI-Generator 命令注入

开发者运行 ARCGenAI-Generator 2.0 时,特制的 Swagger/OpenAPI 文档可影响基于 shell 的临时文件清理流程。Progress 在 2.1 中修复了该流程;公告未报告正在发生的利用。[1], [3], [4]

💡 通俗易懂的原理解析 (ELI5)

清理指令会从前一步接收文件名,再将它传给操作系统。如果文件名被当作 shell 指令的一部分而非普通文本,清理过程就可能执行意外命令。修复方法是在可能时避开 shell,并严格限制和引用必须传入 shell 的文件名。[1], [2]

核心概念与专有名词

ARCGenAI-Generator
Progress DataDirect 工具,可从 Swagger/OpenAPI 输入生成 REST 连接器产物。受影响版本为 2.0;Progress 指定 2.1 已修复。[1], [3]
Swagger/OpenAPI 文档
提供给生成器的结构化 API 描述。schema 名称和元数据属于外部输入,不应成为 shell 语法。[1], [4]
Shell 命令注入
数据与命令边界失效,使不可信输入改变操作系统 shell 解释的命令。[1], [4], [5]
临时文件清理
组装完成后删除中间文件。公告将问题定位在基于 shell 的清理指令中。[1], [2]
CWE-78
操作系统命令中特殊元素未得到正确中和;CVE-2026-91140 被分配此分类。[4]

框架映射

  • 本指南所述弱点的 CWE 参考: CWE-78

攻击执行流程分解

步骤 1

开发者使用 ARCGenAI-Generator 2.0

受影响组件为 Progress DataDirect Autonomous REST Connector GenAI Agents ARCGenAI-Generator 2.0。开发者运行工具处理 Swagger/OpenAPI 文档。[1], [3]

步骤 2

文档派生的名称进入工作流

CVE 记录将特制的 Swagger/OpenAPI 文档列为触发条件,并要求开发者运行生成器。公开修复提交显示清理步骤从 orchestrator 接收 {fileName};现有引用来源并未证明该文件名来自该文档。[1], [2]

步骤 3

清理指令进入 shell

修复前公开的 agent 指令通过终端清理临时文件,并将 {fileName} 插入路径表达式。修复提交指出该值由 orchestrator 提供;引用来源并未证明它源自该文档。[2]

步骤 4

操作系统可能将输入解释为命令语法

特制文档可能使清理指令在开发者进程权限下执行意外操作系统命令。CVE 记录描述了在开发者机器上的命令执行,但没有发布具体利用字符串,也未声称每次运行生成器都会受影响。[1], [4], [5]

步骤 5

2.1 版缩小 shell 使用边界

补丁优先使用原生文件操作,要求文件名匹配 ^[A-Za-z0-9._-]+$,并在必须回退到 shell 时为每次变量展开加引号。Progress 指定 2.1 为修复版本。[2], [3]

源代码对比:漏洞与安全实现

易受攻击面板引用了 Progress 修复前的 agent 指令。修复面板概述了提交 7ede6d9 的指令变更:优先使用原生文件操作、按 allowlist 校验名称,并在必须回退到 shell 时为每次展开加引号。片段省略了可执行清理命令和利用输入。[2]

存在漏洞的实现
# Progress 修复前:代理用于清理临时文件的指令
After successful assembly, delete temp files using the terminal with shell-native commands.
Use retry logic to handle transient file locks.
加固后的安全修复
# Progress 修复:尽可能使用原生文件操作
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.

# 如果必须回退到 shell,请使用 ^[A-Za-z0-9._-]+$ 验证 {fileName}
# 并在特定平台的清理指令中为每个展开值加引号。

工程与系统安全加固清单

参考来源

← AI Security Directory →