ZCode 将一名开发者的整个代码仓库发给了 Alibaba,Git 历史也在内
一位以 ferstar 的名义发表内容的中国开发者,9月18日正在清理硬盘,以腾出空间。他发现了一个不是自己创建的文件:313兆字节,加密,位于一个和 ZCode 有关的文件夹里,ZCode 是一个代码代理,它待在他的桌面上,就像 Claude Code 待在我的桌面上一样。他把它删了。半小时后他回来,文件自己原封不动地重新出现了。
里面装的是他的工作。是他的全部工作。接下来的几天里,他一直在拆解这个软件,想弄清楚是谁把它装进去的,什么时候装的,以及它被送去了哪里。
ZCode 是智谱的桌面工具,就是那家做 GLM 的公司,我昨天刚好还在跟你聊贵了两倍半的新版 FlashX。所以他们卖的是一个能在你的项目里写代码的代理。很明显,它对哪些东西属于你,意见相当宽泛。
313兆字节里有什么
这位研究者分析了这个归档文件,里面的分布说明了一切。在一个345兆字节的项目中,只有46兆字节是代码和工作文档。剩下的,也就是超过86%,是隐藏文件夹 .git:196兆字节的大文件,以及102兆字节的对象和历史记录。
先说一句这个文件夹,因为问题的核心就在这里。当你用 Git 跟踪代码时,这个目录里不只有你当前的文件,还有所有之前的版本,你放弃了却从未发送出去的分支,每一次修改的历史记录,以及很多时候某个人提交过又删除的东西留下的痕迹。Git 仓库就是你的房子,再加上阁楼里那些你从没打开过的箱子。而天花板下面,有时候还放着钥匙。
在第二台机器上,同一个工具生成了一份包含7,946个文件的清单,总共758兆字节,其中 .git 文件夹占总量的98.91%。软件的过滤器确实会排除 node_modules、.env 文件、私钥,以及文件名中包含“token”或“secret”的文件。它们从来不会排除 .git。
卡车在夜幕降临时出发。没人要求它做任何事,它明天还会回来
它去了哪里,又是怎么打包的
目的地是阿里巴巴的一处存储空间,这家中国巨头做的是云服务。这个归档文件分两步加密,内容使用对称密钥,服务器发送公钥来封装这个密钥。实际翻译一下:打开这个包的密钥只存在服务器那边。你在自己的硬盘上只有一个无法读取的文件,既不知道里面有什么,也没有办法解密它。
发送机制比内容本身更让人不舒服。一个小程序会在登录时启动,然后一直待在那里。它会在你向代理发送每个请求之前,对你的工作空间拍一张快照,并在工作结束时再拍一次。在一次写代码的会话中,研究者数出了62次触发。它的错误日志记录了564次发送失败后又重试的尝试。
接下来是要命的问题:界面里的开关。一共有三个。一个控制你的数据是否用于训练。一个控制你的仓库是否在服务器端建立索引。还有一个控制代理的记忆。研究者把三个都关掉了,归档文件还是继续抵达。因为这些设置决定的是服务器如何处理它收到的东西,不是你的电脑向它发送什么。
一块漂亮的面板,还有一大捆不知道通向哪里的断线。你想怎么拨就怎么拨,什么也关不掉
智谱的回应
有一件事得承认他们:他们回复得很快。编辑方道了歉,解释说快照有两个用途,出错后恢复你的工作区,以及自动生成项目文档,并声称页面生成后服务器端的数据就会被销毁。他们承诺公开客户端代码,并让第三方对其进行审计。
问题在于,他们自己的隐私政策是怎么写的,而这份政策至今没有重写。处理主要通过位于新加坡的服务器进行,涉及的数据包括文本、配置以及在终端中输入的命令,而且只要账户存在,这些数据就会一直保存。政策中没有任何地方写着会提取仓库的完整 Git 历史。因此不能说这件事是被隐藏起来的,但可以说,他们没有把它说出来。
另一名开发者在 3.12.3 版本上复现了这个问题,一名 Windows 用户则接连看到了 32 个工作区快照,最大的一个数据包达到了 107 兆字节。这不是个例,也不是什么奇怪的机器。这也不是今年第一次发生这种事:七月,xAI 的代码工具 Grok Build 就已经因为同类数据回传问题受到点名。
如果你在使用代码代理,你该怎么做
首先,如果你安装了 ZCode,你可以在系统层面让快照目录无法写入,这是唯一真正有效的应对办法:
# Linux
sudo chattr +i ~/.zcode/v2/checkpoints
# macOS
chflags uchg ~/.zcode/v2/checkpoints
# Windows, en PowerShell, dossier en refus d'écriture
icacls "$env:USERPROFILE\.zcode\v2\checkpoints" /deny "%USERNAME%:(W)"也别指望删除已经存在的文件,它半小时内就会自己重新生成。把可能残留在旧提交里的凭据也轮换掉,避免用你的个人账户在主仓库上运行这类工具。
这把锁很牢固。问题在于,钥匙不在你手里
接下来,真正值得吸取的教训是,问题不只在 ZCode。代码代理就是一种会读取你的文件、修改它们并在你的电脑上执行命令的程序。为了完成工作,它必须看到很多东西。问题不在于它能不能看到,而在于它会把什么东西传出去,以及这些事是否在某处被明确写出来。三天前,Anthropic 在 Claude Code 上也得到了同样的教训,权限控制存在两个盲点。
我自己的规则一直很简单,而且不依赖任何界面里的任何设置:不该被传出去的东西,就不会放在代理工作的目录里。机密放在单独的配置文件中,放在仓库之外。客户的仓库放在一台机器上,我自己的放在另一台。不是我疑神疑鬼,而是在“停止发送”按钮不起作用时,这是唯一还剩下的防御手段。
还有一个没人问过 Zhipu 的问题,这个问题比其他事情更让我不舒服。他们承诺公开客户端代码,并让第三方对其进行审计。很好。但这 313 兆字节在 Alibaba 那里睡了多久,还有多少类似的压缩包仍然睡在那里,属于那些从未注意到任何异常的人?



加入对话
您必须拥有一个账户才能评论这篇文章。注册免费,耗时不到一分钟。
目前没有评论。