news 2026/8/15 23:04:21

LitellM供应链投毒实战复盘:40分钟击穿43\.4万CI/CD流水线 检测与防御全方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LitellM供应链投毒实战复盘:40分钟击穿43\.4万CI/CD流水线 检测与防御全方案

前言

2026年3月24日的LitellM投毒事件,彻底打破了很多企业的安全认知盲区。过往团队的安全防护重心,大多放在业务代码漏洞、外网入侵、主机木马这类显性风险上,所有人都默认:合规的开源安全工具、主流公共包管理器的第三方依赖,是绝对可信的。

这次攻击用最直白的结果证明:现代软件供应链的最薄弱点,从来不是自研业务代码,而是自动化流水线依赖的底层工具链。攻击者没有爆破任何企业内网、没有突破任何防火墙、没有挖掘业务漏洞,仅仅利用安全工具Trivy的供应链沦陷,层层劫持上下游信任关系,耗时20天潜伏、40分钟集中爆发,直接污染全球43.4万条CI/CD流水线、2500余家企业的生产构建环境。

更致命的是,绝大多数中招企业在事件曝光前,完全没有感知。恶意载荷不触发常规杀毒告警、不篡改业务代码、仅静默窃取全量密钥凭证,且包下架、版本升级后,泄露的密钥、API凭证、云权限依然永久有效。

本文从攻击底层逻辑出发,用第一性原理拆解完整攻击链路,结合对抗式审查思维复盘防御漏洞,同时提供全套可落地的自查脚本、环境清理方案、流水线加固配置,让开发者和安全运维人员能直接落地整改,彻底规避同类供应链投毒风险。


1. 事件核心基础:读懂LitellM与攻击前置条件

1.1 LitellM项目真实业务定位

LitellM是目前生态最完善的开源AI网关,核心作用是统一封装百余家大模型厂商的接口,包括OpenAI、阿里云通义、百度文心、字节豆包、 Anthropic 等。开发者无需适配各家模型的私有协议,仅通过LitellM统一调用、统一鉴权、统一限流,极大降低了AI业务开发成本。

依托极简的接入方式,LitellM形成了超大的安装体量:月度PyPI下载量突破9500万次。覆盖场景不止是企业生产服务,还包含开发者本地调试环境、个人AI项目、云原生容器流水线、自动化测试平台、开源项目CI构建节点。

这种全覆盖的部署特性,让LitellM成为供应链攻击的最优靶标。一旦投毒成功,恶意代码可以无差别渗透个人开发者、中小企业、头部互联网公司的各类环境,传播效率远超普通业务包。

1.2 企业普遍存在的致命信任误区

绝大多数团队的流水线设计,都存在一个默认信任逻辑:安全工具绝对可信。

本次事件的前置漏洞,不是LitellM本身代码存在漏洞,而是企业CI流水线默认自动拉取最新版Trivy漏洞扫描工具。Trivy作为业界主流的容器、依赖漏洞扫描工具,被所有团队归类为“安全可信组件”,全程不做版本锁定、不做哈希校验、不做执行权限管控。

攻击者正是抓住了这个核心误区。攻陷Trivy官方供应链后,利用LitellM流水线的自动更新机制,让恶意扫描工具长期潜伏在构建环境中,静默窃取核心权限凭证,最终完成上游投毒、下游全覆盖的攻击闭环。

1.3 事件核心数据汇总

  • 攻击组织:TeamPCP

  • 恶意包版本:litellm 1.82.7、1.82.8

  • 恶意载荷代号:SANDCLOCK(沙漏持久化后门)

  • PyPI恶意包存活窗口:40分钟

  • 影响规模:43.4万条CI/CD流水线、2500+企业组织

  • 泄露数据体量:195TB各类密钥、Token、API凭证

  • 潜伏周期:20天(3月19日-3月24日)


2. 完整攻击时间线与链路架构拆解

2.1 精准时间线(UTC标准时间)

很多复盘文章只记录了3月24日的投毒爆发环节,但真正的攻击核心是前期20天的静默潜伏,这也是多数企业防御体系完全缺失的环节。

3月19日:上游安全工具沦陷

TeamPCP组织攻破Trivy官方发布渠道,推送携带恶意代码的Trivy新版本。全球所有开启自动更新、未锁定Trivy版本的CI/CD流水线,全部自动拉取并执行了恶意程序,其中包含LitellM官方项目的构建流水线。

