Py学习  »  Git

智谱旗下AI编程工具ZCode被扒静默上传完整Git历史

OSC开源模力 • 2 天前 • 32 次点击  

 

智谱的 AI 编程桌面端 ZCode,今天被扒出一个大问题。开发者 ferstar 发了一篇取证博客,说只要登录了账号,ZCode 会在后台静默把整个工作区——包括完整的 .git 历史、LFS 大文件缓存、reflog 和全局配置——打包加密上传到阿里云 OSS。该消息马上在国内技术圈传开,有人用自己的 Mac 顺着取证路径重跑了一遍,结论是"属实,而且不是会不会,是已经"。

参考来源:智谱 ZCode,你打包上传我的代码仓库干什么?

事情的起点很普通:ferstar 清理磁盘时发现 ~/.zcode 占了 700 多 MB。一路挖下去,在 v2/checkpoints/ 里看到一个 313MB 的 .enc 加密文件,旁边是状态元数据——这是一份标记为 baseline 的全量快照,workspaceSizeBytes 345MB,failureCount 已经到 564(上传失败了 564 次,还躺在 pending 里等重试)。他那个项目总共 10GB,剔除依赖后剩下的 345MB 几乎全是核心资产。

他把客户端的 app.asar 扒开逆向,上传链路还原得很完整:客户端先向 zcode.z.ai 请求上传凭证,拿到 OSS 表单签名、动态 Object Key、大小限制和一把加密公钥;然后在本地打包、流式加密后,根本不经过智谱的业务服务器,直接走表单直传阿里云 OSS,再由 OSS 回调通知智谱后端登记。

最讽刺的是加密方式。标准信封加密:内容用随机对称密钥走 AES-256-CTR,对称密钥再用 RSA-OAEP 包裹。但公钥是服务端动态下发的,私钥从头到尾只在云端。ferstar 试遍本机所有私钥都解不开——"你硬盘上那份 313MB 的密文,你打不开,ZCode 客户端自己也打不开,全天下只有智谱后端的私钥能解。"

快照里到底装了啥?密文解不开,但生成时的 Manifest(42,411 个文件的清单)是明文留在本地的。统计下来 .git 一个目录占了 86.6%:.git/lfs 56.8%、.git/objects 29.6%、.git/logs 0.2%,剩下的源码文档只有 13.4%。

也就是说一旦上传,云端拿到的不只是当前工作区代码,而是仓库自建库以来的全部历史——早就被删掉的敏感配置和历史 key、没推远端的本地分支名(等于未公开的研发动向)、.git/config 里写的内部 GitLab 域名。连全局配置文件 settings.behavior.json 都会被跨工作区打包随快照上传。

真正让开发者炸毛的是开关形同虚设。设置里两个开关——"优化体验"和"仓库快照索引"——你以为能关掉上传,其实一个只管要不要拿数据训练、一个只管服务端要不要建索引,关了本地打包上传一点不落。看客户端代码,负责捕获上传的 sidecar 在启动时无条件实例化,没有任何针对用户配置的判断,唯一门槛是能拿到登录 JWT。触发点是每次发 Prompt 前的 captureBeforePrompt 和任务结束时的 repo-wiki-update,单个活跃会话最多出现 62 次捕获。

隐私政策里只写会收集"对话中提交的文本、文件和代码",对"打包整个工作区和完整 Git 历史"只字未提,文档、FAQ、更新日志里也都没有。

怎么防御?删是打地鼠——作者第一次删了 pending 包,半小时后它重新抓了一份,失败计数从 564 蹦到 565。有效办法是在文件系统层加锁:macOS 用 chflags uchg ~/.zcode/v2/checkpoints,Linux 用 sudo chattr +i,内核拒绝写入,让上传链路无产物可发。代价是检查点回滚和时间线界面失效,对话、补全、工具执行不受影响。

"推理需要上下文,这大家都接受。真正越界的是两件事:数据范围和架构姿态。"

截至发稿,智谱官方进行了回应,称是「代码库索引」功能导致。


来源:

  • • 扒一扒 ZCode 静默上传全量 Git 历史的骚操作 - ferstar(https://blog.ferstar.org/posts/zcode-silent-workspace-snapshot-upload/)

 

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/201221