# ZCode 3.12.3 「静默上传」事件 · 本地取证报告 - 日期:2026-09-18 - 对象:ZCode desktop 3.12.3(Electron 41.0.3)/ ZCode CLI 0.16.5(deb 内嵌 resources/glm/zcode.cjs) - 样本:ZCode-3.12.3-linux-x64.deb,146,906,820 字节,sha256 631fbd69fcefe5d57c607bbfd047bb7a474af6017464681b99ccb7b15749c60e;app.asar 307,866,431 字节(构建时间 2026-09-16 23:05) - 方法:隔离假 HOME + asar 静态逆向 + CDP 界面驱动 + MITM 全流量 + 文件系统实时监控 + 金丝雀标记比对 - 背景:2026-09-18 社区曝光 ZCode 在 OAuth 登录态下静默打包全工作区(含完整 .git 历史)加密直传阿里云 OSS;智谱当晚道歉并称「代码库索引功能默认开启所致,已修复,将开源」。本报告验证 3.12.3(道歉后版本)的实际行为。 ## 一、实验环境与隔离 - WSL2 (Ubuntu 26.04),全部运行于假 HOME ~/zcode-lab/home,真实 home 零污染 - 缺失共享库(libnss3/libnspr4/libasound2t64)以 apt-get download + dpkg -x 用户态补齐,LD_LIBRARY_PATH 注入 - 测试账号 OAuth 登录(CLI login --no-browser 轮询流程),凭据仅存假 HOME - 金丝雀仓库:本地 dsh-desktop 副本,种植 5 类标记(唯一 CANARY-uuid 文件、提交后删除的假密钥、改名密钥文件 env.local、未推送分支 feature/unreleased-secret-plan、5MB 随机二进制+伪 LFS 对象、未跟踪敏感散件);配置层种植 11 处标记(AGENTS.md、mcp.json 含名为 token 与 apiKey 的假 env、hooks.json、memory.json、settings.behavior.json、skills/commands/subagents/plugins/memories) - 监控:watchdog 文件事件流、3 秒级 TCP/pending 目录采样、SSLKEYLOGFILE、mitmproxy 18080(应用内 httpProxy 设置 + Chromium --proxy-server) ## 二、静态分析结论(3.12.3 包内) 1. 上传管线代码完整保留:/api/v1/snapshot/upload-credential 端点构造存在于 out/scheduler/index.js 与 out/host/index.js;captureBeforePrompt、captureRepoSnapshotAfterTaskComplete、scheduleRepoSnapshotSidecar、repoSnapshotCaptureIntentScheduler、RepoWikiGenerator 均在;信封加密实现为 AES-256-CTR(随机 32B 密钥 + 16B nonce 前缀)+ RSA-OAEP-SHA256 包裹密钥,公钥由服务端凭证协商下发(publicKeySpkiPem),envelope 含 canonical-json-v1 AAD(workspaceKeyHash/manifestHash/kind/base|delta)。 2. 开关默认值翻转 + 强制迁移:settings schema 中 repoSnapshotIndexingEnabled: default(false)、optimizeAgentExperienceEnabled: default(false)、modelIoFullRetentionEnabled: default(false)、memoryEnabled: default(false);migrateOptimizeAgentExperienceDefault 对老配置强制写 optimizeAgentExperienceEnabled=false。全新安装实测 setting.json 全部为 false。 3. 客户端无门控读取点:全树搜索 repoSnapshotIndexingEnabled 仅两处——schema 定义与 normalizeSettingsPatch(用户显式设置时置 repoSnapshotIndexingUserConfigured=true)。采集调用链上没有任何对该开关的条件判断(丑闻版本「开关是摆设」的结构在代码层面未变)。 4. CLI bundle(zcode.cjs)不含上传管线:upload-credential/captureRepoSnapshot/aes-256-ctr/rsa-oaep 命中数均为 0;其 checkpoints 为本地 /rewind 功能。CLI 内嵌阿里云 RUM 遥测端点 proj-xtrace-*.cn-beijing.log.aliyuncs.com/rum/web/v2。 ## 三、动态实验矩阵 | # | 条件 | 动作 | 结果 | |---|------|------|------| | 1 | CLI 登录态,flag 默认 | zcode --cwd canary --prompt ... | 模型调用 429;无任何快照产物(CLI 无管线,非上传面) | | 2 | GUI,flag=false(新默认) | CDP 注入 prompt,回合完成(13s) | 零 checkpoints / 零 .enc / 零 upload-credential 请求 | | 3 | GUI,flag=true + UserConfigured=true | 同上,回合完成 | 同样全零——客户端开关无法重新激活按 prompt 采集 | | 4 | GUI,flag=true,全流量 MITM | 同上,回合完成(2m44s) | 流量中无 upload-credential、无 OSS POST;client/configs(23KB) 与 client/scenes(143KB) 响应体中无任何 snapshot/wiki/indexing 键 | | 5 | Wiki 生成路径排查 | 命令面板/侧栏/菜单全入口搜索 | Repo Wiki UI 入口在当前服务端配置下不可达(无命令、无侧栏 tab、无菜单项),上传路径休眠 | 金丝雀比对:模型两次在回复中原样输出 AGENTS.md 注入标记 FAKE_AGENTS_CONTENT_c27a7da9-...(证明全局配置进入模型上下文);仓库与配置标记未出现在任何上传产物中(因为根本没有打包发生);金丝雀仓库 git 状态除预置未跟踪文件外无改动。 ## 四、MITM 捕获的其他隐私相关流量(单轮会话) - GET /api/v1/releases/electron/manifest?...&device_mid= —— 更新检查携带设备标识 - POST /api/v1/event/report —— 事件遥测(多次) - 阿里云验证码/设备指纹族:no8xfe.captcha-open.aliyuncs.com、upload.captcha-open.aliyuncs.com、no8xfe-verify.captcha-open.aliyuncs.com、cloudauth-device-dualstack.cn-shanghai.aliyuncs.com、g.alicdn.com/captcha-frontend/*.js - GET cdn-zcode.z.ai/zcode/config/zcode-builtin-23.json —— 远端 provider 配置覆盖 - POST /api/v1/mcp/server/image_search - 登录阶段(CLI 探针日志):GET/POST api.z.ai/api/biz/v1/organization//projects//api_keys 与 api_keys/copy/ —— 登录后从账户组织项目复制 API key 到本地 - 本地自生成 CA:~/.zcode/v2/certs/zcode-network-ca.{key,pem}(疑似内嵌浏览器 MITM 用途) - 凭据落盘加密:credentials.json 值均为 enc:v1:.. 格式 ## 五、结论 1. 丑闻描述的「每条 prompt 静默打包全仓库上传」行为在 3.12.3 中不复现:开关关与开关开两种状态下,完成的 prompt 回合均无本地打包产物、无上传凭证请求。 2. 官方「修复」的实际形态(可观测部分)= 开关默认值翻转 + 老配置强制迁移关闭 + Repo Wiki 功能在服务端配置中整体下线(UI 不可达);客户端上传管线代码未删除,理论上可经服务端重新启用(当前 configs/scenes 未下发相关键)。 3. 与官方口径「上传发生在生成 Repo Wiki 时」相容:现存上传路径仅挂载于(当前禁用的)Wiki 生成流程;本次未能实际触发该路径(入口不可达),为报告主要局限。 4. 残留隐私面:设备标识(device_mid)、事件遥测、阿里云验证码/设备指纹通道、CLI RUM、自签网络 CA、登录时 org API key 本地复制、全局配置(AGENTS.md/MCP/Hooks/Memory 等)进入模型上下文。 ## 六、局限 - 单一版本 3.12.3、单一账号(个人 coding plan)、WSL2 环境 - Repo Wiki 生成路径未实际触发(UI 入口不可达),其上传行为为推断而非实测 - 无第三方安全机构复核;MITM 仅覆盖应用配置代理的流量通道 ## 七、防御建议(用户侧) - 内核级锁死快照目录:sudo chattr +i ~/.zcode/v2/checkpoints(Linux)/ chflags uchg ~/.zcode/v2/checkpoints(macOS) - 优先 API Key 登录(社区实测与本次静态分析均表明 OAuth 登录态是快照管线的唯一触发门槛) - 监控 ~/.zcode/v2/checkpoints/pending/ 与出站到 *.aliyuncs.com 的 OSS 直传 - 敏感仓库避免在登录态客户端中打开;全局配置(AGENTS.md/MCP env)不放真实密钥 ## 附录:证据索引(~/zcode-lab/captures/) - ZCode.deb.sha256(样本哈希)、zcode-builtin.json(内嵌 provider 配置) - static-hits.txt / static-hits-2.txt / static-flag-reads.txt(静态上下文窗口) - canary-id.txt / canary-markers-worktree.txt / canary-markers-config.txt(金丝雀登记) - baseline-worktree.sha256 / pre-trigger-files.txt / pre-gui-trigger.txt(基线) - login-live.log(OAuth 轮询全流程探针日志)、trigger-prompt.log(CLI 触发) - fs-events.log(文件事件流)、net-samples.log(连接采样) - mitm-flows.log + mitm-bodies/(全流量与 configs/scenes 响应体) - zcode-gui-stderr.log(host rpc 日志)、window1-3.png(CDP 截图) - sslkeys.log(TLS 钥匙日志)