ZCode 快照事件之后:开源能挽回多少信任
开发者 ferstar 逆向发现,智谱的编程工具 ZCode 会生成含完整 Git 历史的工作区快照,加密后直传阿里云 OSS,密钥封装用的私钥在云端。智谱回应称来自默认开启的代码库索引功能,道歉、删除数据、请第三方核查,三天后把整个产品以 Apache 2.0 开源并切断该链路。仍未回答的是:现在还有什么数据会离开本机,以及开源仓库为何没有保留事故之前的提交历史。
Marked important, but published more than 30 days ago, so it moved down to this band.
On this page11 sections
This signal comes from a Chinese-language source and is written in Chinese.
Record
The signal
#事情经过
9 月 18 日,开发者 ferstar 清理磁盘时注意到 ~/.zcode 目录占了不少空间。逆向客户端、分析网络请求之后,他发现智谱旗下的编程工具 ZCode 会生成本地工作区快照——不只是当前代码,还包括 .git 历史、Git LFS 缓存和 reflog——并且存在把加密快照上传到阿里云 OSS 的链路。
他分析的一份具体快照约 313MB、42,411 个文件,约 87% 来自 .git 目录;状态文件显示它经历过 564 次上传尝试,因超过大小限制一直停在本地、没有传成功。他随后用一个较小的公开仓库复现了上传。
加密不等于你持有钥匙
快照用 AES-256-CTR 加密,加密密钥再由服务端下发的 RSA 公钥封装,对应的私钥在云端。按他逆向出的链路,客户端先向 ZCode 服务端要 snapshot ID、RSA 公钥和 OSS 上传凭证,本地打包加密后直接把密文传到 OSS,绕过 ZCode 服务端——这也意味着审计和策略控制能力都受限。
这里的加密防的是第三方,不防厂商本身。
厂商的回应
智谱称问题来自代码库索引功能,它支撑本地索引、会话检查点、历史回退和 Repo Wiki;Repo Wiki 在云端生成时可能触发仓库数据上传。这项功能早期默认开启,相关数据在 Wiki 生成后销毁、没有用于模型训练,并就此道歉。
三天后智谱把 ZCode 整体开源,采用 Apache 2.0,包括桌面端、Web、后端、Agent CLI 和 Agent Runtime;v3.14.0 删除 Repo Wiki,并切断本地快照的生成与上传链路。智谱还请中国信通院和绿盟科技做安全核查,前者确认相关 OSS bucket 已是零数据。
仍然没有回答的
InfoQ 的报道提了三个问题,值得原样留下:
- 今天公开出来的 ZCode,还有哪些数据会离开本机?
- 为什么开源仓库没有保留事故之前的 Git 历史?
- 一款能读整个代码库、跑 Shell、连 MCP、调用插件、可能接触企业凭据的编程智能体,发生过数据边界争议之后,「代码开源加第三方核查」能在多大程度上重建信任?
本条依据 InfoQ 中文的报道;ferstar 的逆向分析原文未经本站单独核对。
可迁移的一点
把它和本站已发的 Kiro Crew 那条放在一起看。Kiro Crew 的防护——敏感路径拦截、凭据脱敏、签名审计日志——写在系统层,没有一条写在提示词里。ZCode 这次的问题不出在模型,而出在一个默认开启的产品功能:它在用户看不见的地方,替用户决定了哪些数据可以离开这台机器。
所以评估一款编程智能体,要问的不只是它能做什么,还有三件事:什么数据会离开本机;谁持有解密的钥匙;这个默认值是谁定的。
Why now
Why it matters
#编程智能体读得到整个仓库、提交历史和可能的凭据,所以它的数据边界比它的能力更先决定能不能用。这次事件的每一环——默认开启、密钥在云端、直传绕过服务端——都不是模型的问题,而是产品设计的问题;而厂商用开源来回应,又把「开源能不能替代可验证的数据边界」这个问题摆到了桌面上。
Background
Technical context
#信封加密常见做法是用对称密钥(如 AES)加密数据、再用非对称公钥封装对称密钥;谁持有对应私钥,谁就能解密。私钥在服务端时,加密只防传输与存储环节的第三方。Git 的 reflog 与 LFS 缓存会保留已删除分支和已覆盖的提交,其中可能包含曾经提交又撤回的密钥。
Audience
Who should care
#Next
Learning path
#- 先读《智能体安全与提示注入防御》:护栏要落在模型之外能强制执行的那一层
- 对照本站的 Kiro Crew:七项防护没有一条写在提示词里
- 在自己用的编程工具上检查一次:它的本地缓存目录有多大,里面有什么
- 读《人在回路的审查》:不可逆且对外的动作,应该在发生前被授权
- 把「什么数据离开本机、谁持有钥匙、默认值是谁定的」写进团队的工具评估清单
Network
Where it sits in the network
#How this signal connects to neighbouring technologies, skills and background knowledge. Follow any link to keep exploring.
Further thought
Follow-up questions
#- 你在用的编程工具,本地缓存里存了什么,哪些会离开这台机器?
- 加密上传时,解密的钥匙在谁手里?
- 代码开源之后,你怎么确认线上运行的就是公开的那份代码?
Publication record
Featured in
#The briefings that carried this signal, newest first; the last row is the weekly review of its week. The tag is the section it ran in.
技术简报 - 2026-09-24
Immediate attentionWeekly review · Sep 21 – Sep 27
Worth tracking
Sources