恶意Trivy程序运行后,主动扫描当前Runner环境内存与文件,精准抓取到LitellM项目维护者的PyPI发布Token。该Token具备包版本上传、更新、推送的最高权限,且长期有效、未配置自动轮转,攻击者直接留存凭证,开启20天潜伏窗口。

3月24日 08:30:正式投毒发布

攻击者利用窃取的合法PyPI Token,伪造官方身份,上传植入SANDCLOCK载荷的litellm 1.82.7、1.82.8两个版本。PyPI平台未触发异常发布风控,恶意包成功公开上架。

3月24日 09:10:紧急下架隔离

安全厂商监测到异常包行为,联动PyPI官方紧急下架恶意版本,封禁违规账号。从上架到下架,恶意包仅存活40分钟。

但全球自动化流水线是7×24小时不间断构建,40分钟的窗口期,足够数十万流水线完成依赖拉取、镜像构建、环境部署,恶意代码完成批量落地。

8月11日:完整攻击链路公开

CloudSEK、Hudson Rock两家安全厂商联合披露本次事件完整复盘报告,公开外泄凭证数据集、攻击技术细节,确认43.4万条流水线存在明确暴露风险。

2.2 攻击链路架构图(Mermaid)

本次攻击是典型的三级级联供应链攻击,区别于单一包投毒,攻击从底层安全工具渗透,逐层向上劫持信任,链路复杂度远超常规供应链攻击。

攻陷官方渠道

自动更新扩散

环境窃取

伪造官方身份

40分钟公开窗口

恶意载荷执行

持久化留存

攻击者TeamPCP

Trivy安全工具投毒

LitellM官方CI/CD Runner

PyPI官方发布Token

PyPI上架恶意LitellM包

全球企业CI/CD流水线拉取依赖

流水线凭证、密钥批量泄露

企业长期权限失守风险

2.3 攻击核心逻辑(第一性原理拆解)

抛开所有表面现象,本次攻击的底层逻辑只有两点,也是所有供应链攻击的通用核心:

第一,行业默认的信任传递机制无校验。企业信任Trivy这类安全工具,Trivy被投毒后,企业流水线无条件承接风险;LitellM信任自身CI工具链,最终让上游风险直达终端业务环境。信任单向传递,无任何反向校验、无权限隔离、无异常拦截。

第二,自动化机制放大安全风险。人工操作存在审批、核查环节,而CI/CD流水线全自动执行、无人工干预、高频次构建,极短的投毒窗口就能完成全域扩散,风险传播速度呈指数级增长。


3. SANDCLOCK恶意载荷技术深度解析

本次投毒的核心亮点(高危点)是SANDCLOCK载荷的免杀、无感执行机制。它避开了绝大多数常规代码检测、依赖扫描、主机杀毒规则,这也是大量企业无法提前发现入侵的核心原因。

3.1 核心突破点:.pth文件无导入自执行机制

常规Python后门,需要业务代码import对应包才能触发执行,只要开发者不主动引用,后门就无法运行。

SANDCLOCK载荷利用了Python的site-pth持久化机制。攻击者在打包LitellM恶意版本时,植入自定义.pth路径文件。Python环境在启动、加载依赖、初始化路径的全过程中,会自动解析并执行.pth文件内的代码,无需业务代码导入、无需手动调用,只要环境加载Python,后门自动触发

这是绝大多数安全扫描工具的盲区:常规扫描只检测py、pyc可执行文件,忽略.pth路径配置文件,导致后门完全免杀隐蔽。

3.2 载荷三阶段攻击行为

阶段一:全域凭证搜刮

后门启动后,不会立刻发起网络请求规避检测,而是先静默扫描当前环境所有敏感资源,扫描范围覆盖全场景流水线权限:

  • 系统环境变量:抓取所有密钥、Token、账号密码变量

  • Proc内存文件:读取运行中进程的内存明文凭证

  • 服务器密钥:SSH私钥、known_hosts认证文件

  • 云原生资源:K8s Secret、ConfigMap敏感配置

  • 研发凭证:GitHub/GitLab个人Token、PyPI发布密钥

  • AI业务凭证:所有大模型服务商API Key、调用密钥

阶段二:加密数据外渗

载荷完成凭证收集后,会对所有数据进行对称加密处理,规避明文传输检测,再通过HTTPS隧道回传至攻击者管控的恶意域名。整个传输过程遵循正常网络协议,无异常流量特征,流量审计系统无法识别。

