社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

42411 个文件,86.6% 是 .git:我扒开了 ZCode 的静默上传链路

猿之日常 • 昨天 • 31 次点击  

你只是登录了一下,它搬走了你整套 Git 历史

SNAPSHOT UPLOAD · 2026.09.18

有人在清磁盘时发现 ~/.zcode 占了 700 多 MB,一路挖到 v2/checkpoints/ 下一个 313MB 的 .enc 文件。旁边那份状态元数据,把整件事说得很清楚。

EVIDENCE · 本地状态元数据

// ~/.zcode/v2/checkpoints/ 状态文件
"kind""baseline"  ← 全量快照
"workspaceSizeBytes"345549173
"encryptedSizeBytes"313070842
"failureCount": 564  ← 已失败重试 564 次

那个仓库总共 10GB,剔掉依赖后剩下的 345MB,几乎全是核心资产。而这份包已经上传失败 564 次,还躺在 pending/ 里等下一次重试。

传到哪去了 · 还原链路

钥匙在谁手里

教科书式的信封加密:内容走 AES-256-CTR,对称密钥再用服务端下发的公钥做 RSA-OAEP-SHA256 包裹。问题是——私钥从头到尾不在你机器上。作者试遍本机所有私钥都没能解开。

如果这真是给你做回滚或跨设备同步的,钥匙理应留在本地,像 Git 和 Time Machine 那样。一把只有服务端能用的钥匙,只有一个用途:确保服务端随时能读你的代码
— ferstar · 逆向分析报告 · 2026.09.18

装了什么 · 42411 个文件


云端拿到的不只是当前工作树,是仓库从建库至今的全部血脉:后被删掉的历史密钥与敏感配置、未推送的分支名(等于未发布的功能计划)、.git/config 里写死的内网 GitLab 域名和仓库路径。

两个开关,都管不了它

翻 host 装配代码就明白了:捕获与上传的 sidecar 在启动时无条件实例化,没有任何基于用户偏好的判断分支,唯一门槛是能拿到登录 JWT。触发点是每次发提示词前的 captureBeforePrompt,以及任务结束时的 repo-wiki-update——单个活跃会话出现过 62 次捕获。

而隐私政策通篇只写收集「对话中提交的文本、文件与代码」。FAQ 和更新日志里,一次都没提过打包整个工作区和完整 Git 历史。

删了没用 · 得锁

作者第一次直接删了 pending 包,半小时后它又抓了一份新的,重试计数从 564 跳到 565。上传器发现文件没了,就再打一个。有效办法是在文件系统层加锁:

# macOS —— 内核级拒绝写入,上传链路无产物可发
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
chflags uchg ~/.zcode/v2/checkpoints

# Linux
sudo chattr +i ~/.zcode/v2/checkpoints

# 恢复:chflags nouchg / sudo chattr -i

代价是检查点回滚、时间线界面失效;对话、补全与工具执行不受影响。

推理需要上下文,这大家都接受。
真正越界的是两件事:数据范围架构姿态
工具不让你关,就让操作系统内核把它关进笼子。

※ 本文基于开发者 ferstar 于 2026 年 9 月 18 日发布的逆向分析报告整理(blog.ferstar.org),相关行为以智谱官方正式说明为准;如涉侵权请联系删除。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/201215