智谱 ZCode 被曝打包上传 Git 全历史

智谱旗下的 AI 编程工具 ZCode,9 月 18 日被开发者曝出会在后台把整个工作区打包上传,范围包括完整的 Git 历史、LFS 大文件缓存和本机配置。当天晚些时候,ZCode 发出致歉说明,承认上传发生过,把原因归到”代码库索引”功能,并称问题已经修复。

开发者翻出了什么

最早把细节摆出来的是技术博主 Ferstar。他在博客里拆解了 ZCode 的本地快照机制:登录之后,一个随程序启动的后台进程会把工作区整体打包,用 AES-256-CTR 加密文件内容,再用服务端下发的 RSA 公钥包裹密钥,最后以表单直传的方式送进阿里云 OSS。解密用的私钥只在云端,用户手里的 .enc 文件自己打不开。

他给出的一份样本很具体:未压缩的工作区 345MB,加密后 313MB,清单里 42411 个文件。占大头的是 .git 目录,合计 86.6%,其中 LFS 缓存 196.1MB、Git 对象 102.2MB,源码和配置只有约 46MB。触发时机有两个,一个在每次提交提示词之前,一个在任务结束之后更新 Repo Wiki 时,单个会话最多记录到 62 次快照。

同一天,有开发者在智谱的公开反馈仓库里提了 issue,标题连问三个”为什么”:为什么静默上传全部 Git 历史、为什么加密成用户自己都打不开、为什么连关闭开关都不给。issue 里提到快照在本地上传失败后反复重试,记录到 564 次。另一位开发者在自己的机器上复现,一个项目快照 748MiB,.git 占比 98.91%,版本号是 ZCode 3.12.3。

开关失灵是这次争议里最刺的一点。Ferstar 的说法是,界面上的”优化体验”和”仓库快照索引”开关,管的只是服务端要不要拿数据训练模型,本地打包和上传照常进行。Git 历史里可能躺着早就删掉的密钥、废弃的旧配置、没推送的分支记录和内网域名,这些东西在当前代码里看不见,在 .git 里一样不少。

智谱怎么说

ZCode 的致歉说明把上传归因于”代码库索引”功能:Repo Wiki 生成页面时可能触发仓库数据上传,数据在云端生成完 Wiki 后立即销毁、不做保存。该功能上线初期默认开启,部分用户受到影响,现已修复。

补救措施有三条:近期开源 ZCode 代码库,邀请第三方评估并公开审查进展;当天给全体用户额外发放一次周额度重置。说明里没有交代的几件事,目前都无法核实:受影响的用户和仓库有多少、数据在 OSS 上实际停留多久、“销毁”有没有独立审计、修复之后的版本号是多少。开源时间表也只写了”近期”。

智谱当天还发布了新模型 GLM-5.3-FlashX,主打每秒 200 token 的输出速度。有开发者在博客里把两件事放在一起,调侃”全网都在问代码传去哪了,智谱在忙着发新模型”。

国内开发者现在能做的

ZCode 的用户里有不少是在公司项目上试用,Git 历史对企业的敏感程度往往高过当前代码。对还装着旧版本的人,比较稳妥的动作有三步:先升级到修复后的版本;检查本机 ~/.zcode/v2/checkpoints 下是否还留着待上传的快照;再把历史里出现过的密钥和令牌轮换一遍,别指望”已销毁”能覆盖到已经传出去的部分。

Ferstar 给过一个更硬的办法:在 macOS 上用 chflags uchg、在 Linux 上用 chattr +i 把快照目录锁成不可写,从文件系统层面挡住快照生成。代价是检查点回滚和时间线功能跟着失效。

这类编程 Agent 需要读仓库才能干活,本地索引本身不稀奇。分歧出在边界上:读到本地和传到云端是两件事,传当前代码和传整段历史又是两件事。智谱承诺的开源如果落地,外界至少能自己去看快照模块到底打包了哪些路径、开关接在了哪里。

参考来源:Ferstar 技术博客对快照机制与文件构成的逆向分析、zai-org/feedback 公开 issue、凤凰网科技、CocoLoop、Elliot's Harness Lab;ZCode 致歉说明核验归因、修复状态与补偿措施。