2026 年 9 月 18 日,安全研究员 ferstar 发布了一篇针对桌面 AI 编程工具 ZCode 的逆向工程分析。在这项测试中,一个体积为 345MB 的商业项目工作区被 ZCode 静默压缩为 313MB 的加密快照,其中包含完整版本历史与配置的 .git 目录体积占比高达 86.6%。
更关键的是,这一加密过程采用了服务器端下发公钥的信封加密,私钥仅存在于云端,开发者在本地生成的密文连自己都无法解密。随着逆向细节公开,围绕 AI 工具接管本地环境权限的讨论瞬间被推向风口浪尖。
失控的旁路与失灵的开关
ZCode 是由开源模型 GLM 系列(包括 GLM-5.3-Flash)背后的智谱 Z.ai 打造的桌面环境。开发者因开源权重的知名度对官方工具抱有天然信任,但在工程实现上,模型开放与运行环境闭源是完全隔离的两回事。
根据对客户端核心包的逆向分析,ZCode 内部运行着一个宿主级侧车进程。只要用户完成登录获取有效凭据,该进程就会无条件初始化并常驻运行。在测试会话中,仅仅一次活跃编码就触发了 62 次 打包事件,在每个提示词发出前以及任务完成瞬间自动执行。
前端设置界面看似提供了完备的隐私保护选项,但代码层面的绑定关系却彻底脱节。界面中的优化体验开关仅决定数据是否允许用于模型训练,仓库快照索引开关仅控制服务端是否对内容建索引,两者均无法阻止本地侧车将整个工作区打包并上传至阿里云 OSS 存储。
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
sudo chattr +i ~/.zcode/v2/checkpoints # macOS 使用 chflags uchg
由于该逻辑游离于常规智能体工具调用链之外,本地删除待传归档毫无意义,程序半小时内就会重新打包。目前唯一被验证有效的临时防御方案,是在操作系统内核层将特定检查点目录直接设为不可写。
架构惰性与被打包的历史
针对技术社区的质疑,团队在沟通群发布道歉并作出解释:打包机制原本用于支撑工作区检查点回滚与项目知识库 Wiki 生成,在云端生成页面时会触发上传,并声明生成完成后云端数据已销毁,承诺推进客户端开源与第三方安全审计。
这一工程决策暴露出严重的越界问题。代码版本库的 Git 目录不同于可见的工作目录,它保存着仓库诞生以来的完整变更历史。开发团队此前撤销的私有密钥、从未合并的实验分支、内部网络地址,全部沉淀在历史对象中。官方技术文档虽然声称模型上下文排除了 Git 目录,但这道约束并未施加给底层的打包侧车。
所谓架构捷径,往往是拿用户的底线资产为工程偷懒买单。
在此次个案的取证中,ferstar 机器上的大体积压缩包因网络异常记录了 564 次 重试报错,单一样本虽未证实数据成功入库,但完整的直传逻辑与凭证机制已被坐实。多位平台用户和官方仓库的反馈记录也表明,工作区快照被云端接收并非偶发孤例。
- 风险.官方隐私协议规定服务主要通过新加坡节点处理,数据涵盖文本、配置及终端命令且留存长达账号周期,但并未明确说明会全量抽取 Git 历史。
智能体接管系统后的边界重构
《左传》有云:其兴也勃焉,其亡也忽焉。大模型生态积累声誉往往需要数个版本的扎实开源迭代,而失去开发者信任只需要一次底层的静默越权。
从自动补全升级到自主智能体,AI 编程工具正从一个输入框演进为拥有完整读写权限的虚拟操作者。当开发者习惯于将终端与文件树的控制权全盘让渡给闭源外壳时,系统安全的信任基石就已经发生了动摇。
- 建议.敏感商业工程在使用闭源编程客户端时,应强制通过虚拟化环境进行物理隔离,并依托网络层白名单拦截非必要的对象存储直连请求。
将代码仓库的所有权与历史记录交由无法审计的宿主进程管理,本身就是将企业安全置于被动境地。开源模型的光环并不等同于配套软件的合规,当本地密匙的持有权从用户手中剥离,开发者最该警惕的不再是模型生成逻辑的好坏,而是本地资产在何时以何种形式流出了边界。
