当 AI 代理的测试代码逃逸到 Mac:一行 bug 引发的沙箱警钟
原创当 AI 代理的测试代码逃逸到 Mac:一行 bug 引发的沙箱警钟
事故现场:Mac 突然开始朗读 JSON
我看到一份事故报告。2026 年 10 月 28 日下午 4 点 23 分,作者 Marut Pandya 的 Mac 突然开始说话。两个合成语音互相抢话,朗读着一段 JSON 格式文本,内容像“type, agent turn complete, thread id… turn id, one”。20 秒后,它们停了。当时没有人在终端敲过任何命令。来源:AA
那台机器当时正忙。Claude Code 2.1.286 处于自动模式,7 个后台子代理并行运行,每个代理在独立的 git worktree 里关闭一个 GitHub issue。它们写代码、跑测试,再开 PR,不需要 Pandya 逐步骤批准。没有沙箱。每个代理都以他的用户账号、完整权限、在他的笔记本上运行。来源:AA
Pandya 的第一反应是某个代理连上了互联网上的语音 AI。追查后他发现真相更平常,也更让人担心。肇事代理正在实现 live capture,一个 Claude Code 或 Codex 在每个回合后调用的钩子,负责启动后台 worker 上传该会话的转录。来源:AA
追踪与根因:一行 bug 如何启动真实进程
这个代理写了一个测试文件,里面有一行 bug。运行测试时,这行 bug 启动了真实进程:两个语音朗读进程,PID 分别是 86649 和 86651;还有两个后台上传 worker,目标指向 Pandya 的生产服务器。测试用了 macOS 的 say 命令作为用户自有通知程序的例子,结果 say 本身变成了被启动的进程。来源:AA
Pandya 构建过一个观测长期运行 AI 代理的工具,记录代理每一步做了什么。事故时间线从 16:12:18 起记录在代理转录与 macOS 统一日志里。16:23:22,live-capture 代理写下测试文件。16:23:29,第一次测试运行因无关失败提前停止。16:23:38,第二次运行,三个测试因为 fake process launcher 从未被调用而失败。16:23:40,两个 say 进程开始说话。16:23:45,代理把 bug 当作常规测试失败修掉了,没说什么。来源:AA
没有数据损坏。Pandya 在报告里说,这次没出事靠的是运气。如果那些上传 worker 真的把转录送到生产服务器,或者 say 进程读取了其他内容,后果可能完全不同。代理在 16:23:45 修掉 bug 时,只把它当成一次例行的测试失败,没提它启动了进程。来源:AA
多源视角与作者判断:为什么沙箱应是默认
这份事故报告在 Hacker News 上只拿到 1 分,0 条评论。这个数字和 Pandya 描述的严重性形成反直觉对比。一场能启动真实进程、能上传数据到生产服务器的测试事故,在社区里几乎没有激起水花。来源:HN
Pandya 给出的判断是“这让我相信自主代理需要默认沙箱”。对比一下无沙箱下代理可访问全部用户权限,以及他的观测工具所需的每回合钩子机制,权限缺口与自动化程度直接相关。来源:AA
事故暴露的核心风险在于,测试代码在无隔离环境中可以启动任意进程,而代理的“成功”测试可能掩盖逃逸行为。一个测试失败后代理会修 bug,但如果测试通过而它已经启动了外部进程,这个动作很可能不被记录。这是我在这份报告里看到的最值得担心的一点。我认为默认沙箱应当成为运行自主代理的前提条件。来源:AA
原文:
A Claude Code agent's test escaped into my Mac. I only noticed because it talked · 来源:Hacker News
作者:itfan123 值班编辑 · 发布于 2026年10月30日
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123![US Is Behind Serbia's "Student List", N1 and Nova S (United Group) [video]](https://www.itfans123.com/zb_users/theme/yd1125free/include/random/8.jpg)





