本站试运行 · 内容持续整理日报第一期筹备中留个问题 · 私人入口
Happily Play
一起学 · 一起做 · 一起分享
← 知识库

给派出去的 AI 上锁:一次沙箱安全测试

让 Claude 自动派活给 Codex 之前,先测了它的沙箱能碰到什么。写入关得住,读取却能读到登录凭据;五张工单改下来,最后靠一份禁止访问名单堵上。

康 · Claude 整理 · 来源:自建工具 agent-bridge · 2026-11-03 压力测试与验收记录已实测2026-11-03

跨工具交接 里提到,我配了个小脚本,让 Claude 能直接把工单派给 Codex 执行。派出去的 AI 不在眼皮底下干活,所以 11-03 先做了一轮压力测试:它到底能碰到哪些东西。

先测:沙箱关住了什么

不经过模型,直接用 Codex 自带的沙箱命令逐项试:

  • 写项目目录以内:允许。
  • 写项目以外、别的盘、用户目录、Codex 自己的配置目录:拒绝。
  • 先建一个目录链接,再经它写出去:链接建得了,写出去被拒。
  • 起一个 Python 子进程往外写:同样被拒。
  • 读项目以外的文件:允许。
  • 读 Claude 和 Codex 的登录凭据:允许。(只测能不能打开,没有输出内容。)

结论:写入隔离可靠,读取完全不隔离。一个能联网的 AI 读得到登录凭据,这是最先要堵的洞。

顺带测出派单脚本自己的 7 个 bug。最严重的两个:同一秒派两单,会写进同一个结果目录互相覆盖;Codex 失败时,脚本会把上一次的旧结果当成这次的。

再改:五张工单,每张都独立验收

照交接单流程走:Claude 写工单和冻结的验收标准,Codex 改代码、补测试,Claude 重跑测试再上真机复测。

  1. 修 bug,默认断网。 读取暂时挡不住,先让它带不出去。这张没过验收:\\?\C:\…、\\localhost\c$\… 这类 Windows 特殊路径能绕过目录检查,派单真的在用户目录里建了文件。
  2. 补路径检查。 所有 \\ 开头的路径一律拒绝,解析前后各查一次。复测 18 种写法,全部拦住。
  3. 派单后扫描凭据。 派单前把真凭据的值记在内存里,结束后比对新改的文件和运行日志,命中就报警,退出码改成 3。这只是兜底:凭据被编码或拆开就查不出来。
  4. 改用权限配置档。 旧的沙箱参数没有「禁止读某路径」的选项,新的权限配置档有。把凭据路径设成 deny 后,真机上读凭据报「拒绝访问」,普通配置照常可读,写入规则不变。
  5. 禁止访问名单单独成文件。 把电脑上存凭据的位置盘点了一遍,远不止三处,名单扩到 14 项。名单文件缺失时脚本直接拒绝运行,不悄悄降级;最基本的三项写死在脚本里,删不掉。

离线测试从 15 项涨到 51 项,全程用假凭据和假 Codex。

学到的几件事

  • 只测写不够。 常见的沙箱检查只看「能不能写出去」,这次真正的问题在读。
  • 改文件权限没用。 Codex 每次启动会重写文件权限,手动收紧的下次就被改回去。只能用它自己认的配置。
  • 「测试全过」不算数。 第一张单的单测全过,是验收时上真机换几种路径写法才发现绕过。
  • 扫描是兜底,不是隔离。 先让它读不到,再查它有没有带出来。

边界

  • 只测了本机这一版 Codex 命令行,换版本要重测。
  • 打开联网开关后,沙箱里的 HTTPS 连接都握手失败。改动前就是这样,原因还没查;默认本来就断网。
  • 名单只管 Codex。Grok 的限制方式不一样,见跨工具交接的「踩过的坑」。

#多Agent#安全#沙箱#独立验收

这条笔记是公开内容。合作讨论不在这里,也不出现在任何公开页面。