阶段三:环境持久化与横向潜伏

数据外渗后,载荷不会自动退出,而是在当前Runner容器、开发者主机、生产节点中完成持久化配置。它会修改Python环境全局路径,保证后续每次Python启动都会重新加载恶意逻辑,同时尝试遍历内网环境,扫描同网段其他流水线节点,实现横向渗透。

3.3 最大认知误区纠正

很多企业的应急操作只做两步:卸载LitellM包、升级至最新安全版本。这是完全无效的补救方式。

恶意代码的核心危害不是本地驻留,而是凭证数据外泄。只要密钥、Token、API Key被窃取,即便彻底删除恶意包,被盗凭证依然具备完整权限,攻击者可随时远程登录、调用接口、操控企业资源。唯一有效的补救方式是全量轮转所有泄露凭证。


4. 精准影响范围判定与场景梳理

43.4万条流水线是潜在暴露总量,并非所有流水线都被成功窃取数据,但只要在攻击窗口期内执行过LitellM依赖安装的环境,全部存在高危风险。本次风险覆盖四类核心场景,包含大量间接中招的隐蔽场景。

4.1 直接风险场景

  • GitHub Actions、GitLab CI、Jenkins 自动化流水线:3月24日UTC时段自动构建、自动安装litellm依赖的任务

  • 企业生产AI服务:部署了1.82.7、1.82.8版本LitellM网关的线上节点

  • 开发者本地环境:该时间段内手动安装、更新过LitellM的个人开发机

4.2 间接风险场景(最容易被遗漏)

很多业务项目代码中没有直接写入litellm依赖,依然会中招。大量AI上层框架、智能运维工具、LLM应用脚手架,会将LitellM作为二级、三级间接依赖。项目打包构建时,会自动递归安装依赖链中的LitellM恶意版本,全程无感知触发后门执行。

这类间接依赖风险,是企业自查的最大盲区,常规关键词检索无法发现,必须通过锁文件全局检索才能排查。


5. 企业落地级自查方案(完整可复制脚本)

本节提供全套可直接部署的自查脚本,支持单节点自查、批量仓库检索、流水线日志筛查,适配所有Linux、MacOS环境,Windows环境可通过PowerShell适配执行。

5.1 本地环境版本自查脚本

用于检测当前机器、构建节点是否安装过恶意版本LitellM

#!/bin/bashecho"========== LitellM 恶意版本自查开始 =========="# 检测已安装版本pip list|grep-E"litellm"# 检索全局依赖锁文件find.-typef\(-name"requirements.txt"-o-name"requirements-lock.txt"-o-name"poetry.lock"-o-name"pyproject.toml"\)-execgrep-lE"1\.82\.7|1\.82\.8"{}\;echo"========== 自查结束 =========="echo"若上方输出存在对应版本,证明环境已暴露,需立即执行应急处置"

5.2 批量仓库全局检索脚本

适配企业代码仓库批量扫描,排查所有项目的依赖文件,避免遗漏间接依赖

#!/bin/bash# 批量扫描当前目录下所有代码仓库的恶意LitellM版本TARGET_VER="1.82.7|1.82.8"FILE_LIST=("requirements.txt""requirements-lock.txt""poetry.lock""pyproject.toml""Pipfile.lock")forfilein"${FILE_LIST[@]}";dofind.-name"$file"|xargsgrep-lE"$TARGET_VER">>litellm_risk_scan_result.txtdoneecho"扫描完成,结果已保存至 litellm_risk_scan_result.txt"echo"风险文件数量:$(wc-l<litellm_risk_scan_result.txt)"

5.3 CI流水线日志自查方法

重点筛查2026年3月24日 UTC 08:30-09:10时间段的所有构建日志,检索是否存在LitellM版本安装记录:

# GitLab CI 日志检索grep-r"litellm==1.82.7\|litellm==1.82.8"/var/log/gitlab-ci/# Jenkins 日志检索grep-r"litellm==1.82.7\|litellm==1.82.8"/var/jenkins_home/logs/

6. 分级应急处置落地流程

根据自查结果,将风险分为无风险、低风险、高危暴露三级,对应不同处置方案,避免过度操作或处置不全。

6.1 无风险场景

