首页/文章/让 Claude Code 随手 pip install?LiteLLM 投毒包装上就跑,偷取清单里有 ~/.claude

让 Claude Code 随手 pip install?LiteLLM 投毒包装上就跑,偷取清单里有 ~/.claude

· Zumac.Ai

问题不在 import

@itsone_ai 读 LiteLLM 事故报告时注意到:恶意包要偷的清单里,出现了 ~/.cursor 和 ~/.claude 这类 AI 工具配置目录。更要命的是触发方式——装上之后,每次启动 Python 都会自己跑,根本不用 import litellm。你让 Agent 「顺手 pip install 一下」,就够了。

LiteLLM 官方事故报告的说法是:受影响的是 10 月 21 日特定时间段内未锁版本安装 LiteLLM 的环境(以及当时使用 1.107.0 / latest 等标签的 Docker 镜像);排查时找 litellm-1.107.0.dist-info、cook.pth、sitecustomize.py,找到即确认暴露,没找到也不代表干净。

@realMagog 补了一句很实用的话:一个文件装下所有 key,正是这类窃取程序最想要的;按工具拆分 key,并锁定版本。

(这次事件里网关日志泄露 GitHub token 的部分,我们之前单独写过:网关日志里躺着 GitHub token。本文只讲装包这一环。)

给 Agent 的装包动作加闸门

Claude Code 的权限规则可以把装包命令设为 ask,每次都让你看一眼再放行(语法见官方 permissions 文档):

{
  "permissions": {
    "ask": [
      "Bash(pip install *)",
      "Bash(pip3 install *)",
      "Bash(python -m pip install *)",
      "Bash(uv pip install *)",
      "Bash(npm install *)"
    ]
  }
}

注意:命令规则按写法匹配,换个写法(例如 python3 -m pip install、写进脚本里再执行)就可能对不上。高风险环境建议再加一条 PreToolUse hook 统一拦截,或干脆在沙箱、独立机器里装依赖。

锁版本和分 key

  1. 锁版本:requirements.txt 写死版本(最好带哈希),Docker 镜像用具体版本或摘要,不用 latest。
  2. 一个工具一个 key:Claude Code、自动化脚本、网关各用各的 key,泄露时只轮换一把。
  3. 开发机别放全量密钥:.env 里只放当前项目需要的那几个。

已经中招怎么办

报告里的处置建议有一条反直觉:不要先跑 pip install 去「修」——在受感染的环境里,任何 Python 启动(包括 pip 本身)都会再次执行恶意代码。应先从 shell 删除报告列出的文件,再按「已失陷」处理:轮换这台机器上能访问到的所有凭据,包括 Claude / Anthropic 的 key 和登录态。

小结

  • 投毒包「装上即执行」,Agent 装包这一步就是入口。
  • 装包命令设 ask,锁版本,按工具分 key。
  • 中招后先删文件、再轮换,别先 pip。

如果你想把 Claude Code 放在一台整机独享、和日常电脑分开的新加坡 Mac mini 上,把装依赖这类动作隔离出去,可以了解 Zumac.Ai,咨询 Telegram @singatao。

来源

Zumac.Ai 新加坡 Mac mini M6,整机独享,¥999/月起,联系 Telegram @singatao。
查看方案与费用 · 帮助中心

返回首页 · 更多文章

Telegram 客服