文章总结: 智谱AI编程工具ZCode被曝在用户不知情下将本地工作区全量快照(含代码、完整Git历史、LFS缓存等42411个文件)加密上传至阿里云OSS,两个设置开关均无法关闭。智谱致歉并修复、开源代码,信通院与绿盟审计确认云端零数据。事件引发企业追责与港股下跌,凸显AI编程工具数据边界与用户控制权问题。
综合评分: 85
文章分类: 数据泄露,安全大事件,漏洞分析,安全运营
警钟!智谱ZCode静默上传本地代码,开发者密钥存在泄露风险
零日手记
零日手记
随笔漫记安全路
2026年9月22日 08:50
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
9月18日,开发者Ferstar发布逆向分析:智谱AI编程工具ZCode在用户不知情的情况下,将本地工作区完整快照——包括代码、完整Git历史、LFS缓存、reflog、部分全局配置——打包加密后上传至阿里云OSS。
313MB的加密包。42411个文件。上传失败数百次还在重试。两个设置开关都关不掉。
智谱当天致歉,9月19日推送修复版本,9月20日开源ZCode,9月21日公布第三方审计结果。但事件持续发酵——太原承明科技向智谱发函追责,智谱港股跌超4%。
发现过程:一次磁盘清理引爆的
事件最早于9月18日由技术博主Ferstar在个人博客公开披露。他在清理磁盘时发现,ZCode的本地文件夹占用了700多MB。其中v2/checkpoints目录约303MB,里面有一个约313MB的加密文件。
文件状态信息显示:来自一个商业项目,类型为”全量快照”。项目总容量约10GB,排除依赖文件后约345MB被纳入打包范围。记录还显示,这份快照此前已经上传失败数百次——文件留在待处理目录中,ZCode持续重试上传。
上传链路:完整还原
Ferstar拆解ZCode客户端,还原出完整的上传链路:
- 客户端向智谱后端申请凭证,获得阿里云OSS表单签名、存储路径、大小限制和RSA公钥
- 本地打包工作区内容,使用AES-256-CTR对称加密,对称密钥用RSA-OAEP-SHA256封装
- 加密包直接上传至阿里云OSS
- 上传成功后,OSS回调智谱后端登记
RSA公钥由服务端动态下发,私钥保存在云端。用户无法自行解密本地生成的加密包——ZCode客户端没有解密能力。
加密了,但用户不知道被传了什么。 密钥在云端,用户连自己被传的文件都打不开。
被上传的内容:不只是代码
Ferstar对快照生成时留下的明文文件清单做了统计——42411个文件:
| 内容 | 占快照比例 |
| — | — |
| LFS缓存 | 56.8% |
| 完整Git对象库 | 29.6% |
| reflog | — |
| 当前源码 | — |
| 配置文件 | — |
| 业务文档 | — |
完整Git历史意味着什么?已经删除的配置和旧密钥、尚未推送的分支名称、内部GitLab域名及仓库路径——全部在打包范围内。部分ZCode全局配置还可能跨工作区进入快照。
用户原本认为AI编程工具只会读取完成当前任务所需的代码。实际被打包的范围覆盖了整个仓库及其完整历史。
两个开关都管不了上传
ZCode设置中有两个相关选项:
- “优化体验”——主要决定数据能否用于模型训练
- “仓库快照索引”——控制服务端是否对已上传的快照建立索引
对照客户端代码后发现:即使两个开关都关闭,本地快照仍会被生成并进入上传流程。 这两个开关都不是上传的总开关。
快照组件在ZCode启动时加载,只要用户保持登录状态、客户端能取得身份凭证,上传机制就具备运行条件。在一个活跃会话的日志中,Ferstar最多发现了62次捕获记录。
手动删除待上传文件也没用——ZCode发现文件缺失后会重新生成快照并再次上传。
隐私政策的空白
当时公开的隐私政策提到ZCode会收集用户在对话中提交的文本、文件和代码,但没有明确说明完整工作区和Git历史会被打包上传。官方文档、FAQ和更新日志中也缺少相应说明。
智谱回应
9月18日下午,智谱在官方用户群回应并致歉:
- 问题归因于”代码库索引”功能,原本用于支持会话检查点恢复、历史版本回退和Repo Wiki
- Repo Wiki在生成Wiki页面时可能触发代码仓库数据上传
- 上传数据在云端使用完毕后立即销毁
- 该功能上线初期默认开启,部分用户受影响
- 问题已修复
- 计划开源ZCode代码,引入第三方安全审查
- 全部用户额外获得一次周额度重置作为补偿
回应中尚未充分说明的问题:
- 为什么Repo Wiki需要上传包含完整Git历史的全量快照?
- 用户关闭相关设置后,上传机制为什么还在运行?
- 云端数据”立即销毁”如何记录和验证?
- 修复后具体改变了哪些逻辑?
企业发函追责:12项答复要求
9月19日,太原承明科技有限公司正式向北京智谱华章发出函件,要求就数据删除、私钥保管及是否发生跨境传输等问题作出书面说明,并保留索赔与诉讼权利。
承明科技称,经技术部门独立取证确认,ZCode上传行为系自动触发、批量发生,所涉数据包含项目完整源代码、系统架构设计、版本控制全量历史、数据库访问口令、云服务权限凭证及员工个人信息等完整归档文件,明显超出ZCode《隐私政策》载明的收集范围。
承明科技还提出:尽管智谱声称9月18日已完成修复,但在当日凌晨仍检测到上传行为发生——对整改彻底性提出质疑。
函件提出12项具体答复要求:公开数据上传完整清单、提供所有已上传数据的销毁证明、披露第三方审计机构资质与审查范围、给出企业用户风险排查方案等。
智谱港股跌超4%
9月21日,智谱(2513.HK)港股股价低开低走,跌超4%,报742.5港元/股,总市值3620亿港元。智谱近期刚完成新一轮融资,ZCode是其面向开发者场景的核心产品,承载百万级开发者日常代码资产。
第三方审计结果:9月21日公布
智谱邀请中国信息通信研究院和绿盟科技两家机构完成首轮核查:
- 中国信通院技术评测确认:涉事的zcode-prod阿里云OSS存储桶当前状态为云端零数据
- 绿盟科技审查确认:该存储桶内全部数据对象及存储桶本身已删除;更新后的ZCode v3.14.0客户端已完成全面整改,Repo Wiki入口及相应生成链路已移除,未发现可触发本地仓库快照或文件外发的功能路径
智谱同时宣布后续将建立常态化安全运营机制,每月定期公布代码安全审计报告,设立公开的产品安全漏洞报告机制。
完整时间线
| 时间 | 事件 |
| — | — |
| 9月18日 | Ferstar发布逆向分析,披露ZCode静默上传代码 |
| 9月18日 | 智谱当天在用户群致歉,归因于代码库索引/Repo Wiki功能 |
| 9月18日凌晨 | 承明科技称仍检测到上传行为 |
| 9月19日 | ZCode推送v3.14.0修复版本,更新日志”修复仓库百科异常上传” |
| 9月19日 | 太原承明科技向智谱发函,12项答复要求,保留诉讼权利 |
| 9月20日 | ZCode在GitHub开源(Apache 2.0,v3.14.0) |
| 9月21日 | 智谱公布信通院+绿盟科技第三方审计结果 |
| 9月21日 | 智谱港股跌超4%,报742.5港元 |
AI编程工具的数据边界问题
AI编程工具读取代码本身不罕见——Claude Code、Cursor、Copilot都需要读取代码来完成任务。开发者真正关心的是:
- 读取范围是否与任务相符——完成一个bug修复不需要上传完整Git历史
- 上传前是否充分告知——隐私政策里没写的不应该默默上传
- 用户能否自主关闭——两个开关都关不掉说明用户没有真正的控制权
- 服务商如何证明数据已删除——”立即销毁”需要可验证的机制
这不是ZCode独有的问题。所有AI编程工具都面临同样的信任问题:你把整个代码库交给它,它到底往哪传、传了什么、存了多久、谁能看到。
ZCode选择开源+第三方审计是回应信任问题的正确一步。但最终能否平息风波,取决于:代码是否覆盖了上传和销毁链路、审查范围是否完整、审查结论是否公开。
参考链接
- FreeBuf分析:blog.csdn.net/FreeBuf_/article/details/166137593
- 36氪/界面新闻:36kr.com/p/3992798380833792
- 开源中国报道:oschina.net/news/502589
- ZCode开源仓库:github.com/zai-org/ZCode
- 原始逆向分析:开发者Ferstar
- 第三方审计:中国信息通信研究院、绿盟科技
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:随笔漫记安全路 零日手记
零日手记《警钟!智谱ZCode静默上传本地代码,开发者密钥存在泄露风险》