一场悄无声息的“午夜入侵”:litellm 供应链攻击全记录
3月24日,凌晨1点左右,国内某AI创业公司的工程师刚提交完模型部署脚本,准备关机休息。他不知道,就在他安装的Python依赖里,一个名为litellm的库,已经悄悄在他机器上埋下了一颗定时炸弹。
这不是演习。也不是黑客电影里的桥段。这是真实发生在中国开发者电脑、服务器、CI/CD流水线里的供应链攻击。攻击者没有爆破服务器,没有钓鱼邮件,甚至不需要你主动运行什么危险命令——你只要装了这个库,它就自动生效。
被污染的不是代码,是整个生态的“呼吸”
受影响的版本是 litellm 1.82.7 和 1.82.8,发布时间间隔仅13分钟(UTC时间10:39和10:52)。这两个版本中,藏了一个名为 litellm_init.pth 的文件——这不是普通Python模块,而是一个Python解释器启动时会自动加载的“后门脚本”。
这意味着:
- 你没写过
import litellm,也没调用过它,照样中招; - 你用的DSPy、MLflow、Open Interpreter这些主流AI工具,都可能间接引入了它;
- 你本地的Jupyter Notebook、Docker容器、K8s Pod,只要跑的是Python,这个脚本就会在启动时自动执行。
这不是“漏洞”,这是“植入”。攻击者不是在利用缺陷,而是在利用信任——你信任PyPI,信任维护者,信任“这个库很流行,应该没问题”。
它偷的不是数据,是你的整个数字身份
恶意脚本一启动,做的第一件事不是挖矿,不是勒索,而是地毯式搜索:
- SSH私钥:~/.ssh/id_rsa、~/.ssh/authorized_keys
- 云平台凭证:AWS的
~/.aws/credentials,GCP的~/.config/gcloud,Azure的~/.azure - Kubernetes令牌:/var/run/secrets/kubernetes.io/serviceaccount/token
- 数据库密码:.env、config.yaml、docker-compose.yml里的明文密码
- 加密钱包:MetaMask、Ledger等常用钱包的私钥文件路径
- 环境变量:包括CI/CD流水线中配置的API密钥、Webhook令牌
所有信息被加密打包,发送到一个注册于2024年12月的域名 api-data-update[.]com(已由安全团队确认并屏蔽)。更可怕的是——如果检测到运行在Kubernetes集群中,它会用拿到的服务账户令牌,直接创建一个拥有集群管理员权限的Pod,自动在所有节点部署,实现横向移动。
这不是“窃取”,这是“接管”。你的云账号、你的K8s集群、你的开发机,一夜之间可能都成了攻击者的跳板。
暴露的契机:一个“自杀式”bug
事件之所以被发现,不是因为安全团队监控到位,而是因为攻击者自己“作死”了。
一位开发者在使用AI编码助手Cursor时,其内置的MCP插件调用了litellm。由于插件频繁启动Python子进程,恶意的litellm_init.pth也随之被反复加载——最终触发了一个无限递归的fork炸弹,系统内存瞬间爆满,机器直接卡死。
“我们以为是Cursor崩溃了,重启三次没用,最后查进程才发现是Python在疯狂拉起子进程。”这位开发者在Twitter上写道。
AI专家Andrej Karpathy事后评论:“如果这个恶意脚本没有这个bug,它可能在成千上万台机器上潜伏数周,直到某个工程师在生产环境跑训练任务时,云账单突然暴涨10倍。”
源头不在litellm,而在它用的“安全工具”
你以为是litellm维护者被黑了?不。
真正的突破口,是它用来做安全扫描的工具——Trivy。
早在3月19日,同一攻击组织TeamPCP就攻陷了Trivy的GitHub Actions工作流,窃取了其发布权限。随后,他们利用Trivy的权限,伪造了一个“安全更新”版本,悄悄注入了窃取litellm PyPI发布令牌的代码。
3月23日,Checkmarx KICS也被同一团伙攻击,手法如出一辙。
这不是单点突破,而是一次“供应链斩首行动”:攻击者先攻破工具链,再借工具之手,攻破被依赖的项目,最终让数万个下游项目在“安全合规”的名义下,自动下载了恶意代码。
安全研究员Gal Nagli说:“我们正在经历开源生态的‘多米诺骨牌倒塌’。Trivy被黑,litellm被投毒,2000+项目被感染,数万云凭证被窃——这已经不是技术问题,是系统性信任崩塌。”
攻击者想“删帖灭口”,结果引爆全网
当第一个GitHub Issue出现时,攻击者反应极快:
- 102秒内,73个被盗账号同时发帖
- 88条垃圾评论刷屏,内容全是“这不可能”“是误报”“别信谣言”
- 随后,利用被窃取的维护者权限,强行关闭了所有相关issue
但社区没上当。讨论迅速转移到Hacker News、Reddit、国内的V2EX和掘金。一条名为《我半夜被Python自动拉起了1000个进程,结果发现是AI库干的》的帖子,在24小时内获得超5万浏览。
有人贴出了自己服务器上被写入的cron任务,有人晒出了被窃取的AWS密钥截图,还有人用Wireshark抓到了恶意流量——攻击者,正在用你的机器,扫描内网。
你不是受害者,你可能是下一个攻击跳板
如果你是AI开发者、运维、数据工程师——请立刻做三件事:
- 检查版本:在终端运行
pip show litellm。如果版本是1.82.7或1.82.8,立即停止所有操作。 - 全量轮换凭证:SSH密钥、云账号密码、K8s服务账户、数据库连接串、CI/CD密钥——全部重置。别指望“我只用了一次”,攻击者已经把你的整个数字身份拷贝走了。
- 重建环境:所有受影响的容器、虚拟机、CI runner,全部重新构建。不要“修复”,不要“清理”,直接重装。因为恶意脚本可能已写入系统启动项、用户profile、甚至BIOS(极端情况)。
安全版本是 1.82.6。但请注意:即使你用的是1.82.6,如果你的项目依赖了其他被污染的库,仍可能被间接感染。
这不是终点,而是警钟
过去十年,我们习惯了“用别人代码,省时间、省成本”。现在,这个习惯正在变成致命弱点。
一个4万星的库,每月9500万次下载,背后是数万个企业、高校、创业公司的生产系统。它被投毒,不是偶然,是必然——因为没人检查它到底在干什么,没人验证它的构建过程,没人怀疑“这么火的库怎么会出事”。
Karpathy说:“我以后宁愿让大模型写一个10行的HTTP请求,也不愿装一个2000行的‘万能工具包’。”
这句话,值得每个AI开发者刻在显示器上。
开源不是免费的午餐,是别人做的饭,你不知道厨师有没有下毒。
下次你pip install一个库之前,请问自己:
- 这个库,谁在维护?最近一次更新是什么时候?
- 它的CI/CD流程公开吗?有签名验证吗?
- 它依赖的工具,有没有被攻击过?
- 如果它被黑了,我能承受多大损失?
这次事件,不是“某库被黑”,而是整个AI开发范式的一次血淋淋的体检。
你,准备好面对真相了吗?
