你甚至还没写 import litellm,你的 SSH 私钥、AWS 凭证、比特币钱包地址,就已经被打包发往了黑客的服务器。

这不是科幻。这是三天前发生在 PyPI 上的真实投毒。

AI配图

当你习惯性地敲下 pip install litellm==1.82.8,以为只是更新一个便利的 AI 模型调用工具时,一个名为 litellm_init.pth 的 34KB 文件,正静静地躺在你的 site-packages 里,等待 Python 解释器下一次启动。

它甚至懒得等你 import。

最阴险的攻击:连 import 都省了

说实话,传统的恶意包至少还得骗你写一行 import。这次攻击者连这层伪装都撕掉了。

利用的是 Python 的 .pth 文件机制。这些文件本该用于添加额外的模块搜索路径,但 Python 解释器启动时会自动执行其中包含的代码。攻击者把一段双层 base64 编码的脚本塞进去,只要 Python 启动,无论你在干什么,这段代码都会立即运行。

34KB 的代码里装着什么?一份堪称"数字搬家"的收割清单。

它要你的主机名、IP 地址、所有环境变量。它要你的 ~/.ssh/id_rsaid_ed25519,所有私钥。它要你的 ~/.aws/credentials、GCP 的 gcloud 配置、Azure 的登录信息。它要你的 Kubernetes ~/.kube/config,Docker 的 config.json。它甚至要你的 Shell 历史记录——.bash_history.zsh_history——里面可能藏着你不小心打错的密码。

AI配图

加密货币钱包? 比特币、以太坊、Solana、门罗币的密钥文件,全部打包。SSL 私钥、Terraform 变量、数据库密码、Slack Webhook,一个不落。

收集完后,它用 AES-256 加密,再用硬编码的 RSA 公钥加密封装,通过 curl 发送到 https://models.litellm.cloud/

注意这个域名。不是官方的 litellm.ai,而是 litellm.cloud你的机密数据,就这样在光天化日之下,被送往了一个李鬼域名。

从开发机到生产环境,全线裸奔

这次投毒的影响面,几乎覆盖了现代软件开发的每一个环节。

本地开发机首当其冲。很多开发者习惯在本地配置各种云服务的凭证,方便测试。这些凭证现在可能已经在暗网流转。

CI/CD 管道更惨。自动化构建环境通常拥有高权限的服务账号,AWS 密钥、Kubernetes 令牌都是环境变量里的常客。攻击者这次拿到的,可能是能直接操作生产集群的"万能钥匙"。

Docker 容器也无法幸免。如果你基于被污染的版本构建了镜像,这个恶意 .pth 文件会被固化在镜像层里,每次容器启动都会重复数据收割。

有意思的是,GitHub 评论区里有人提到,这次攻击与近期活跃的 TeamPCP 组织有关。这帮人显然不是脚本小子,他们对 Python 的包管理机制、云原生环境的凭证存储位置了如指掌,甚至知道去翻 /kaniko/.docker/config.json 这种容器构建工具的配置路径。

这种专业度,让人脊背发凉?不,让人愤怒。

SOC2 认证?一个黑色幽默

说到讽刺,评论区里有一条神回复:

"Also, not surprising that LiteLLM's SOC2 auditor was Delve. The story writes itself."

AI配图

(顺便说一句,LiteLLM 的 SOC2 审计方是 Delve,这故事本身就说明了一切。)

SOC2,这个被 SaaS 公司们贴在官网首页的"安全金字招牌",在供应链投毒面前像个笑话。 你可以有完美的审计报告、合规的访问控制、严密的加密策略,但只要你的 PyPI 发布凭证被泄露,或者某个维护者的账号被社工,所有这些合规文档瞬间变成废纸。

攻击者不需要攻破你的防火墙,不需要绕过你的 WAF。他们只需要在 PyPI 上更新一个版本,然后等着全世界的开发者主动把恶意代码拉进自己的内网。

这种攻击成本低得可怕,收益高得离谱。

唯一的解药:让子弹飞一会儿

面对这种"零日投毒",我们还能做什么?

评论区里一位老兄给出了最实用的建议:设置包管理器的最小发布年龄。

pipnpmpnpm 都配置上"延迟安装"策略。比如 uvexclude-newer = "7 days"npmmin-release-age=7。新发布的版本先在仓库里晾一周,等社区的白帽黑客和安全团队帮你踩完雷,再考虑升级。

说实话,这很反直觉。 我们习惯了追逐最新版本,习惯了"早用早享受"。但在供应链攻击频发的今天,"用旧版"反而成了某种安全策略。

更激进的观点认为,我们需要彻底改变开发环境。不再直接在本机安装依赖,而是在完全隔离的沙箱里运行——带 VM 隔离、seccomp 限制、网络 egress 过滤、文件系统白名单。就像我们现在对待 AI Agent 运行环境那样,用对待不可信代码的态度,对待每一个 pip install。

毕竟,你根本不知道 litellm_init.pth 里装的是初始化代码,还是你的数字人生的搬家清单。

当便利成为常态,谨慎就成了稀缺品。下一次你准备 pip install 某个刚发布的热门包时,不妨问问自己:我真的需要立刻拥有它吗?还是我愿意等七天,换一份安心?

【kimi-k2.5锐评】:当 SOC2 认证都能被轻易绕过,我们或许真该回到手动检查哈希值的"原始时代"了,毕竟在这个供应链投毒泛滥的年代,"不信任任何人"才是唯一的生存法则。

参考链接:
https://github.com/BerriAI/litellm/issues/24512