自查脚本无任何恶意版本输出,流水线对应时间段无构建记录、无依赖安装记录。只需执行常规加固,无需密钥轮转。

6.2 低风险场景

仅测试环境、个人开发机安装过恶意版本,无生产凭证、无云权限、无流水线核心Token。处置方式:清理本地依赖、重启环境、更新依赖版本。

6.3 高危场景(生产/流水线命中)

只要CI流水线、生产环境命中恶意版本,必须严格执行以下全流程操作,缺一不可:

第一步:全量轮转所有敏感凭证(最高优先级)

轮转范围包含:云服务商AccessKey、GitHub/GitLab CI Token、PyPI/NPM发布密钥、所有大模型API Key、SSH私钥、K8s集群Secret、数据库账号密码、运维后台凭证。禁止遗漏任何一类权限凭证。

第二步:重建所有受影响构建环境

删除CI Runner所有容器缓存、镜像构建缓存、依赖缓存,销毁旧构建节点,重新初始化全新环境。恶意载荷会驻留缓存文件,仅卸载包无法清除残留风险。

第三步:全量审计权限操作日志

核查所有密钥、Token的登录记录、接口调用记录、资源操作记录,排查是否存在异常外网访问、越权操作、数据外渗行为。留存审计日志用于合规溯源。

第四步:统一升级安全依赖版本

全局卸载恶意版本,锁定LitellM官方稳定安全版本,写入项目依赖锁文件,禁止自动更新。

第五步:流水线组件合规校验

排查所有第三方Action、安全扫描工具、CI依赖组件,取消latest动态版本,全部固定具体版本并配置哈希校验。


7. 对抗式审查:深挖企业防御体系底层漏洞

用对抗思维复盘本次事件,所有中招企业的防御体系,都存在三个共性底层漏洞,也是绝大多数企业供应链安全的通用短板。

7.1 可信组件白名单机制缺失

企业安全策略只防护外部陌生流量、陌生程序,对Trivy、GitHub Action、开源依赖这类“知名工具”默认放行,无任何校验机制。攻击者只需要攻陷一个主流可信工具,就能绕过所有边界防护,实现内网全域渗透。

7.2 CI权限过度授信,无最小权限约束

绝大多数企业的CI/CD Runner配置永久有效Token、全局云权限、集群管控权限。流水线本身只需要构建、打包、推送权限,却被赋予了密钥读取、资源修改、集群操控等超范围权限。一旦流水线被劫持,攻击者直接获取最高业务权限。

7.3 依赖管控机制形同虚设

大量项目使用动态版本依赖、不启用锁文件、不校验包哈希,任由构建环境自动拉取最新版本。公共包管理器的开源包一旦被投毒,企业会无条件自动中招,无任何拦截能力。

7.4 隐蔽文件监测能力空白

现有主机安全、代码扫描工具只检测常规可执行文件,忽略.pth、.cfg、.ini这类配置型文件的执行风险,导致新型持久化后门长期隐身。


8. 企业长期供应链安全加固方案(可落地配置)

8.1 Python依赖强制校验配置

开启pip哈希校验,禁止未校验依赖安装,在全局pip配置中写入强制校验规则:

# 全局开启pip哈希校验pip configsetglobal.require-hashestrue# 锁定依赖版本,禁用动态更新pip configsetglobal.disable-pip-version-checktrue

8.2 CI流水线标准化加固规则

  • 所有第三方工具、Action、扫描组件禁止使用latest标签,固定具体迭代版本

  • 所有流水线凭证使用短时临时Token,有效期不超过24小时,自动轮转,禁用永久Token

  • Runner环境启用资源隔离、权限降级,禁止root权限运行构建任务

  • 构建缓存定时清空,禁止长期留存依赖缓存、镜像缓存

8.3 新增异常监测规则

在主机安全、流水线审计平台新增监测策略:监控Python环境.pth文件的新增、修改、写入行为,一旦出现非人工操作的变更,立刻触发告警并阻断构建任务。

8.4 凭证常态化轮转机制

建立企业凭证生命周期管理制度,云密钥、Git Token、API密钥按月自动轮转,核心生产凭证按周轮转,留存轮转日志,杜绝永久有效凭证。

8.5 依赖安全常态化扫描

将供应链安全扫描纳入CI门禁,构建前强制检测恶意版本、高危依赖、间接投毒风险,扫描不通过直接阻断构建发布。


