MS-Agent 的 shell 工具:正则黑名单把提示注入变成 RCE
CVE-2026-2256 让攻击者控制的内容诱导 ModelScope 的 MS-Agent 执行系统命令。根因是一个熟悉的反模式:用正则黑名单而非白名单来防护 shell 工具。
这是什么?
CVE-2026-2256 是 ModelScope 的 MS-Agent 中的一个命令注入漏洞。MS-Agent 是一个用于构建带工具调用的 AI 智能体的开源框架。该漏洞通过 CERT/CC 漏洞通告 VU#431821 披露,发布于 2026 年 3 月 2 日,由研究员 Itamar Yochpaz 报告。ModelScope 于 2026 年 1 月 15 日 收到通知;据 CERT/CC 称,在协调过程中未获得厂商任何声明或补丁。SentinelOne 将受影响范围定为 v1.6.0rc1 及更早版本,并将该问题归类为 CWE-77(命令注入)。
值得注意的不是智能体框架存在 RCE,而是该漏洞如何被触发:不是操作员输入恶意命令,而是由不可信内容——一份文档、一个代码仓库、一条日志、一份研究输入——诱导智能体去执行命令。这是一条最终落入真实 shell 的间接提示注入。
工作原理
MS-Agent 提供了一个 Shell 工具,让智能体执行操作系统命令来完成任务。该工具试图保证安全:check_safe() 方法会过滤危险命令。问题在于它如何过滤——使用一个基于正则表达式的黑名单。
针对 shell 输入的黑名单是众所周知的死路。表达同一效果的方式太多:编码、命令混淆、替代 shell 语法、可信解释器,以及普通的 shell 解析语义,都为攻击者提供了该正则从未预料到的路径。CERT/CC 的通告直言不讳:“基于黑名单的过滤本质上是脆弱的,常常可以通过编码、命令混淆或替代 shell 语法绕过。”
攻击链如下:
不可信内容(文档 / 仓库 / 日志 / 网页结果)
│ 其中含有引导智能体的文本……
▼
智能体决定使用 Shell 工具
│ 构造出包含攻击者影响文本的命令字符串
▼
check_safe() 正则黑名单 ──► [被绕过]
│
▼
shell 以智能体进程的权限执行该字符串
此处不复现任何 payload。重要的是其形态:智能体在其正常执行流程中自行组装并提交命令,因此并不存在可指责的”操作员误用”。过滤器看到的是它判定为良性的字符串;而 shell 看到的是可执行逻辑。
为什么重要
一旦黑名单被绕过,攻击者便以 MS-Agent 进程的权限执行命令。CERT/CC 与报告描述了现实的影响范围:读取 API 密钥、令牌和配置文件等机密;投放 payload;修改工作区状态;建立持久化;横向移动到内部服务;以及污染下游消费的构建产物或报告。
关于评分的一点说明:SentinelOne 给出的 CVSS 为 6.5(中等),向量中机密性与完整性影响均为低。请把它当作下限而非上限。CVSS 基础指标无法捕捉智能体语境——一个既摄入外部内容又持有凭据的智能体,正是”致命三要素”的组合(私有数据 + 不可信输入 + 行动能力),在那里实际后果会升级为主机沦陷。“中等”评级反映的是狭隘的技术视角;部署现实更为严重。
更广泛的教训远超 MS-Agent。任何暴露 shell、代码执行或文件工具,并试图通过封禁已知恶意字符串来确保其安全的智能体,都在重复这个错误。工具调用边界是一个授权问题,而非模式匹配问题。
防御
- 用白名单取代黑名单。 不要试图枚举危险命令。枚举那一小组被允许的操作,并拒绝其余一切。这是修复整类漏洞而非单个绕过的唯一改动。
- 避免
shell=True。 当 shell 工具不可避免时,直接执行参数向量(不经 shell 解释),使解析语义无法被转化为注入。绝不要把源自模型或内容的文本拼接进 shell 字符串。 - 沙箱化工具并施加最小权限。 在容器中运行具备 shell 能力的智能体,丢弃 capabilities、只读文件系统、no-new-privileges,并配置 MAC 策略(AppArmor/SELinux)。如果进程读不到你的机密,绕过也无法外泄它们。
- 将所有摄入内容视为不可信。 文档、仓库、日志和网页结果默认由攻击者控制。仅在你信任、已验证或已净化的内容上运行 MS-Agent——这正是 CERT/CC 通告的建议。
- 打破致命三要素。 不要把私有数据访问、不可信输入和具备行动能力的工具集中在单个无人监督的智能体中。分离权限,或将工具调用置于人工或策略检查之后。
- 监控绕过迹象。 记录智能体提交的命令字符串,对 shell 元字符(
;、|、&&、$()、反引号)、智能体派生的意外子进程,以及带可疑参数的execve()类调用进行告警。
现状
| 项目 | 参考 | 日期 | 备注 |
|---|---|---|---|
| CVE-2026-2256 | VU#431821 | 2026-03-02 | MS-Agent Shell 工具中的命令注入,经 check_safe() 黑名单绕过 |
| 受影响版本 | SentinelOne | 2026-03 | ModelScope ms-agent v1.6.0rc1 及更早版本;CWE-77;CVSS 6.5(中等) |
| 厂商响应 | VU#431821 | 2026-03-02 | 2026-01-15 通知;协调期间未获得声明或补丁 |
给构建者的要点:由正则黑名单防护的 shell 工具等于没有防护。如果你的智能体能执行命令,你真正能控制的边界是进程权限以及它所读取内容的可信度——请设计好这两点,并假定字符串过滤器终将失效。