夜雨聆风学习资料网

ARTICLE · 1037697

一个AI编程软件,把你整个代码库加密传走了

一个AI编程软件,把你整个代码库加密传走了

9月18日,一个网名叫ferstar的开发者发了一篇逆向分析。他拆的是ZCode,Z.ai 家的AI编程桌面应用。Z.ai 就是做GLM那家,北京的公司,权重开源,圈里不少人本地跑的就是它。

他拆出来的东西是这样的:只要你登录着,这软件会把你整个工作区打包,加密,然后传上阿里云的对象存储。

工作区是个什么概念,后面细说。先说个数。

━━━━━━━━━━━━━━

① 他抓到的那一个包

ferstar 做了个对照实验。一个 345MB 的商业工作区,被打成 313MB 的加密包,里面 42411 个文件。

光看体积不吓人。吓人的是拆开以后的构成:

  • .git
     目录,占整个载荷的 86.6%
  • 其中 .git/lfs/ 196.1MB,占 56.8%
  • .git/objects/
     102.2MB,占 29.6%
  • 真正的源码和文档,只有 46.2MB,占 13.4%

.git 不是你的当前文件,它是这个仓库从第一天到现在的全部历史。你三个月前删掉的 API 密钥在里面,你提交过又撤回的配置在里面,你还没推上远端的私密分支名字也在里面。

传上去的是一整条工程史,你刚才打开的那几个文件反倒是零头。

更绝的是,研究期间他删掉过本地那个待传的压缩包。半小时之内,客户端重新打了一个,还是 313MB,重试计数器往上跳。564 次失败重传就是这么攒出来的。

━━━━━━━━━━━━━━

② 两个开关,都是摆设

我看完的第一反应是:那把设置里那几个选项关掉不就行了。

不行。作者把界面上的开关跟代码逐个对了一遍:

「优化体验」(optimizeAgentExperienceEnabled)管的只是数据能不能拿去训练,采集和上传照旧。

「仓库快照索引」(repoSnapshotIndexingEnabled)管的只是服务端要不要给快照建索引,传还是照样传。

那个采集模块在程序启动时就被无条件创建,不看用户偏好。单次会话日志里,62 次采集事件,触发时机是每次你按下发送之前,以及任务完成的时候。

还有个细节:这个上传模块不在智能体的工具列表里。它是宿主级的旁挂进程,跑在工具循环之外。模型自己看不见它,你的授权设置也拦不住。

这个设计是刻意的。

③ 加密是防谁的

最扎人的一段在这。

这个包用的是信封加密:正文用对称密钥加密,对称密钥再用一个 RSA 公钥封装。那个公钥由服务器在上传时下发,对应的私钥只存在 Z.ai 的云端。

ferstar 拿本机所有能找到的私钥都试了一遍,一个都解不开。那 313MB 密文就躺在你自己的硬盘上,你和 ZCode 客户端本身,都读不了它。

他的原话我抄一下:

「一个只有服务器能用的密钥只有一个用途:确保服务器随时能读你的代码。」

再看隐私政策。ZCode 的条款写的是收集「对话过程中提交的文本、文件和代码」,这是每个 AI 编程工具都会写的那句。但翻遍隐私政策、FAQ 和更新日志,没有一个字提到会打包并上传整个工作区和 git 历史。

ZCode 是今年 7 月上线的,上线时主打的正是信任。它踩着 Claude Code 隐藏遥测的舆论窗口,把开源权重说成是「不用怕厂商随时关掉你」的出路。有高管在 X 上被问到会不会塞监听,回答是不会做网站清单之外的东西。

工作区快照,网站清单上没有。

④ 两个月前那一次,性质不一样

这类事不是头一回。今年 7 月,xAI 的 Grok Build 也被用户发现上传了完整的 git 提交历史和没动过的仓库数据,默认发往谷歌云,有人一个会话里触发了 186 轮上传。有人在自己 home 目录里跑,SSH 密钥、密码管理器数据库、文档照片全在路径上。

但这两件事得分开看。

Grok 那次是明处的疏忽。它自己往日志里写了记录,xAI 事后补了开关,默认设置没管好,但没藏。

ZCode 的特征正好相反。加密成只有服务器能解,意思是这个加密防的是代码的主人;开关被验证过拦不住上传;本地删了它会重传;触发条件是登录,不是使用。

说白了,一个是没管住,一个是不打算让你管住。

━━━━━━━━━━━━━━

⑤ 真要防,只能防在文件系统这一层

先说哪些招没用:删待传的包没用,关开关也没用,退出账号当然有用,但那样你就没法干活了。

能按住的是文件系统级的一把锁。Linux 上三行:

rm -rf ~/.zcode/v2/checkpointsmkdir -p ~/.zcode/v2/checkpointssudo chattr +i ~/.zcode/v2/checkpoints

macOS 是同样思路,最后一行换成 chflags uchg。这个操作让那个目录在内核层面变成不可写,采集进程写不进去。

代价是 checkpoint 回滚功能失效,而那个功能本来就得靠上传你的代码才能实现。聊天、补全、工具调用照常。想恢复把 +i 改回 -i。

那这件事该谁关心。如果你只是拿它写点小脚本,最坏结果是那些脚本被人看见。但要是你手上是商业代码,.git 里躺着三年的提交记录、客户名、内部域名、废弃了但没清干净的密钥,那上传的就是你公司的工程底牌。

作者给了个判断标准,比任何教程都实用:用任何一个编程助手之前,先问两个问题。它在登录之后往外传什么,它存下来的东西除了它还有谁能解开。

第二个问题,目前几乎没有哪个工具会主动告诉你答案。

今晚先做一件小事:打开你正在用的那个 AI 编程工具,把设置里「隐私」「数据」「遥测」几个页面翻一遍,看看它写了什么,没写什么。没写的部分,按最坏情况算。

相关学习资料