🔴 【深度分析】严重安全漏洞: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" 中的 ; 合法)。

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,未做虚构。