ZCode 静默上传完整 Git 历史记录——隐私泄露分析
ZCode 在未经同意的情况下上传了用户的完整 Git 历史记录
核心要点: ZCode 桌面应用程序会加密每个登录用户的完整 .git 目录,使用仅服务器持有的 RSA 公钥包装加密密钥,并将归档文件上传至阿里云 OSS 服务。用户无法解密该数据包,且没有 UI 开关可以阻止数据外泄。
数据外泄的工作原理
结论: ZCode 客户端会打包工作区为 tar.gz,使用 AES-256-CTR 加密,使用服务器提供的 RSA-OAEP 公钥包装对称密钥,然后直接将密文 POST 到阿里云 OSS 存储桶。
- 客户端联系
zcode.z.ai以获取签名的 OSS 表单、对象键、大小限制以及每次上传的 RSA 公钥。 - 数据包包含完整的
.git目录(对象、LFS 缓存、引用日志、配置)和工作树。 - 加密后的归档文件会本地存储(例如
~/.zcode/v2/checkpoints),但由于私钥仅存在于 Z.ai 的云环境中,用户无法解密。 - 上传完成后,OSS 会回调 Z.ai 的后端以注册快照。
重构的流程图(见源文件中的图片)显示了一个 凭证协商 → 本地打包 → 加密 → 直接 POST 到 OSS → 后端回调 的序列。
实际上传的内容
结论: 上传数据中超过 86% 是 Git 对象存储,其中包含仓库的完整历史记录,包括已删除的密钥、未发布的功能分支和内部配置。
| 内容 | 大小(示例) | 占比 |
|---|---|---|
.git/lfs/ |
196.1 MB | 56.8 % |
.git/objects/ |
102.2 MB | 29.6 % |
.git/logs/ |
0.6 MB | 0.2 % |
| 源代码与文档 | 46.2 MB | 13.4 % |
一个包含 42,000 个文件的快照,从 345 MB 的工作区生成了 313 MB 的加密归档文件。
UI 开关无法阻止上传
结论: 两个可见设置——优化体验 和 仓库快照索引——仅影响下游服务器端的训练或索引;它们不会阻止客户端打包并上传快照。
- 负责捕获的旁路组件在启动时无条件实例化,仅受有效 JWT 令牌限制。
- 会话日志记录了单次会话中 62 次捕获事件,分别在每次提示前和任务完成后触发。
- 该代理的工具界面(31 个工具)中没有任何快照或遥测命令;数据外泄发生在工具循环之外。
加密密钥设计证实仅服务器可访问
结论: 包装加密使用仅服务器持有的 RSA 密钥,意味着只有 Z.ai 能解密上传的归档文件。
- 公钥在凭证协商阶段交付。
- Ferstar 尝试使用任何本地私钥解包归档文件均失败。
- 因此,用户磁盘上存储的密文对用户或客户端本身均不可读。
隐私政策遗漏
结论: ZCode 官方隐私政策提到收集“对话期间提交的文本、文件和代码”,但完全未提及完整工作区或 Git 历史上传。
- 无 FAQ 条目、无更新日志说明或政策修订涉及快照功能。
- 唯一相关的声明是关于“优化计划”的通用退出选项,但并未涵盖上述行为。
社区反应与验证
结论: 该发现迅速引发关注,Ferstar 在 X 平台的帖子获得超过 27.6 万次浏览,同时一份中文语言警报也达到 6.38 万次浏览。
- 开源 AI 代理作者 Petri Kuittinen 警告:“不要信任闭源 AI 工具。”
- 多个独立分析(如 OrcaPromptVault)证实存在隐藏的检查点/回滚功能,会触发上传流程。
- 部分用户报告未看到
~/.zcode/v2/checkpoints目录,表明后续版本可能已修改该机制,但官方尚未发布任何声明。
缓解措施
结论: 唯一可靠的缓解方法是在文件系统级别阻止客户端写入检查点目录。
# Linux
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
sudo chattr +i ~/.zcode/v2/checkpoints
# macOS
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
chflags uchg ~/.zcode/v2/checkpoints
- 此操作会禁用检查点回滚 UI,但聊天、自动补全和工具调用功能仍可正常使用。
- 重新启用需移除不可变标志(
chattr -i或chflags nouchg)。
对本地运行模型的更广泛影响
结论: 本地运行开源权重模型并不能保证隐私;周围的工具链(桌面应用、更新服务、遥测层)仍可能外泄数据。
- 必须信任整个运行时栈,而不仅仅是模型权重。
- 任何 AI 编码工具都应关注两个关键问题:
- 用户登录期间传输了哪些数据?
- 谁持有任何存储快照的解密密钥?
- Tokenstead(本分析来源)将持续监控 Z.ai 的回应,并相应更新发现结果。
开发者应吸取的关键教训
- 切勿假设开源权重模型意味着整个系统完全开源。 工具链可能是闭源的,并执行未披露的遥测行为。
- 检查任何 AI 辅助 IDE 的网络流量;留意对外部云存储服务的 POST 请求。
- 优先选择开源工具链,其应公开遥测协议并允许用户审计代码。
- 若必须使用无法审计的闭源工具,请应用文件系统加固(如设置不可变目录)。
参考资料
- Ferstar, Inside ZCode: Silently Uploading Your Entire Git History to the Cloud, 2026 年 9 月 18 日 – 完整取证报告。
- Ferstar(27.6 万次浏览)和 FeiZ(6.38 万次浏览)在 X 平台的帖子。
- ZCode 更新日志和隐私政策(Z.ai 官方网站)。
- OrcaPromptVault 对 ZCode 系统提示的快照。
- V2EX 讨论(中文社区反应)。
- Lookonchain 对该事件的报道。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- Dispatch