发生了什么
@shaoxiao_si 和 @Joshua_WD 都在第一时间提醒:常被用来统一调用各家模型的 Python 库 LiteLLM,10 月 21 日发布了被投毒的 1.107.0 版本,在 PyPI 上存在约 100 分钟,Docker 的 latest 等标签也一度指向恶意镜像。官方 事故报告 给出的安全版本是 1.106.2,装过 1.107.0 的环境要按「已失陷」处理并轮换凭据。
@WaleatX 关注的是报告里和 Claude Code 用户直接相关的一段:攻击者是怎么拿到发布权限的。
报告里的攻击链
按 LiteLLM 报告的说法(调查仍在进行,部分细节待确认):
- 他们观察到在特定情况下,Claude Code 会把用户的 GitHub CLI OAuth token 写进响应体;如果网关记录了响应体,token 就会出现在 LiteLLM 日志里。
- 他们的一台内部 LiteLLM 部署暴露在公网,里面多了一个名字不起眼的陌生账号,怀疑是通过一个最近修补的漏洞进来的。
- 攻击者从日志中取走了三名工程师的 gh token,其中一个属于 GitHub 组织 owner,于是关掉分支保护、强推修改,让发布流程从一个仿冒仓库构建并发布。
这里要分清:「Claude Code 把 token 带进响应」是 LiteLLM 方面的调查结论,具体触发条件报告没有展开;但不管原因是什么,「完整日志 + 公网可达」这个组合本身就是风险。
走网关的 Claude Code 用户该检查什么
- 网关别记录完整请求和响应体。 agent 的对话里会混进命令输出、配置片段和各种凭据。只记元数据(时间、模型、token 数、状态码),需要排障时临时开、用完关。Claude Code 自己的遥测也一样:官方文档说明
OTEL_LOG_RAW_API_BODIES会导出完整对话,默认关闭,别随手打开。 - 网关和日志系统不要暴露在公网,账号列表定期过一遍,陌生账号立即排查。
- 本机的 gh 登录按最小权限给。 日常开发用的机器别长期挂着组织 owner 级别的 token;能用细粒度、限仓库、短有效期的 token 就别用全权 token。怀疑泄露时,在 GitHub 的应用授权页撤销后重新登录。
- 依赖固定版本。 别在生产里用
latest或不锁版本的pip install;这次正是不锁版本的环境中招。
小结
agent 时代的日志不再只是「调试信息」,它可能包含 agent 碰过的所有东西。把日志当成和密钥同等级的资产来管,比事后轮换更省事。
如果你想把 Claude Code 放在一台常开、整机独享的新加坡 Mac mini 上长期运行,可以了解 Zumac.Ai,咨询 Telegram @singatao。
