xAI Grok CLI 被曝静默上传整个代码库与用户密钥

# Topic 1|xAI Grok CLI 被曝静默上传整个代码库与用户密钥 > 7/13 凌晨,安全研究者...

Topic 1|xAI Grok CLI 被曝静默上传整个代码库与用户密钥

> 7/13 凌晨,安全研究者 cereblab 在 Hacker News 和 GitHub Gist 同时放出 wire-level 抓包数据:xAI 官方 Grok Build CLI(npm 包 @xai-official/grok,版本 0.2.93)会在每一轮任务前后,把当前工作目录打包成 before_codebase.tar.gzafter_codebase.tar.gz,通过独立旁路通道 POST 到 Google Cloud Storage 的 gs://grok-code-session-traces 仓库。即使模型只回复一个单词,调用任何文件工具,上传依然照常发生。上传包里不仅有当前仓库代码,还把仓库外的 ~/.claude.json、Claude Code 全局配置、30 多个 Skill 文件一起以 supplemental_file 名义塞进 tar.gz——其中甚至包括用户 .claude/settings.local.json 里的 MIAODA_API_KEY。 > > 7/12 晚另一位研究者 mylifcc 在 X 上公开同一发现;7/13 凌晨 cereblab 又抓到一份服务端响应:xAI 静默新增了 disable_codebase_upload=true 字段,但同时保留了 trace_upload_enabled=true——客户端二进制哈希完全没变,只是服务端远程把开关拨到「关」。换句话说,这个上传功能本来在 0.2.93 版本里默认开启,被曝光之后才被远程关闭,所有配置留好后门,未来可无感重开。 > > xAI 至今未发任何官方声明。

一、事件还原:cereblab 的 wire-level 抓包

cereblab 的实验设置很简单:隔离测试仓库,全是虚构假数据,装好 @xai-official/grok@0.2.93(Apple 签名校验归属 X.A.I Corporation),然后只用一条 prompt 让模型回复一个单词,不调用任何工具。

他在中途同时打开两个数据通道的抓包:

通道 ① 模型调用通道(预期之内) – 协议:cli-chat-proxy.grok.com 的常规对话通道 – 数据:模型上下文、用户 prompt、模型回复 – 频率:仅在 prompt 调用时存在

通道 ② 上传通道(重点) – 协议:POST /v1/storage – 目标:Google Cloud Storage grok-code-session-traces – 文件:before_codebase.tar.gzafter_codebase.tar.gz、会话日志、配置 – 频率:每一轮任务前后各一次 – 触发条件:与模型是否调用工具、是否读取文件、用户 prompt 内容完全无关

在一个 12 GB 测试仓库里,研究者抓到了: – 上传成功 5.10 GB,分 73 块传输 – 83 次 storage 请求全部 HTTP 200,零失败 – 上传通道的数据量是模型调用通道的 27800 倍

更关键的一条:上传范围完全不等于”模型实际读取过的文件”。 研究者从一个他故意放在仓库里、agent 全程没碰过的 canary 文件里,成功从 GCS 拉回了完整副本。证明上传的 scope 不是「我读过的」,而是「工作目录里存在的」。

而数字生命卡兹克的额外验证发现:当 Grok CLI 启动时主动扫描 ~/.claude/ 目录以兼容 Claude Code 配置(这是它官方宣传的”无缝迁移”卖点),扫描到的文件同样被收集器标记为 supplemental_file 并打包上传。结果是:你没让 Grok 读 .claude/settings.local.json,但你的百度秒哒 Skill 的 API key 还是被送到了 xAI 的 GCS 桶里。

二、隐私 toggle 形同虚设:用户能做的”防护”全部失败

Grok Build 在 onboarding 流程里有一个 toggle,文案是「Improve the model」。绝大多数开发者会自然理解为「是否允许把我的数据用于训练」——关掉它就以为没事了。

cereblab 关掉 toggle 之后抓到的服务端响应是:

{ “trace_upload_enabled”: true, “improve_model_opt_in”: false }

trace_upload_enabled 仍然是 true。仓库上传照常进行。这个 toggle 控制的是训练同意,根本不是数据外传——而 GCS 桶的名字、用途、上传范围在整个 onboarding 流程里完全没有披露

这意味着 xAI 干了一件所有隐私工程师都会警惕的事:用一个语义模糊的 toggle 把「训练」和「上传」两个本质不同的事情混在一起,让用户在不知情的情况下默认允许代码外传。如果这件事发生在欧盟,这已经是 GDPR Article 7(同意的明确性)和 Article 13(信息透明)的双重违规;放在美国,至少违反加州 CCPA 的「opt-out 不得默认勾选」原则。

而 7/13 凌晨 xAI 偷偷加上的 disable_codebase_upload=true,并不能洗白这一切——客户端二进制哈希完全没变,服务端可以在任何时候把字段改回 false,所有用户会在不知情的情况下重新开始上传。 这不是”修复 bug”,这是”撤掉保险丝的同时把开关留下来”。

