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 -ichflags nouchg)。

对本地运行模型的更广泛影响

结论: 本地运行开源权重模型并不能保证隐私;周围的工具链(桌面应用、更新服务、遥测层)仍可能外泄数据。

  • 必须信任整个运行时栈,而不仅仅是模型权重。
  • 任何 AI 编码工具都应关注两个关键问题:
    1. 用户登录期间传输了哪些数据?
    2. 谁持有任何存储快照的解密密钥?
  • 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

相关