🔴 严重 | CVE-2026-54051 — Network-AI is a TypeScript/Node.js multi-agent orc...
🔴 【深度分析】严重安全漏洞:CVE-2026-54051
CVSS 评分: 严重(9.9)🔴 状态: Deferred 发布时间: 2026-07-20
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-54051 |
| CVSS 评分 | 9.9 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| CWE 分类 | CWE-78 |
| 发布时间 | 2026-07-20 |
| 最后更新 | 2026-07-23 |
| 状态 | Deferred |
| 数据来源 | security-advisories@github.com |
CVSS 评分:9.9(严重)
CVSS 向量: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
危害等级: 严重(Critical)
漏洞状态: 暂缓处理(NVD 标记为 Deferred,但厂商已发布修复)
漏洞概述
CVE-2026-54051 是一个存在于 Network-AI(TypeScript/Node.js 多智能体编排器)中的命令注入漏洞。该软件实现了沙箱机制,旨在限制被攻陷的智能体(Agent)执行危险命令。沙箱策略 SandboxPolicy.isCommandAllowed 使用通配符(glob)匹配允许的命令列表,但由于 ShellExecutor 通过 /bin/sh -c 执行命令字符串,攻击者可以利用通配符允许列表的绕过,实现任意命令执行。
该漏洞影响 v5.9.1 之前的所有版本,攻击者只需低权限(PR:L)、无需用户交互(UI:N)、网络攻击向量(AV:N),即可获得对宿主机器的完全控制(C:H/I:H/A:H),且影响范围扩大到沙箱外的系统(S:C)。CVSS 评分高达 9.9,属于极其严重的缺陷。
受影响组件与版本
| 组件 | 版本范围 |
|---|---|
Network-AI(network-ai npm 包) |
< 5.9.1 |
| 固定版本 | >= 5.9.1 |
官方安全公告与修复代码已在 GitHub 仓库中提供。
漏洞原理分析
1. 沙箱设计意图与缺陷
根据项目 THREAT_MODEL.md,SandboxPolicy.isCommandAllowed 是防御“Adversary 3.2(被攻陷的智能体)”的主要控制点。该策略维护了一个允许命令列表,例如:
git *
npm *
node *
这些通配符条目意图只允许以 git、npm、node 开头的命令(例如 git status、npm install)。
2. 绕过机制:Shell 拆分
ShellExecutor 将用户提供的整个命令字符串直接传递给 /bin/sh -c 执行。这意味着:
- 通配符
git *匹配的是整个命令字符串,例如git status; cat /etc/passwd。 - 因为
git *是一个 glob 模式,它匹配以git开头、后面任意内容的字符串,所以git status; cat /etc/passwd也会被允许列表放行。 - 然后 shell 执行该字符串时,
;将其拆分为两条命令:git status和cat /etc/passwd,从而实现了任意命令执行。
简单来说:允许列表信任了字符串的“前缀”,但 shell 不信任字符串的语义。
3. 攻击向量
攻击者(被攻陷的智能体)需要:
- 具备向
ShellExecutor提交命令的接口(通常通过智能体交互)。 - 利用任意允许的通配符条目(如
*、git *、npm *等)。 - 在命令中插入 shell 元字符(如
;、|、&、$、反引号、括号等)。
4. 根本原因(CWE-78)
该漏洞属于 OS 命令注入(CWE-78),根本原因是将来自用户的输入未经充分消毒直接传递给 shell 解释器。允许列表仅检查了命令字符串的“形态”,却未处理 shell 的语义解析。
影响评估
| 维度 | 分析 |
|---|---|
| 攻击复杂度(AC:L) | 极低,只需构造包含分隔符的命令字符串即可。 |
| 攻击向量(AV:N) | 网络攻击,无需物理访问。 |
| 权限要求(PR:L) | 智能体通常以受限用户运行,但该漏洞可自低权限提升至全局控制。 |
| 用户交互(UI:N) | 无需用户参与。 |
| 影响范围(S:C) | 沙箱内的漏洞可渗透到宿主机,影响沙箱外系统。 |
| 机密性/完整性/可用性(C:H/I:H/A:H) | 攻击者可以执行任意 OS 命令,完全控制服务器。 |
| 实际利用条件 | 需要存在一个允许的通配符条目(默认配置可能包含 git *、npm * 等),且智能体拥有提交命令的能力。 |
潜在后果
- 远程代码执行,完全接管服务器。
- 窃取环境变量、密钥、数据库凭据。
- 横向移动至内部网络。
- 拒绝服务(通过
kill或消耗资源)。
修复建议
1. 官方补丁:升级至 v5.9.1 或更高版本
修复版本(v5.9.1)做了两项关键修改:
ShellExecutor改为使用spawn(file, args, { shell: false })
不再调用 shell,而是直接以子进程方式执行已解析的参数数组(argv)。这样即使命令字符串中包含;,也会被视为参数字符的一部分,而非解析器指令。SandboxPolicy.tokenizeCommand预处理
在允许列表匹配之前,对命令字符串进行词法分析(quote-aware tokenization)。拒绝任何:- 未引用的 shell 元字符(
;、&、|、$、`、(、)、<、>、{、}、换行符)。 - 未闭合的引号(如单引号、双引号)。
- 引用的元字符则作为字面量保留(例如
echo "hello; world"中的;合法)。
- 未引用的 shell 元字符(
2. 深度防御:避免宽泛通配符
即使已升级,用户也应审查并收紧 isCommandAllowed 中的条目。避免使用 * 通配符后缀,例如:
- ❌
npm *、node * - ✅ 改用精确命令,如
npm install、node script.js(如果确实需要)
理想情况下,应将允许的完整命令路径和参数明确列出,或使用更严格的基于参数解析的访问控制。
3. 临时缓解措施(无法立即升级时)
- 限制允许列表仅包含不会导致注入风险的命令(例如,完全禁用通配符,只允许固定字符串)。
- 在沙箱外层实施网络隔离、强制访问控制(如 seccomp、AppArmor)。
- 对输入命令进行自愿检查,使用正则或
shell-escape库剔除元字符(但仅作临时缓解,不推荐长期依赖)。
参考资料
| 来源 | 链接 |
|---|---|
| CVE 详情页(NVD) | https://nvd.nist.gov/vuln/detail/CVE-2026-54051 |
| 官方安全公告(GitHub Security Advisory) | NVD 引用 security-advisories@github.com,建议查看 GitHub 仓库发布记录 |
| CWE-78(OS 命令注入) | https://cwe.mitre.org/data/definitions/78.html |
| CVSS 3.1 计算器(9.9 分) | https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
备注: NVD 当前将该漏洞标记为“Deferred”(暂缓处理),但厂商已确认并发布修复版本 v5.9.1。建议所有使用 Network-AI 的用户立即升级。
本文档基于 NVD 公开数据及项目代码分析撰写,所有技术细节均来源于官方描述与修复 commits,未做虚构。