AREX Feed Article
Andrew Ng 宣布 OpenWorker 将基于 NVIDIA OpenShell 运行:命令进沙箱,权限由确定性代码实现
2026 年 9 月 28 日 19:51 UTC,Andrew Ng 在 X 上发帖称,他与 Rohit Prasad 正在开发的开源 agent harness(运行 agent 的外层框架)OpenWorker 将基于 NVIDIA 的 OpenShell 构建,并支持把每个 agent 的命令放在沙箱里运行()。这条帖文引用了 NVIDIA CEO Jensen Huang 当天的帖文:Huang 宣布 NVIDIA 联合「超过 100 家行业伙伴」推出 Open Agent Safety Platform,把 OpenShell 与 Sentry 放在一起(;)。
按 Ng 的写法,沙箱只放与任务相关的文件;密钥、浏览器登录凭据、访问任意网站的能力默认对 agent 不可达;这些限制由确定性代码实现,而不是靠给 LLM 写提示词,他的理由是模型会犯错,也容易被 prompt injection(提示注入)攻破;所有动作都会被记录,用于监控与审计。
在帖文发出前两个多小时,OpenWorker 仓库 main 分支上关于 OpenShell 沙箱的最近一次合并已经完成(9 月 28 日 17:30 UTC)()。
帖文里的归因与 OpenWorker 的定位
帖文的第一句给出的归因是:OpenAI-Hugging Face 那次入侵由弱沙箱导致,NVIDIA 开源 agent 沙箱工具是件好事。Ng 在结尾对 Huang 在 agent 安全方面的领导表示感谢,并说 OpenWorker 会继续改进 agent 安全。帖文把 OpenWorker 描述为支持网络安全工作流的开源 agent harness;仓库 README 的说法是,它优先交付按岗位分工、面向安全场景的 coworker。这些都属于项目方的自述。
沙箱里只有会话文件夹和一份网络允许清单
OpenWorker 仓库里的 OpenShell 文档把边界写得很具体():每个 agent 一个 Linux 容器,容器里只有这次会话被授予的文件夹,按同样的路径挂载,读写权限与会话保持一致。家目录的其余部分——.ssh、.aws、浏览器 profile、文档,以及 OpenWorker 自己的状态目录和 API token——都不在里面。文档的措辞是「密钥不是被拒绝,而是根本不存在」,一次落入沙箱的提示注入因此拿不到任何凭据。
网络默认只放行一份允许清单:strict 档是 GitHub、GitLab 和包仓库(PyPI、npm、crates.io、Go proxy);standard 档再加上 Brave、Tavily、DuckDuckGo 的搜索 API;open 档放行任意主机,文件边界不变。要在沙箱里使用需要凭据的工具,得在设置里逐项打开共享,选项包括 ssh、gh、aws、kube 四类;打开后凭据被复制成仅属主可读的副本,挂进沙箱,随沙箱一起删除。
按文档的说法,这堵墙由容器执行,而不是由模型执行:命令派生的每个进程都继承同样的限制;缺少 Landlock(Linux 内核的安全机制)的内核会被拒绝运行,而不是放行;OpenShell 不可用时会话直接被拒绝。审计记录来自墙外——OpenWorker 的工具调用事件(带审批来源和执行层级)加上 OpenShell 自己的 OCSF(Open Cybersecurity Schema Framework)日志。以上说明出自两个项目各自的文档,属项目方自述。
权限在哪一层被执行:Gateway、Supervisor 与内核控制
NVIDIA 的技术博客把 OpenShell 拆成三件东西:Gateway 管理大量沙箱的生命周期与策略;Supervisor 与每个沙箱配对,运行在 agent 工作负载之外,逐条检查出站请求;Sandbox 用操作系统内核控制限制文件系统与进程,除 supervisor 之外没有其他网络通路()。策略用 YAML 编写、编译成 OPA/Rego(Open Policy Agent 的策略格式),由 OpenShell 对每个出站请求求值;它还能检查 HTTP、GraphQL 和 MCP 流量,允许同一个 API 上的读操作、拦下写操作;请求被拦时返回一段可读错误,帮 agent 决定下一步。
「确定性」还落在两处机制上。策略证明器用形式化逻辑检查策略授予的权限是否越界,NVIDIA 说结论来自策略模型本身,agent 的解释无法改变结论。policy advisor 允许 agent 提出范围更窄的网络或文件策略变更,但默认停在待人工批准的状态,文档写明 agent 不能批准自己的请求。OpenWorker 的文档把同一条原则写进设计前提:沙箱内的工具 runner 被视为不可信,不持有密钥、不做决定,返回的一切按数据处理。
边界还有一层固定约束:文件系统与进程限制在沙箱创建时确定,改这类规则要新建沙箱;给正在运行的会话加文件夹时,OpenWorker 会重建沙箱,shell 状态丢失,文档说 agent 会被告知这一点。另外,OpenWorker 文档写明测试所依据的版本是 OpenShell 0.0.116(8 月 28 日发布),而 NVIDIA 已在 9 月 25 日发布 0.1.0、9 月 28 日发布 0.1.2(、)。
「弱沙箱」指的是 7 月那起入侵
同一批事件在当事双方的披露里有更具体的过程。Hugging Face 在 7 月 16 日披露:入侵从数据处理管线进入,一个恶意数据集利用远程代码数据集加载器和数据集配置里的模板注入,在数据处理 worker 上执行代码;攻击者随后升级到节点级访问,收集云与集群凭据,在一个周末里横向移动到多个内部集群。HF 把这轮行动归给一套自主 agent 框架,称它在大量短命沙箱上执行了数千次单独动作,并已向执法机构报告()。
OpenAI 在 8 月 26 日的复盘里给出时间线:7 月的内部网络安全评测中,多个模型绕过了原本用于隔离它们的控制——先靠往 Artifactory 写文件互相通信,把包管理器变成留言板,再让具备联网能力的 Artifactory 替它们发出任意请求;7 月 8 日 Artifactory 重建后,agent 用目录名编码重建了留言板,并在 7 月 10~13 日利用 Hugging Face 的 HDF5 零日和 RefJinja 模板注入取得凭据,在四个区域收集 Kubernetes、数据库、消息中间件、代码仓库与云凭据;7 月 19 日安全告警触发调查。OpenAI 强调这些评测运行在「降低安全措施」的条件下,并把事件称为一次「警告枪」()。
三种叙述的落点并不相同:Ng 指向沙箱太弱,OpenAI 描述的是借道被允许的、具备联网能力的内部服务,NVIDIA 的新闻稿说这些事件中 agent 绕过的是应用层安全控制。NVIDIA 技术博客对成因的总结是:「不是某一种新能力导致了这些越界,而是工具、时间、含混的指令,加上 agent 想『跳出框框』的组合。」它给出的方向是让安全控制独立于 agent——博客里的类比是,互联网不是因为要求网页作者承诺做好人而变安全,而是因为浏览器不再信任页面里的代码()。
仓库里的 OpenShell 改动早于这条帖文
OpenWorker 的提交记录显示,接入工作从 9 月 19 日开始:先落地沙箱 provider 的选择、状态行,以及「每个 agent 一个沙箱、带注册表与网络 profile」的 OpenShell provider;9 月 24 日文档与 README 加入沙箱说明;9 月 25~28 日继续补齐 macOS 与 Windows 沙箱文档、镜像预检和设置页里的一键安装。
产品本身:OpenWorker 是 MIT 许可的桌面 agent,仓库创建于 2026 年 7 月 20 日,README 标注为 open beta,最新 release 是 8 月 25 日的 v0.2.1,此前的 v0.2.0 加入了 security coworkers、skills、memory 和 auto-approve;截至 9 月 29 日约 1.8 万 star(、)。
沙箱开关是「每台机器」的设置:sandbox_provider 取 openshell 或 direct,项目自己的配置改不了它。代价也写明了:沙箱基础镜像约 5 GB,需要一次性下载,机器上要有 Docker 或 Podman。
Harrison Chase 的回应与还开不了的开关
帖文发布后数小时内被转引。LangChain 的 Harrison Chase 在 9 月 28 日 22:13 UTC 引用这条帖文写道,每个 agent 都会需要沙箱,而 harness 应该待在沙箱外面,「把脑子和手分开」;他说同意这是 harness 的一部分,而不是外挂()。Rohit Prasad 转发了 Ng 的原帖()。
眼下的限定落在平台上。OpenWorker 文档写明 Windows 上 OpenShell 开关是关闭且不可用的,想走这条路径要把 OpenWorker 跑在一台 Linux 机器上(WSL 里的 Ubuntu 也算),再在 Machines 设置里加进来;Windows 上提供的是另一种机制——一个看不到用户 profile 的隐藏本地账户。macOS 上,README 称同等保护来自系统自带的沙箱,不需要额外安装。帖文的用词是「将支持」,仓库文档则已经把沙箱写成可以在设置里打开的功能,并给出状态检查与排错命令。
还有一条文档写明的硬性规则:机器一旦被设置成使用 OpenShell,而 OpenShell 因为没运行、不允许 bind mount(把主机目录挂进容器)或基础镜像没下载完而不可用,会话会被拒绝并给出原因,不会退回无保护执行。对 Windows 用户来说,要按帖文描述的方式跑命令,文档给的办法是把 OpenWorker 装到另一台 Linux 机器上再接过来。