LiteLLM 被植入恶意代码:2026 年供应链攻击完整分析与紧急应对指南

Key Takeaways
- 受影响版本:LiteLLM PyPI 上的 1.82.7 和 1.82.8 版本被植入恶意代码,已被官方下架。最后安全版本为 1.82.6。
- 攻击机制:1.82.7 在
proxy_server.py中隐藏负载;1.82.8 额外利用 Python.pth文件(litellm_init.pth),在任何 Python 进程启动时自动执行,无需import litellm。 - 窃取内容:SSH 私钥、AWS/GCP/Azure 凭证、Kubernetes 配置与 Secret、.env 文件、加密货币钱包、数据库密码、Git 凭证、Shell 历史等。
- 三阶段攻击:凭证收集 → Kubernetes 横向渗透(创建特权 Pod)→ 持久化后门(伪装成 systemd 服务
sysmon.service)。 - 根因:攻击者通过此前入侵的 Trivy 安全扫描器,获取了 LiteLLM 维护者的 PyPI 发布权限,绕过正常 CI/CD 流程直接上传恶意包。
- 暴露时间:恶意版本上线约 1-2 小时,因恶意代码存在 fork bomb 缺陷导致开发者机器崩溃才被发现。
- 影响范围:LiteLLM 月下载量超过 9500 万次,许多 AI 代理、MCP 服务器和 LLM 编排项目间接依赖该库。
事件时间线与攻击细节
2026 年 3 月 24 日,知名 AI API 统一调用库 LiteLLM 在 PyPI 上出现异常版本。攻击者 TeamPCP(此前已攻击 Trivy、KICS 等安全工具)利用维护者账号或 PyPI token,发布了两个恶意版本。
1.82.7 版本:
- 恶意代码隐藏在
litellm/proxy/proxy_server.py中。 - 仅在导入该模块或运行
litellm --proxy时触发。 - 负载为双重 base64 编码的 Python 脚本。
1.82.8 版本(破坏力更强):
- 额外植入
litellm_init.pth文件。 - Python 的
site模块会在解释器启动时自动执行.pth中的代码,实现零交互触发。 - 这使得即使从未显式使用 LiteLLM 的项目,只要安装了该包的依赖环境,就会被感染。
恶意代码采用混合加密(AES-256-CBC + RSA-4096),将收集到的数据发送至伪造域名 models.litellm.cloud。
恶意负载的技术剖析
分析显示,负载分为三个阶段:
-
凭证收集阶段:
- 递归扫描常见路径:
~/.ssh/、~/.aws/、~/.kube/、~/.azure/、~/.env文件、Kubernetes config、Git credentials 等。 - 提取环境变量、进程内存中的秘密、云元数据端点(IMDS)。
- 支持多种加密货币钱包文件。
- 递归扫描常见路径:
-
横向移动阶段(Kubernetes 环境):
- 利用 ServiceAccount Token 读取全集群 Secret。
- 在每个节点
kube-system命名空间创建特权alpine:latestPod,挂载主机文件系统。
-
持久化阶段:
- 部署伪装成“系统遥测服务”的后门(
sysmon.py+ systemd 用户服务)。 - 定期从
checkmarx.zone等域名拉取额外 payload。
- 部署伪装成“系统遥测服务”的后门(
发现原因:恶意代码中的 subprocess.Popen 调用在 .pth 机制下形成指数级 fork bomb,导致内存耗尽崩溃。这暴露了攻击者代码质量的缺陷,否则危害可能持续数天。
为什么 LiteLLM 成为高价值目标?
LiteLLM 作为支持 100+ LLM 提供商的统一代理,广泛用于生产环境中的 AI 代理系统、MCP 服务器和多模型路由。开发者常用一行代码替换底层调用,这也意味着它常与敏感 API 密钥共存。
供应链攻击链条清晰:Trivy 遭入侵 → LiteLLM CI/CD 扫描依赖 Trivy → 发布权限泄露 → PyPI 直接上传恶意包。这凸显了“信任但验证”在现代开源生态中的重要性。
立即行动:检查与清理步骤
步骤 1:检查已安装版本
pip show litellm
pip list | grep litellm
若版本为 1.82.7 或 1.82.8,立即执行:
pip uninstall litellm -y
pip install litellm==1.82.6 --force-reinstall
步骤 2:清除 Python 缓存与 site-packages
- 删除
site-packages/litellm*目录及.pth文件。 - 清空 pip 缓存:
pip cache purge
步骤 3:轮换所有凭证
- 必须 立即轮换 SSH 密钥、所有云平台 Access Key(AWS IAM、GCP Service Account、Azure AD)、Kubernetes 令牌、数据库密码、CI/CD 密钥。
- 检查云审计日志(CloudTrail、Audit Logs、Activity Log),搜索异常访问。
步骤 4:Kubernetes 环境额外检查
- 扫描
kube-system命名空间中的异常 Pod。 - 审查节点上的
~/.config/sysmon/目录和 systemd 服务。 - 重建受影响节点(推荐)。
步骤 5:依赖项目扫描
- 检查所有使用
requirements.txt、pyproject.toml或 Docker 镜像的项目,锁定 LiteLLM 版本为==1.82.6。 - 使用
pip-audit或safety等工具扫描环境。
高级缓解措施与最佳实践
- 锁定版本:在生产环境中始终使用
litellm==1.82.6或更高安全版本,并启用依赖锁定(Poetry、Pipenv)。 - SBOM 与供应链扫描:集成 Dependabot、Snyk、JFrog Xray 或 Endor Labs,监控 PyPI 包变更。
- 最小权限原则:避免在同一环境中混用开发与生产凭证;使用 Secrets Manager(如 AWS Secrets Manager、HashiCorp Vault)。
- Air-gapped 或离线安装:对高安全环境,考虑从 GitHub 源码构建并验证哈希。
- 监控异常:部署 EDR 工具,关注
.pth文件创建、异常 fork 行为及对models.litellm.cloud的网络请求。 - 社区建议:Andrej Karpathy 等专家指出,供应链攻击正成为常态,开发者应减少不必要依赖,或通过 LLM 直接实现简单功能以降低风险。
边缘情况注意:
- 通过 CLI 安装脚本(如某些 AI 工具的 install.sh)间接安装的用户同样受影响。
- Docker 镜像若基于受污染的 base image,需重建。
- 虚拟环境(venv)虽隔离,但若在全局 Python 中安装,仍会影响系统进程。
结论
LiteLLM 供应链攻击再次证明,开源生态的便利性与安全风险并存。攻击者通过污染安全工具本身,实现了对下游项目的精准打击。
立即行动:检查所有 Python 环境中的 LiteLLM 版本,降级至 1.82.6,并全面轮换受影响凭证。同时,建议团队建立严格的依赖审核流程,避免类似事件重演。
关注 LiteLLM 官方 GitHub 和 PyPI 公告,等待官方发布更安全的后续版本。开源安全需要全社区共同维护——从锁定版本开始。
保持警惕,定期审计依赖链,是每位 AI 开发者在 2026 年及以后的必备技能。