9. 事件终极复盘与行业前瞻性思考

LitellM本次40分钟极速投毒事件,标志着软件供应链攻击进入全新阶段。以往攻击者主攻外网入口、业务漏洞,现在攻击重心全面下沉至底层工具链、依赖生态、自动化流水线

AI行业的快速迭代,让企业对开源依赖的依赖度达到顶峰。绝大多数AI业务从零搭建完全依托开源网关、开源模型、开源框架,供应链节点极多、链路极长,任何一个上游节点沦陷,都会引发全域风险。

更关键的是,这类攻击的隐蔽性会持续升级。后续攻击者会持续利用.pth、环境变量、缓存劫持等隐形机制制作后门,规避常规安全扫描,短暂投毒窗口、静默数据窃取、长期权限驻留会成为供应链攻击的主流模式。

企业传统的边界防御、漏洞扫描、病毒查杀体系,已经完全无法适配新型供应链风险。安全防护必须从“事后应急”转向“事前信任校验、事中实时监测、事后闭环溯源”,彻底打破对开源工具、第三方依赖的无条件信任。


互动讨论

1. 你的企业CI流水线是否还在使用 latest 动态版本的安全扫描工具、第三方Action?

2. 你在日常运维中,是否遇到过Python依赖间接投毒、隐性后门的安全风险?欢迎在评论区分享你的排查和加固经验。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 23:01:02

基于MiniCPM5-1B构建本地GMGN研究智能体:轻量化AI的垂直领域实践

最近在尝试把一些行业研究、市场分析、竞品调研这类工作自动化时&#xff0c;我发现了一个挺有意思的现象&#xff1a;很多开发者&#xff0c;包括我自己&#xff0c;一开始都奔着那些动辄几十上百亿参数的“明星模型”去&#xff0c;总觉得参数越大&#xff0c;能力越强&#…

作者头像 李华
网站建设 2026/8/15 22:59:17

52-综合实战线上调优全流程

52 | 综合实战:从线上问题定位到性能调优全流程 模块十二:综合实战 第 2 篇 前面五十多篇我们拆解了无数个知识点,但真实的生产环境从来不会单独考你某个知识点——它是一次综合考验。一个线上故障往往牵一发而动全身:CPU 飙高可能是 GC 频繁导致的,GC 频繁可能是内存泄漏…

作者头像 李华
网站建设 2026/8/15 22:49:07

数学建模实战指南:从思维转变到72小时高效备赛与论文写作

1. 从“解题”到“建模”&#xff1a;我的认知转变与实战起点 刚接触数学建模那会儿&#xff0c;我和大多数人一样&#xff0c;觉得这就是一个“升级版的数学应用题”。给你一个问题&#xff0c;套个公式&#xff0c;算个答案&#xff0c;交差完事。直到第一次参加正式比赛&…

作者头像 李华
网站建设 2026/8/15 22:41:21

Python csv.reader() 核心原理与实战:从编码乱码到海量数据处理

1. 项目概述&#xff1a;为什么csv.reader()是数据处理的第一道坎如果你用Python处理过数据&#xff0c;尤其是从各种系统导出的表格数据&#xff0c;那么对CSV文件一定不陌生。它看起来简单&#xff0c;就是一堆用逗号分隔的文本&#xff0c;但真上手处理时&#xff0c;坑却不…

作者头像 李华
网站建设 2026/8/15 22:35:59

AI图像生成实战:从提示词工程到环境配置,探索可灵AI创作神秘之地

1. 先搞清楚“可灵AI”到底能做什么&#xff0c;以及它和“神秘之地”的关系看到“可灵AI展示无人知晓的神秘之地”这个标题&#xff0c;很多人第一反应可能是AI生成了一些奇幻或虚构的地理场景。但根据我接触过的各类AI图像、视频生成工具的经验&#xff0c;这个标题更可能指向…

作者头像 李华
网站建设 2026/8/15 22:34:54

群晖NAS通过虚拟机稳定同步115网盘:架构、部署与优化指南

1. 为什么要在群晖上折腾虚拟机来同步115网盘&#xff1f;如果你和我一样&#xff0c;手头有一台群晖NAS&#xff0c;同时又重度依赖115网盘来存放海量的影视、学习资料&#xff0c;那你大概率也动过让它们俩“牵手成功”的念头。毕竟&#xff0c;一边是本地高速、私密的存储中…

作者头像 李华