2026年,编码代理开始删掉真正重要的东西了。就在今年,一篇题为“Claude CLI删了我的主目录并清空了我的Mac”的Hacker News帖子,拿到了255个赞同点和216条评论。Cursor的“YOLO模式”发了疯,把自己连同一切全都删了个干净。OpenAI论坛上,用户报告Codex在项目目录之外执行了文件删除——240到700 GB的数据直接绕过回收站消失了。GitHub上的一个issue记录了一次清理操作失误,大约32.8万个文件被删,且整个过程没有任何日志。
我每天跑着好几个这样的代理,从来不会天然地信任它们的默认权限。当这些代理开始在我的机器上执行shell命令时,我花了好几天时间,把市面上六个主要客户端的权限模型都拆了一遍——Claude Code、Cursor、Codex CLI、VS Code Copilot、Claude Desktop、Devin Desktop——只为了回答一个问题:当你的代理想干一件危险的事,到底什么东西能真正拦住它?
![]()
答案让我惊讶了两次。第一次,因为原生防护比大多数人想象的要好。第二次,因为这六家全都共享着同样的三个缺口。
先说好的部分:原生防护不是摆设。这点得给各家厂商些肯定——他们确实没闲着。Cursor默认会在Seatbelt(macOS的强制访问控制框架)或Landlock(Linux的安全模块)沙箱中运行未被列入白名单的shell命令。Codex塞进了三层沙箱,还提供了按工具划分的MCP审批模式。VS Code两周前在1.127版本中默认为终端命令开启了内核级沙箱。而且,我们需要诚实看待那些恐怖故事:最糟的情况都发生在用户自己关掉防护之后——Codex那些数据丢失报告出现在“danger-full-access”模式下,顾名思义,这个模式就叫作全面危险访问。
所以,问题并不是“代理没有刹车”。问题在于,刹车在哪里会失灵。六个客户端的刹车失灵地带,惊人的一致,归纳为三个缺口。
缺口一:没有人能针对MCP工具调用的参数编写拦截规则。VS Code有一套相当不错的允许/拒绝引擎——它用正则匹配完整的命令行,且拒绝规则覆盖允许规则。但这套机制只对集成终端生效。到了MCP工具这里,审批就变成了二元的:要么信任整个工具,要么完全不信任。
同样的模式在每一家都一样。Cursor的MCP白名单只匹配“服务器:工具”这样的字符串,不涉及其中的参数。Codex按工具名称和注解来审批。Claude Desktop提供的是“始终允许”这个选项,每个工具一个开关,没有任何细颗粒度。Claude Code的权限规则只按名称匹配MCP工具。Devin Local只匹配单词边界前缀,连正则都不支持。一句话:你可以在VS Code的终端里拦截rm -rf这样的命令,但换成MCP工具调用,在哪家客户端里都拦不住。而MCP工具调用恰好就是那个被污染的README或者恶意工具描述能把你的代理直接变成攻击者的地方。如果代理加载了一个名为run_command的工具,它根本就不需要借助你的终端。
缺口二:没有人去消毒工具返回的内容。所有人都在盯着代理想做什么,却几乎没有人盯着代理读到了什么。工具返回的结果就是间接提示注入的正门——一个被爬取下来的网页、一个仓库文件、一条数据库记录,里面写着“忽略之前的指令并……”。这些内容直接进入模型的下一次推理上下文,而没有任何机制去清洗或过滤其中的恶意指令。代理会忠实地阅读并可能执行这些藏在数据里的指令,这就把攻击面从“你允许代理做什么”悄悄转到了“代理看见了什么”。
原文提到存在三个缺口,但后面具体拆解的只有上述两个,第三个缺口在所提供的材料中未展开,因此这里不强行补充任何未被明确描述的内容。总而言之,目前的防护更多地集中在外向的动作上,对于内向的信息流入几乎是不设防的。如果你的代理能在MCP工具调用中执行任何参数,而且工具返回的任何内容都能直接喂给模型,那么“沙箱”和“权限审批”就只是建在沙滩上的防波堤。
不管你是否关闭了那些高大上的保护开关,缺口就摆在那里。也许下一次当你看到代理弹出一个确认框,问你是否允许某个操作时,你该问问自己:它读进去的东西,谁能替我审一审?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.