技术博主ferstar在9月18日发布对智谱ZCode的逆向分析,指该编程Agent在用户登录状态下,会在后台把整个工作项目连同完整修改历史打包加密,上传至云端服务器。这一发现把AI Agent安全讨论的重心,从模型失控、提示词投毒和外部攻击者,转向了一个此前很少被认真对待的方向:Agent的制造商本身是否也可能成为数据外传的来源。

ferstar的排查起点是本地硬盘占用异常。他找到一个约313MB的加密文件,附带清单显示其中涵盖约4.2万个文件,超过八成属于项目历史修改记录,还包括曾下载的大文件缓存和本地操作日志。代码分析显示,历史记录目录在打包流程中被排在密钥过滤和体积限制之前,意味着针对pem、key等密码文件的过滤和1MB体积上限对它不生效,曾提交进历史记录又被删掉的密钥也可能原样上传。

更受关注的是加密与上传机制。客户端先向智谱服务器索取上传凭证和一把公钥,本地完成压缩加密后,绕过智谱业务服务器直接上传至阿里云云存储,再由云存储回调智谱后台。公钥相当于锁、私钥相当于钥匙,而钥匙只保存在服务器一侧,用户无法查看加密包内容。ferstar发现该机制在用户发送请求前和任务结束后触发,活跃使用中他观察到多达62次快照记录。界面上的“优化体验”和“仓库快照索引”两个选项,经对照代码确认分别只控制是否用于模型训练、是否在服务端建立检索目录,两者都关闭时本地打包和上传照常运行。他还尝试手动删除那个313MB待发送文件,半小时后ZCode自动重新生成,该文件当时已失败564次

智谱当晚致歉,称问题源于ZCode的“代码库索引”功能,Repo Wiki在生成Wiki页面时可能触发仓库数据上传,数据在云端生成后立即销毁、不会保存,该功能上线初期默认开启,相关问题已修复,并承诺近期开源ZCode代码库、邀请第三方审查、为全体用户额外补偿一次周额度重置。

但社区追问与官方说明之间存在落差。智谱称索引“旨在帮助用户在本地生成”,却未解释为何需要把项目整体送往云端;ferstar的记录显示触发上传的时机之一在用户每次提问之前,与生成说明文档无关;官方文档称生成说明文档不读取历史修改记录,而上传包中约86.6%是历史记录。此外,ZCode v3.12.2版本更新日志中一条“优化仓库快照上传的内存占用”的记录在事件发酵后被删除。开发者冯若航的独立复现显示,客户端每次提问都会无条件申请上传凭证,他确认至少有一份快照的状态文件已写入服务端接受确认的标记,意味着至少有一台机器上的数据确实离开了本地。

ZCode并非孤例。今年7月,独立安全研究者cereblab通过抓包分析指出,SpaceXAI(原 xAI)的编程Agent工具Grok Build会把用户整个项目打包上传至谷歌云存储,包括用户明确告知AI不要读取的文件和未经脱敏的密码,在一个12GB测试项目中已确认上传体积超过5G;马斯克随后公开承诺删除所有已上传数据,SpaceXAI在服务器端关闭了上传功能。更早的3月31日,Anthropic的Claude Code因配置疏忽把约60MB源码映射文件误打包进公开发布的安装包,社区还发现其每小时轮询远程配置、读取代理与中国时区等环境信号,Anthropic工程师确认那是一次反账户滥用和反蒸馏的主动实验。

三起事件被发现的方式值得注意:一次靠配置失误泄露源码,一次靠安全研究者主动抓包,一次靠博主对硬盘空间的警觉,均非来自厂商自发排查或行业审计。与此同时,过去一年Agent安全规则快速更新——OWASP发布面向自主AI Agent的十大风险清单、新加坡出台相关治理框架、美国国家标准与技术研究院启动标准倡议、欧盟人工智能法案高风险义务生效——但这些规则防的是工具被外部攻击者利用,其设计假设是厂商站在用户一边,而厂商自身的数据外传通道恰在这一假设的盲区里。

从动机看,项目历史修改记录中的改动因果链、带结果标注的使用轨迹、以及未被任何模型见过的真实项目,对训练编程模型确有价值,这与上传包的构成存在吻合之处;但从打包的粗放程度看,激进的产品决策叠加工程层面的复用与偷懒,比有意的系统性采集更贴合现有证据。无论意图如何,用户能看到的只是数据离开了自己的电脑,之后发生什么取决于厂商的自我约束,而开源与第三方审查能否改变这一点,取决于开源的是哪个版本、审查覆盖客户端还是服务端。