News Hacker|极客洞察

718 8 天前 github.com
⚠️LiteLLM 1.82.7/1.82.8 被 Trivy 供应链攻破,PyPI 下架
你是做安全扫描,还是顺手把密钥也扫走?

🎯 讨论背景

LiteLLM 是一个用于统一调用多家 LLM 提供商的 Python 包/代理层,也被 DSPy(LLM 应用框架)、CrewAI(多智能体框架)等项目直接依赖。此次事件的核心是 PyPI(Python 官方包仓库)上的 litellm 1.82.7 和 1.82.8 被植入恶意代码,而维护者称入口来自 CI/CD 里使用的 Trivy(容器漏洞扫描工具)依赖被攻破,进而泄露了发布凭据。恶意包被 PyPI quarantine(隔离下载)并随后删除,维护者也轮换了 GitHub、Docker、CircleCI 和 pip 相关密钥,暂停新版本发布并请 Mandiant(Google 的安全响应团队)协助调查。因为许多用户通过 `uv`、`pip`、自动化代理或下游库间接安装它,讨论很快从单个包泄露扩展到 Python 生态、CI 权限边界和包管理安全策略。

📌 讨论焦点

攻击链与实际受影响范围

维护者和多条评论都指向同一条链路:Trivy(容器漏洞扫描工具)在 CI/CD 里被攻破后,泄露了 PyPI 发布 token 以及可能的 GitHub/CircleCI 凭据。受影响的版本被确认是 1.82.7 和 1.82.8,其中一个通过 `proxy_server.py` 在 import 时执行,另一个通过 `.pth` 文件在解释器启动时触发。PyPI 先把包放进 quarantine,随后删除了这些版本,官方也说使用 `requirements.txt` 锁定版本的 Proxy Docker 部署没有直接受影响。很多人把这看成典型的“上游扫描器被打穿,发布链被接管”的供应链攻击。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7]

下游项目与安装方式放大了 blast radius

LiteLLM 的风险不只在直接安装它的人身上。评论里提到 DSPy、CrewAI、nanobot、aider-chat 等都直接或间接依赖它,很多 LLM 工具又会在运行时自动拉取最新版本。有人自己的环境是通过 `uvx`、Cursor、`browser-use` 或 Helm/Docker tags 间接触发的,说明问题会沿着依赖树向下扩散。也因此,很多人开始重新检查 requirements、锁文件和自动更新策略,担心没看见公告的人会默认踩中。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8]

账号接管与评论区刷屏

事件的另一个显著特征是 GitHub 讨论区被大量重复的“thanks”类评论刷屏,很多人认为这是被盗账号或机器人在刻意淹没正常讨论。评论中还提到维护者的 GitHub 主页、个人仓库和 issue 状态出现了“teampcp owns BerriAI”之类的痕迹,进一步强化了账号接管的判断。有人追问主账号是否还能恢复,也有人赶紧发邮件提出帮忙做安全分析。整体上,这部分讨论把焦点从单纯的包污染,转到了攻击者如何利用已泄露账号继续制造混乱。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8]

最小权限、沙箱和发布隔离

很多评论把重点放在把权限和隔离做得更细:扫描步骤不该拿到发布 token,发布流程应只在单独 job 里注入最小必要权限。另一条强烈建议是改用 OIDC/Trusted Publishing(无长期 token 的发布方式),或者把构建产物和发布仓库分离,避免公共仓库能直接触发发布。与此同时,许多人主张 sandbox、VM、container、seccomp、gVisor、macOS keychain 等多层隔离,让被污染的工具最多只在局部失败。争议主要在于“外部包沙箱”还是“开发者自己设计的沙箱”更可行,但共识是 blast radius 必须压到最小。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9]

包生态反思:少依赖、慢更新、先验验证

很多评论把这次事件当成对整个开源依赖生态的警告,尤其是 npm、pip、Rust 这类鼓励大量细碎依赖的体系。有人建议 vendoring、减少第三方库、优先用标准库或发行版包,并且只在真正需要时升级,而不是追新版本。也有人提到 `minimumReleaseAge`、`exclude-newer`、`osv-scanner`、checksum、reproducible builds 等工具,试图把新包先“冷却”一段时间再采纳。反方则提醒,过度保守会让安全补丁难以及时进入生产,所以这不是简单的“少更新”就能解决的问题。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8]

对维护者回应、修复流程和 SOC2 的看法

除了技术细节,评论也在评价这次应对是否得体。很多人认为维护者及时说明、直接道歉、公开时间线、暂停新发布并请求安全专家协助,已经比常见的公关套话强很多。另一些人问 SOC2(合规审计)是否能防住此类事故,结论基本是不能,它最多约束流程,不会自动消灭被盗凭据或 CI 权限过宽的问题。于是大家对“有审计就安全”的幻想也被顺带打破。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7]

📚 术语解释

Trivy: Aqua Security 的容器/镜像漏洞扫描工具,这次被认为是 CI/CD 入口。

supply chain attack: 通过上游依赖、构建或发布链路投毒下游的攻击。

.pth file: Python `site` 在启动时读取的路径配置文件,可执行其中的 import 语句。

Trusted Publishing / OIDC: 用短期身份令牌代替长期 token 的发布机制。

minimum release age: 延迟采用新包版本,先观察一段时间再安装。

sandbox: 把不可信代码限制在受控隔离环境中,限制文件、网络和系统调用。

TeamPCP: 这次事件里反复出现的攻击者/活动代号。