三、xAI 在跟谁对标?对比 Claude Code 与 Codex 的隐私姿态

把这件事放到行业坐标系里:

厂商CLI默认行为用户可见度已公开的隐私事故
AnthropicClaude Code模型上下文外,无独立上传通道低(被披露的隐写术事件影响≈0)6/30 隐写术识别中国用户(恶意但无实际数据外泄)
OpenAICodex模型上下文外,无独立上传通道高(明确告知训练 opt-out)无独立上传通道事故
xAIGrok Build完整代码库上传至独立 GCS 桶零(toggle 与上传行为语义不挂钩)7/13 wire-level 实锤 + 远程静默回滚

Claude Code 6/30 那件事虽然恶心——在系统提示词里用不可见 Unicode 给中国用户的请求打分类标记——但它没采集你的代码,没上传你的文件,没碰你的密钥。技术上对人无害,只是道德上见不得光。

Grok CLI 这次做的事是另一个量级:你整个代码库的 git bundle 进了 xAI 的 GCS 桶,连你电脑上别的工具的配置文件和 API key 一起打包带走。这不是「偷偷做」,这是开了另一条用户根本看不见的旁路通道

四、深度剖析:AI Agent 的权限等级已经踩到了操作系统级

把这个事件放到行业坐标系里看,最值得警惕的不是 xAI 一家——而是整个 AI Agent 行业的权限模型集体裸奔

Claude Code 能执行你的 Shell 命令。Grok CLI 能扫描你的整个文件系统。Codex 能操控你的浏览器。一个 AI Agent 产品今天拥有的权限,已经和你电脑上的一个管理员账户没有本质区别

这种权限等级,在整个软件行业的历史上,只有操作系统和杀毒软件享受过。但: – 操作系统有几十年的安全审计体系(SELinux、AppArmor、Code Signing、Trusted Platform Module) – 杀毒软件有行业认证和监管框架(VirusTotal 多引擎交叉验证、ICSA Labs 认证、第三方白盒审计)

AI Agent 有什么?什么都没有。 – 没有一个行业标准规定 AI Agent 必须公开它本地读取了哪些文件 – 没有一个规范要求 Agent 的上传行为必须经过用户的显式同意 – 没有一个第三方机构在审计这些工具到底在你电脑上干了什么

现在 xAI 用「默认开启 + 静默回滚」的方式把这个缺口公开展示给所有人看,本质上是在告诉整个行业:我们拥有的权限比我们愿意承认的大得多,而我们还没有准备好对这种权限负责。

五、风险与待观察

最坏情况(已经实证): – GCS 桶里的代码库会被怎么用?cereblab 明确说他「没证明 xAI 用这些数据训练」——但「没证明」不等于「没做」,GCS 桶的存在本身就让”训练使用”在技术上零成本 – 已经被上传的代码库和密钥,7/13 凌晨服务端回滚只阻止了新上传,已经躺在 GCS 桶里的所有数据怎么办?xAI 没说 – 上传通道是「在每一轮任务前后」,意味着你关掉 Grok CLI 也无法撤回已经上传的内容——前几天的会话数据全部已经在 xAI 的云端

待观察: – xAI 是否会发声明 + 全量删除 GCS 桶数据 + 出具 SOC 2 / ISO 27001 第三方审计?任何一项缺失都说明 xAI 默认接受这个隐私姿态 – 已经装了 Grok CLI 的开发者会怎么处理?集体卸载 vs 观望,会形成对 xAI 开发者信任的基线打击 – 其他 Agent 厂商会不会被波及? Anthropic / OpenAI / Cognition / Cursor 的 CLI 在自己电脑上的行为是否也有未披露的上传通道?整个行业会迎来一波独立审计

对国内出海团队的具体警示: – 如果你的项目代码里有任何商业机密、付费算法、未公开的客户数据,在安装任何 AI Agent CLI 之前都要做一次文件系统访问审计 – .env~/.aws/credentials~/.config/gh/hosts.yml 这些路径需要在 agent 启动前临时移走 – 国内现在针对 Claude Code 的安全提示(7/8 工信部通报)很可能会扩展到 Grok CLI——如果 xAI 不发声明,中国开发者会自然把 Grok CLI 列入不信任名单

操作建议(紧急): 如果你装了 @xai-official/grok立即卸载npm uninstall -g @xai-official/grok,并检查 GCS 桶是否已经收到了你的代码(cereblab 的复现仓库里有完整网络日志)。检查你的 .claude/~/.aws/~/.ssh/ 目录是否包含可能已经外泄的 API key——所有跟 Grok CLI 共存过的本地密钥,全部按已泄漏处理,立刻 rotate

> 原文链接: > – 数字生命卡兹克深度还原:https://mp.weixin.qq.com/s/6c6vGMJAVMbh6UhNVw4dcg > – cereblab 抓包分析(byteiota 转载):https://byteiota.com/grok-build-cli-uploads-repo-xai-servers

发表回复

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网 🐾 智柴网 沪ICP备2024052574号-1