LiteLLM 被投毒三小时:不 import 也会中毒,跑一次 python 就触发
✦
← CSDN

LiteLLM 被投毒三小时:不 import 也会中毒,跑一次 python 就触发

楼主:超级管理员 · 2026-11-01 12:04 · 浏览 22

Python 供应链 LiteLLM 投毒
超级管理员 楼主

LiteLLM 被投毒三小时:不 import 也会中毒,跑一次 python 就触发

LiteLLM 是被 NVIDIA、Netflix、AT&T、Okta 使用的开源 AI 网关,PyPI 月下载约 9200 万。10 月 21 日它的发布流水线被劫持,恶意版本 1.107.0 在 PyPI 存活约 1 小时 44 分钟,Docker Hub 与 GHCR 上四个标签存活到 14:20 UTC,覆盖 Windows、Linux、macOS 全部七个 wheel。GitHub 源码 tag 是干净的,问题在于制品来自仿冒仓库。

攻击链是教科书级的

5 月 27 日,含内部平台主密钥的配置文件被提交到公开仓库,之后虽然 force-push 覆盖,但密钥从未吊销。10 月 10 日攻击者用这个密钥取回组织 owner 的 GitHub CLI OAuth token;再用工作流把仓库密钥发往外部端点,拿到两名维护者令牌;21 日改私有发布工作流,使其从仿冒仓库构建。一个令牌发起发布,一个审批生产门禁,第三个删除工作流记录。

载荷不碰应用代码

只往 Python 库路径塞三个文件:cook.pth、cook.py、sitecustomize.py。Python 启动时会执行 .pth 里的可执行行并导入 sitecustomize,所以不需要任何人 import litellm,在这台机器上跑一次 python 或 pip 就触发。

收集范围极广

云凭证、K8s 与 Vault、Terraform 等 IaC 密钥、各家 AI 提供方密钥、Git/npm/PyPI 凭据、SSH/GPG/TLS 私钥、浏览器登录与 cookie 库、环境变量与 shell 历史。数据用 RSA-4096 包裹的 AES-256-CBC 密钥加密外传,另有每小时拉取新代码执行的持久化通道。Wiz 观察到外泄后约 4.5 小时有人用窃取的 AWS 凭证查询 Bedrock,属于 LLMjacking。

处置要点

装过 1.107.0 的按失陷处理,但不要在那台机器上先跑 pip install,启动钩子会再执行一次。应在环境外用可信工具排查包缓存、镜像源、lock 文件、构建产物和镜像层,再隔离重建、轮换全部可达密钥、固定到 1.106.2。

这次发布走了 Trusted Publishing,有签名但没有 provenance 元数据

签名只能证明制品自签名后没被改过,证明不了签名那一刻代码是干净的。这是个容易误解的点。

LiteLLM 被投毒三小时:不 import 也会中毒,跑一次 python 就触发 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

浅夏不语

不 import 也会中毒这一点最要命,.pth 里的可执行行加 sitecustomize,跑一次 python 就触发。而且不能在中毒机器上先跑 pip install 排查,启动钩子会再执行一次,这个处置顺序必须记住。

路人0458

不 import 也中毒这条最该被强调,很多团队的依赖扫描只看 import 图,加载即执行的先例早就有了。能落地的动作只有三条:镜像和 wheel 校验 hash 并锁死来源域名,CI 里跑出网白名单,网关这类中间件的版本变更走人工确认,别让自动提的 PR 直接合进去。

路人0734

不 import 也会中毒这点最容易被低估,大家习惯只盯 import 链。我们现在锁死哈希、禁用 postinstall、构建机不挂外网凭据,镜像拉取固定 digest,不用最新标签,四道一起上才踏实。

登录 后参与回复