深度警示:ZCode 悄然上传完整 Git 历史记录,AI 编程代理的隐私与安全博弈

深度警示:ZCode 悄然上传完整 Git 历史记录,AI 编程代理的隐私与安全博弈

AIRouter 1 分钟阅读 2 次浏览

紫喵API服务 的 AI API 使用建议

紫喵API服务 面向需要 OpenAI 兼容接口、Claude/Gemini/GPT 多模型切换、包月额度管理和图像模型调用的用户。阅读本文后,可以结合本站的模型清单、独立使用文档和个人面板,把教程内容直接落到实际调用流程中。

引言:当“本地 AI”不再本地

在生成式 AI 领域,ZCode 是由总部位于北京的 Z.ai 公司开发的一款桌面编程应用。Z.ai 正是知名开源权重模型 GLM 系列(如 GLM-5.3-Flash)背后的公司。然而,近期的一项逆向工程调查揭示了一个令人震惊的事实:尽管 GLM 模型本身是开源权重的,但 ZCode 这一闭源外壳程序却在后台悄悄执行着大规模的数据上传任务。

根据研究人员 ferstar 的分析,ZCode 会在用户登录后,静默地将整个工作区的完整内容——包括完整的 .git 历史记录、LFS 资产缓存、重写日志(reflogs)以及全局配置——加密并上传至阿里云 OSS。这意味着,你不仅是在上传当下的代码,更是将整个项目的演进历史、曾经删除的 API 密钥以及未发布的开发分支一并交给了服务商。

技术详解:ZCode 是如何“搬运”你的数据的?

1. 自动打包与负载分析

研究人员捕获了一个大小为 313MB 的加密压缩包,该包由一个 345MB 的商业工作区生成。通过本地明文存储的打包清单,我们可以清晰地看到数据分布:

  • .git/lfs/: 占比 56.8%
  • .git/objects/: 占比 29.6%
  • 源代码与文档: 仅占 13.4%

数据占比清单

显而易见,.git 目录占据了总负载的 86.6%。由于 Git 对象存储记录了仓库自创建以来的所有变更,这种上传行为相当于对开发者多年工程历史的全面“收割”。

2. 无法阻挡的上传流程

即便用户在 UI 界面中关闭了“优化体验”(optimizeAgentExperienceEnabled)或“仓库快照索引”(repoSnapshotIndexingEnabled)等开关,上传行为依然会继续。ZCode 的主机程序会在启动时无条件实例化捕获侧车(sidecar),只要 JWT 令牌有效,快照捕获便会持续进行。

上传流程图

整个流程如下:

  1. 客户端向 zcode.z.ai 请求凭据。
  2. 服务器返回 OSS 签名、对象密钥和每轮唯一的 RSA 公钥
  3. 客户端将工作区打包成 tar.gz,使用 AES-256-CTR 加密负载,并用 RSA 公钥包裹对称密钥。
  4. 直接 POST 到阿里云 OSS。

3. 只有 Z.ai 拥有的解密密钥

最令人不安的是,ZCode 使用了信封加密技术。RSA 私钥仅存在于 Z.ai 的云端。这意味着,即使是用户自己在磁盘上捕获到的 313MB 密文,也无法被用户或客户端本身解密。正如 ferstar 所言:“一个只有服务器能用的密钥,目的只有一个:确保服务器可以随时阅读你的代码。”

行业对比:闭源外壳的信任危机

ZCode 的这一行为并非孤例,此前 Anthropic 的 Claude Code 也曾陷入隐藏遥测的争议。然而,ZCode 将整个 Git 历史记录静默上传的行为在性质上更为严重。尽管 GLM 模型在社区中享有盛誉,但 ZCode 再次提醒了我们:模型权重的开源并不等于运行环境(Harness)的透明。

相比之下,像 OpenAI 的 GPT 系列或 Google 的 Gemini 往往在服务协议中明确声明数据收集范围,而 ZCode 的隐私政策中仅提到收集“对话中提交的文本和代码”,从未提及会打包上传整个 Git 仓库。

安全对策:如何保护你的代码?

目前,仅仅删除挂起的归档文件是无效的,客户端会在半小时内重新打包。最有效的修复方法是在内核级别使检查点目录不可写:

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

注意:执行此操作后,ZCode 的 UI 撤销/重放功能将失效,因为该功能本质上依赖于这些云端快照。

未来展望:从“信任”转向“验证”

为了应对 AI 代理可能带来的安全风险,学术界正在探索新的治理方案。例如,最近在 arXiv 上发布的论文 MAGS (Multi-agent Auto-formalization Guarantees Safety) 提出了一种多代理自动形式化框架。该框架利用 Dafny 这一验证感知中间表示,为代理生成的输出提供机器可检查的安全保证。虽然 MAGS 主要侧重于生成的代码安全性,但这种“形式化验证”的思路或许是未来约束 AI 代理后台行为、防止数据窃取的关键技术路径。

常见问题解答 (FAQ)

Q: ZCode 是开源的吗?
A: 不是。虽然它使用的 GLM 模型权重是开源的,但 ZCode 桌面应用本身是闭源的。

Q: 为什么上传 .git 目录很危险?
A: 因为 Git 历史中可能包含以前提交但后来删除的密码、私钥、内部服务器地址以及敏感的分支名称。

Q: 关闭设置中的“优化体验”能阻止上传吗?
A: 根据逆向分析结果,不能。这些设置仅控制数据是否用于模型训练或服务器端索引,不影响打包上传过程。

总结: 开发者在选择 AI 编程工具时,应优先考虑开源外壳或具有透明安全审计的工具。对于闭源代理,必须警惕其后台的网络连接与本地存储行为。记住,运行在本地的 AI,如果包裹在云端受控的外壳中,它就不再是真正的本地工具。