后背发凉啊,竟然litellm被投毒了!

出大事了,一个很多人日常在用,甚至没注意到它存在的库——litellm 被投毒了!

这个项目本身是用来统一调用各类大模型 API 的,GitHub 超 4 万星,每月下载接近 1 亿次。而问题就在于:攻击者成功往 PyPI 推送了带后门的版本。

只要你执行过一行:

pip install litellm

或者它作为依赖被间接安装,你机器上的核心敏感信息就可能已经被打包带走。


一次 pip install,可能让整个服务器“裸奔”

这次攻击到底有多狠?

简单说一句话:不需要你使用这个库,只要 Python 启动过,就已经执行了恶意代码。

攻击核心在一个很容易被忽视的机制:.pth 文件

Python 在启动时会自动加载 site 模块,而 .pth 文件如果包含 import 语句,是会被直接执行的。

攻击者就利用这一点,在包里塞了一行代码:

import os, subprocess, sys; subprocess.Popen([...])

效果是:

  • 不需要 import litellm
  • 不需要调用任何函数
  • 不需要运行项目代码

只要发生以下任意行为,就会触发:

  • pip 操作
  • python -c
  • pytest 测试
  • IDE 启动 Python 服务

被偷走的,不只是 API Key

恶意代码做的事情非常系统化:

:one: 全盘扫描敏感数据

目标目录包括:

  • /home
  • /opt
  • /srv
  • /var/www
  • /app
  • /data
  • /tmp

重点收集:

  • SSH 密钥
  • 云厂商凭证(AWS / GCP / Azure)
  • Kubernetes Secrets
  • 数据库连接信息
  • .env 文件
  • 加密钱包信息

:two: 加密 + 外传(专业级打包)

整个数据外传流程非常标准化:

  • 生成随机 32 字节 AES 密钥
  • 用 AES-256 加密数据
  • 再用内置 4096 位 RSA 公钥加密 AES 密钥
  • 打包为 tar.gz
  • POST 到仿冒域名

这不是脚本小子,是标准的成熟攻击链


:three: K8s 环境直接横向扩散

如果检测到 Kubernetes:

  • 自动部署特权 Pod
  • 尝试感染集群内其他节点

已经不是“窃取”,而是“接管基础设施”


:four: 持久化后门

攻击并不会随着你卸载包结束。

后门会:

  • 写入 ~/.config/sysmon/sysmon.py
  • 注册 systemd 用户服务
  • 每 50 分钟拉取远程指令
  • 延迟 5 分钟执行(规避沙箱)

属于典型长期控制


为什么几乎没人第一时间发现?

因为攻击方式太“干净”:

  • :check_mark: 使用合法 PyPI 发布令牌
  • :check_mark: wheel 包哈希完全正确
  • :check_mark: pip install --require-hashes 无法防御
  • :check_mark: 没有异常 import 行为

唯一暴露它的原因甚至有点“意外”:

攻击代码写得不够严谨

子进程启动后再次触发 .pth,形成递归执行,最终类似 fork bomb,把一台机器内存打爆,才被注意到。

如果这个 bug 不存在——

可能潜伏几周都不会被发现。


更离谱的是攻击源头

整个链路起点,是安全工具本身:

  • 3/19:Trivy 被攻陷
  • 攻击者窃取 PyPI 发布令牌
  • 3/24:直接发布带毒版本

“用来保护你的工具,变成了入口”


社区响应也被压制

事件被报告到 GitHub 后:

  • 102 秒内
  • 73 个被盗账号
  • 发布 88 条垃圾评论

直接把 issue 淹没

随后:

  • 用维护者账号关闭 issue

谁会被影响?

你可能觉得“我没装 litellm”,但问题在于:

它是很多项目的依赖,包括:

  • DSPy
  • MLflow
  • Open Interpreter

超过 2000 个包间接依赖

目前确认:

  • 已有 1000+ SaaS 环境感染
  • 预计影响规模:1 万+

现在该怎么做?

如果你使用过以下版本:

  • :cross_mark: litellm 1.82.7
  • :cross_mark: litellm 1.82.8

请直接按“已泄露”处理:

必做:

  • 轮换所有 API Key
  • 重置云凭证
  • 更新数据库密码
  • 更换 SSH Key

检查:

  • 是否存在异常 .pth 文件
  • 是否有 systemd 可疑服务
  • 是否有异常外联请求

安全版本:

litellm==1.82.6

自查脚本(覆盖版本检查、.pth 搜索、后门检测、可疑连接、K8s 扫描),安全版本:litellm==1.82.6。装了 1.82.7 或 1.82.8 的,假设所有凭证已泄露,立即轮换。

也可以尝试使用:CocoLoop Safe - 恶意 Skill 专杀工具 · CocoLoop ,现在SKILL的安全自查刻不容缓


这次事件真正的警示

这不是一个单点漏洞,而是一次完整供应链攻击演示

  • 安全工具被攻破
  • 发布权限被利用
  • 包管理体系信任被绕过
  • 运行时机制(.pth)被武器化

更关键的一点是:

:backhand_index_pointing_right: 攻击发生在“安装阶段”,而不是“运行阶段”


如果你在做 AI、SaaS、自动化系统,这件事其实就一句话总结:

现在最危险的代码,不是你写的,而是你依赖的。

吓得我赶紧去查了下自己项目的依赖锁文件还好没中招

供应链攻击防不胜防啊pip install之前真得看看版本号有没有被篡改

所以说pip freeze锁版本不是没道理的这次中招的基本都是自动拉latest的

这种统一调用层的库一旦出事影响面太广了下游项目全得遭殃

建议大家用的时候加个hash校验不要无脑信任pypi上的包

wtf,什么叫持久化后门:flushed_face:,第一次见这么哈人的