从ZCode整仓上传事件,看AI编程工具的数据安全底线
一、事件起因:一个313MB的加密包
2026年9月18日,独立开发者Ferstar的一篇逆向分析文章,在国内开发者社区投下了一颗重磅炸弹。
他在自己的电脑上发现,智谱AI旗下的编程桌面工具ZCode,在用户完全不知情的情况下,会静默将整个工作区项目打包加密,然后上传至阿里云OSS对象存储。更惊人的是,他本地的一个约10GB的商用项目,被压缩成了313MB的加密包,并且上传失败重试了多达564次——如果不是网络问题,这份包含核心商业代码的数据包早就已经传到了云端。
经过逆向拆解,整个上传流程逐渐清晰:
- 用户登录ZCode客户端后,后台自动扫描打开的项目目录
- 跳过node_modules等依赖目录,对剩余代码和Git历史进行tar.gz打包
- 使用AES-256-CTR算法加密,加密密钥由云端下发,本地无法解密
- 直连阿里云OSS进行上传,完成后回调服务端登记
最让开发者感到不安的是,被打包的不只是当前正在编辑的代码文件,还包括完整的Git提交历史、LFS大文件缓存、reflog记录、所有分支代码,甚至是已经删除的历史文件和配置。换句话说,一个项目从诞生到当下的全部开发轨迹,都会被完整打包带走。
二、官方解释与社区质疑
事件曝光当天,智谱在官方用户群做出回应,称该上传行为源于内置的”代码库索引”功能,目的是在云端生成代码知识库页面,帮助用户快速了解项目全貌,且数据在完成索引后会立即销毁。
但这个解释很快遭到了多方质疑:
第一,开关失效问题。 有开发者测试发现,即使在设置中关闭了”优化体验”和”仓库快照索引”两个相关开关,后台打包和上传行为依然在继续。如果用户明确选择关闭的功能都无法真正停止数据上传,那么工具的可信度就会大打折扣。
第二,加密密钥归属问题。 上传的数据采用RSA+AES双层加密,但私钥只保存在智谱云端,用户自己无法解密本地留存的加密包。如果真是为了用户的项目快照和回滚功能,按照行业惯例,解密密钥应该保留在本地,就像Git或者Time Machine那样。只有当数据是给服务端使用时,才会出现”用户自己解不开自己的数据”这种情况。
第三,整仓上传的必要性。 代码库索引功能理论上只需要代码文本即可生成知识库,但实际打包的内容包含了完整的Git历史、所有分支、已删除文件,甚至本地配置文件。这些数据对于生成项目文档来说并非必需,却包含了大量开发者不希望外传的敏感信息。
三、后续整改:紧急更新与代码开源
面对社区的强烈反应,智谱的动作不可谓不快:
- 9月19日,推送ZCode 3.14.0版本,更新日志明确标注”修复仓库百科异常上传的问题”
- 9月20日晚,智谱MaaS平台宣布将上线”数据内容不留存”功能,生效后模型调用的输入输出不再静态存储
- 9月21日,ZCode客户端代码正式开源至GitHub,接受社区监督
然而开源本身也引发了新的讨论。公开的仓库创建于9月20日,只有2个提交,没有版本标签,也看不到内部开发历史。换句话说,外界看到的是已经整改完成后的代码,出问题的3.12.3版本代码并没有公开,无法进行前后对比验证。
Ferstar在核对开源代码后表示,新的检查点功能确实是在本地调用Git命令做增量比对,元数据也存放在本机,不依赖云端。这也侧面说明,此前官方用”检查点回滚”来解释整仓上传的理由,在技术上站不住脚。
四、事件背后:AI编程工具的安全困境
这件事之所以引发这么大的反响,本质上是因为它戳中了所有AI编程工具共同的敏感点——代码数据的边界在哪里?
如今,AI编程助手已经成为很多开发者的标配。大家都明白,要让AI帮你写代码、改bug,必然要把相关的代码上下文传给模型。这部分数据传输是开发者主动选择的,也是可感知的。
但ZCode事件突破了这个共识边界:
- 它上传的不是用户主动发送给AI的代码片段,而是整个项目的全部内容
- 它不是在用户触发补全、问答等功能时才传输,而是后台静默持续进行
- 它不仅传输当前代码,还传输Git历史、已删除文件、本地配置这些用户从未打算共享的信息
这就好比你请了个助理帮你整理文件,结果发现他趁你不在的时候,把你整个档案室的文件都复印了一份带回自己公司,还说”我只是想更好地了解你的工作”。
对于企业开发者来说,这更是不可触碰的红线。本地项目中可能包含未发布的产品方案、核心业务逻辑、接口密钥、数据库配置……这些都是企业的核心资产。如果一款编程工具可以在后台随意打包上传,那无异于在企业内网开了一个数据出口。
五、对行业的几点启示
ZCode事件不是第一起AI工具数据安全争议,也不会是最后一起。随着AI编程助手越来越普及,整个行业都需要认真思考数据安全的底线。
1. 透明是信任的基础
任何涉及用户代码上传的功能,都应该明确告知用户:上传了什么、为什么上传、存多久、怎么删除。不能把重要的数据收集功能藏在冗长的用户协议里,更不能静默执行。开关就要有开关的作用,用户选择关闭,就应该彻底停止。
2. 最小够用原则
为了实现某个功能,应该只采集必要的数据,而不是能拿多少拿多少。生成代码知识库需要代码文本,但不需要完整的Git历史;做项目分析需要目录结构,但不需要本地配置文件。数据采集的范围越大,风险就越高。
3. 数据主权归用户
用户产生的数据,用户应该拥有控制权。加密数据的密钥、数据的留存和删除,都应该由用户主导。如果用户自己都无法访问和删除被上传的数据,那数据安全就无从谈起。
4. 开源是有效的信任背书
这次事件后智谱选择开源客户端代码,是正确的方向。对于处理敏感数据的工具来说,开源可以让社区监督代码行为,发现潜在问题,比单方面的承诺更有说服力。当然,开源要开完整,而不是只开整改后的”干净版本”。
六、给开发者的建议
在AI编程工具百花齐放的今天,享受效率提升的同时,也要注意保护自己的代码资产:
- 敏感项目慎用云端AI助手:涉及核心商业机密、未公开产品的项目,优先考虑本地部署的AI模型或者完全离线的工具
- 关注工具的网络行为:可以通过防火墙、抓包工具留意编程助手的网络请求,看看有没有异常的上传行为
- 及时更新版本:厂商修复安全问题后,尽快升级到最新版本
- 分离工作目录:不要把所有项目都放在AI工具的默认工作区,敏感项目单独存放
结语
AI编程工具是生产力的放大器,但前提是建立在信任的基础上。开发者愿意为了效率让渡一部分代码的访问权,但这不等于放弃数据主权。ZCode事件给整个行业敲响了警钟:在追求产品功能和用户体验的同时,不能突破数据安全的底线。
毕竟,程序员可以接受AI帮自己写代码,但很难接受AI偷偷把自己的代码搬走。

