PyPI供应链攻击:LiteLLM与Telnyx案例及实用建议
攻击者通过泄露Trivy依赖中的API令牌,入侵了litellm和telnyx软件包。2026年3月19日,恶意版本被发布:litellm 1.82.7和1.82.8,telnyx 4.87.0和4.87.2。代码在导入模块时激活,扫描环境中的密钥,并将数据外泄到远程服务器。
litellm中的恶意负载收集SSH密钥、Git/Docker凭证、.env文件、K8s令牌、数据库密码、LDAP配置、shell历史记录和加密密钥。它尝试从元数据服务器和AWS Secrets Manager提取云令牌。数据被发送到models.litellm.cloud。为保持持久性,它创建名为“系统遥测服务”的SystemD服务或从checkmarx.zone加载指令的K8s pod。
在telnyx中,_client.py中的恶意代码从托管在8.42.209.203的WAV文件加载阶段。在Windows上,它将msbuild.exe放入启动文件夹以实现自动启动;在其他操作系统上,它使用Python脚本。版本4.87.1包含一个阻止执行的拼写错误。通信通过加密密钥与TeamPCP关联。
开发人员通过轮换令牌、删除发布并在PyPI上实施可信发布者来响应。
针对流行开源软件包的攻击特征
与典型的PyPI攻击(如域名抢注或新软件包)不同,这里恶意代码被注入到现有高流量项目中。攻击链:入侵仓库 → 窃取PyPI/GitHub令牌 → 发布恶意软件 → 从开发机器收集凭证 → 重复入侵。
攻击期间,LiteLLM被下载超过11.9万次。约40-50%的安装未指定版本(最新版),约1700次安装/分钟。PyPI响应时间:
- LiteLLM:从发布到隔离 — 2小时32分钟(13个用户报告)。
- Telnyx:3小时42分钟(可信用户自动隔离)。
PyPI针对恶意软件的防护措施
每天新增约700-800个项目。PyPI依赖社区通过“报告为恶意”进行扫描和报告。此功能于2024年引入,加速了隔离过程。可信发布者支持自动化响应。
建议:依赖冷却期
延迟安装新版本为恶意软件检测提供时间。格式:RFC 3339(P3D = 3天)。
- uv:全局在~/.config/uv/uv.toml或pyproject.toml中:
[tool.uv]
exclude-newer = "P3D"
- pip v26.1+:在pip.conf中:
[install]
uploaded-prior-to = P3D
- pip 26.0(绝对日期):
python -m pip install --uploaded-prior-to=$(date -d '-3days' -Idate) package
安全补丁的变通方案:--uploaded-prior-to=P0D或使用Dependabot/Renovate(忽略延迟)。
锁定依赖以确保可重现性
带哈希的锁定文件可防止重新安装时代码被替换。
| 工具 | 命令 | 格式 |
|------------|---------|--------|
| uv | uv lock | uv.lock |
| pip-tools | pip-compile --generate-hashes | requirements.txt |
| pipenv | pipenv lock | Pipfile.lock |
pip freeze不足 — 缺少哈希。pip lock(pylock.toml)是预期方案。
保护开源项目
- 在PyPI上实施可信发布者。
- 为PyPI/GitHub使用双因素认证+硬件密钥。
- 限制令牌权限(范围)。
- 通过webhook监控发布。
- 使用Trivy/Grype扫描仓库。
对于开发机器:
- 隔离受感染环境。
- 轮换所有凭证。
- 检查持久性(SystemD、K8s pods、启动文件夹)。
- 分析流量/日志。
关键要点
- 攻击利用真实开源软件包;验证新版本。
- P3D冷却期 + 锁定文件 = 基本防护。
- 隔离前LiteLLM安装超11.9万次;最新版有风险。
- 外泄包括云元数据和Secrets Manager。
- 可信发布者和社区加速PyPI响应。
— Editorial Team
暂无评论。