恶意版本通过 .pth 文件在每次 Python 进程启动时自动执行,窃取凭证并向 Kubernetes 集群横向扩散。
LiteLLM 是一个开源的 Python SDK 与 AI 网关,允许开发者以统一的 OpenAI 格式调用 100+ 个大语言模型(LLM)服务。
无论后端是 OpenAI、Anthropic、Google Vertex AI、AWS Bedrock、Azure、HuggingFace,还是本地部署的 vLLM、NVIDIA NIM,开发者只需调用同一套 API 接口,LiteLLM 负责在底层完成协议转换、路由分发和统一错误处理。
它支持 /chat/completions、/embeddings、/images、/audio、/batches 等主流端点,并提供负载均衡、重试、可观测性回调、多租户成本追踪等企业级功能,P95 延迟在 1000 RPS 压力下仅为 8ms。
数据来源:github.com/BerriAI/litellm & pypistats.org · 2026-03-24
litellm_init.pth 文件。该版本未在 GitHub 上发布对应 Release,绕过了正常的发布流程。
litellm_init.pth 文件植入 PyPI 包内。.pth 文件是 Python 的路径配置文件,会在每次 Python 解释器启动时自动执行,无需任何显式导入。
.pth 通过 subprocess.Popen 生成子 Python 进程。由于 .pth 文件在每次解释器启动时都会触发,导致进程指数级增殖,产生叉子炸弹,最终导致机器崩溃——这是恶意软件自身的 bug。
.env 环境变量文件.gitconfig、Shell 历史记录https://models.litellm.cloud/(非 litellm 官方基础设施)POST https://models.litellm.cloud/ Content-Type: application/octet-stream [AES-256-CBC 加密数据 + RSA-4096 封装密钥]
kube-system 中每个节点上创建特权 alpine:latest Pod(命名规则:node-setup-*)/root/.config/sysmon/sysmon.pysysmon.service 实现开机自启~/.config/sysmon/sysmon.pypip show litellmuv 缓存、CI/CD 环境及所有虚拟环境中的 litellm 版本。
rm -rf ~/.cache/uv 或 pip cache purge
~/.config/sysmon/sysmon.py~/.config/systemd/user/sysmon.servicekube-system 命名空间中名称匹配 node-setup-* 的 Pod,并检查集群 Secret 是否存在未授权访问记录。
.env 文件中的 API 密钥,以及数据库密码。
FutureSearch 团队在开发其产品时,通过 litellm 接入多个模型供应商的 API。在加载 Cursor IDE 中的某个 MCP 插件时,工程师注意到异常——由于恶意 .pth 文件触发的叉子炸弹效应,机器直接崩溃,引起了研究人员的高度警惕。
随后,工程师借助 Claude Code 进行根因分析,迅速定位了 litellm_init.pth 文件中的恶意代码,并第一时间向 PyPI 官方(security@pypi.org)及 litellm 维护者举报。
FutureSearch 表示,此次事件中其平台损失极小,无用户数据泄露。该事件在社区以 litellm Issue #24512 持续追踪。
pip-compile、uv lock 或 poetry.lock 锁定直接依赖和间接依赖的精确版本哈希,避免自动升级到恶意版本。pip-audit 或 GitHub Dependabot 扫描全量依赖树。subprocess.Popen 等异常子进程创建行为及对未知外部地址的 HTTPS POST 请求;部署 EBPF 或 Falco 等运行时安全工具。kube-system 命名空间的 Pod 创建操作实施严格审计策略。