工具大全
返回情报列表

码农早餐 · 2026-10-22

今天这碗:LiteLLM 1.107.0 在 PyPI 被投毒:装包即窃取凭证并留下后门。安全公司 SafeDep 在 10 月 21 日披露,PyPI 上的 LiteLLM 1.107.0 发行包内被塞入了一个凭证窃取程序和一个远程代码执行后门。

2026年10月22日6 分钟阅读码农早餐
🥣 今天这碗一件事 + 主厨的判断

LiteLLM 1.107.0 在 PyPI 被投毒:装包即窃取凭证并留下后门

安全公司 SafeDep 在 10 月 21 日披露,PyPI 上的 LiteLLM 1.107.0 发行包内被塞入了一个凭证窃取程序和一个远程代码执行后门。Linux、macOS、Windows 三个平台的七个 wheel 全部中招,恶意代码以三个文件的形式落在 site-packages 里。PyPI 已经下架了该版本。1.106.2、1.107.0rc1、1.107.0rc2 三个版本经检查是干净的,1.107.0 固定的两个配套包 litellm-proxy-extras==0.4.110 和 litellm-enterprise==0.1.78 也是干净的。

植入方式藏在 sdist 的 pyproject.toml 里:maturin 构建段多了一行 data = "cook",它把 cook/ 目录拷进 wheel 的 purelib,pip 安装时再落进 site-packages。sdist 本身不含 cook/ 文件夹,所以这一行几乎是唯一可见的改动。BerriAI/litellm 仓库的公开提交里找不到 data = "cook",也找不到 cook/ 目录。SafeDep 按 blob hash 逐文件比对,发现 sdist 实际对应的是更晚的 main 提交 a8113b0(08:50 UTC),再加上五个被改过的文件——其中四个 Cargo.toml 只是加了一行 readme = "README.md",正常的 1.106.2 和 rc2 也有同样改动;第五个是 pyproject.toml,把版本号改回 1.107.0,并把配套包固定到 rc2 的值,于是和 rc2 做依赖 diff 看不出异常。而 v1.107.0 标签指向的提交 66c8f5b(06:59 UTC)里,pyproject.toml 写的是 version = "1.108.0"。

10 月 10 日我们写过 LiteLLM 把内核换成 Rust、外层保留 Python SDK 的那次改动,当时提到底层换了语言,部署方式和依赖都会跟着变。这次的投毒正是利用了 Python 的加载机制:cook.pth 里一行 import cook,Python 启动时会执行 .pth 文件里以 import 开头的行,于是宿主机上每一个 Python 进程都会跑一遍窃取程序——应用、pip、IDE 的语言服务器、CI 任务,哪怕它从不 import litellm。另一个文件 sitecustomize.py 会在启动时被自动导入,它 fork 出守护进程,每小时从攻击者的 GitHub 仓库读一个域名,重跑窃取程序,再从该域名下载并执行代码。

窃取范围列得很细:~/.ssh/*、~/.aws/credentials、gcloud 凭据、~/.kube/config、~/.docker/config.json、GitLab runner 的 config.toml、Jenkins 的 master.key、Terraform 的 credentials.tfrc.json,以及 Claude Code、Cursor、Copilot、Codex auth.json、Hugging Face token 等一批 AI 开发工具的凭证;它还会读 DATABASE_URL,把 LiteLLM proxy 数据库里 LiteLLM_CredentialsTable 和 LiteLLM_ProxyModelTable 两张表的 provider API key 整表导出。数据用随机 AES-256-CBC 加密,密钥再用内嵌公钥做 RSA-OAEP 加密,打包成 tar.gz POST 到 www.litellm[.]dev/healthcheck,成功后写一个 /tmp 标记,保证每台机器只收一次。

SafeDep 的判断是:这些 wheel 出自 BerriAI 自己的发布流水线,只是源码被攻击者改过,置信度为中到高。依据是 WHEEL 文件里写的 maturin 1.9.4 与正常发行一致、RECORD 条目完整无构建后改动、三个平台的原生构建时间戳分开(macOS 11:20、Linux 11:21、Windows 11:37 UTC),Windows wheel 里全部 2,804 个 .py 文件都是 CRLF 换行,符合 Windows 上 git checkout 做换行转换的特征。09:30 到 12:30 UTC 之间的 539 次 GitHub Actions 运行里,没有一次构建或发布过这个版本;上传 PyPI 约 10 分钟后,litellm-dispatcher[bot] 才发布 GitHub release v1.107.0,1.106.2 也有同样的延迟。1.107.0、1.106.2、rc2 在 PyPI 上都没有 provenance attestation。

目前能确认的只到这一步:包已下架,干净版本已列出,攻击路径的推断还缺 BerriAI 流水线自己的日志来证实——是维护者或 bot 凭证被拿走、私有分支或镜像被改,还是流水线构建时引用的源码被替换,原文没有给出结论。

来源:


本文从过去 24h 的 X / Hacker News / GitHub Trending 共 69 条信息中选出这一件事展开。内容由 LLM 辅助生成并经事实校对,来龙去脉部分参考了本站往期内容,文末附原始来源链接,重要决策请交叉验证。

码农早餐公众号二维码

微信扫码关注「码农早餐」

每天早 8 点推送到微信,不用记网址。关注后回复「价格」,拿大模型价格与退役时间速查表。

喜欢这篇?订阅每日推送

每天 8:00 精选 AI 编程动态,每周六另附一封亲手实测的周刊。

本页内容由 LLM 自动聚合 + 解读生成,每条均有原始来源链接,建议交叉验证。