LiteLLM供应链投毒深度分析:从TeamPCP连环攻击到全生态沦陷判

admin 2026-03-30 00:01:09 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 2026年3月LiteLLM遭遇供应链投毒,攻击者TeamPCP利用窃取凭据发布恶意版本,通过.pth文件实现隐蔽执行,窃取云凭据、GitHub令牌等敏感信息,并可在Kubernetes集群横向移动。该攻击是5天内针对Trivy、npm、Checkmarx等生态连续攻击的一环,影响月下载量9500万次及多个主流AI框架。文章详细分析了五阶段攻击流程、加密外泄与持久化机制,建议从快速响应转向预防性控制、内部镜像与沙箱隔离。 综合评分: 93 文章分类: 供应链安全,恶意软件,漏洞分析,AI安全,安全建设


cover_image

LiteLLM 供应链投毒深度分析:从 TeamPCP 连环攻击到全生态沦陷判

原创

天元实验室 天元实验室

M01N Team

2026年3月26日 18:00 北京

概述

2026年3月24日,Python生态中主流的LLM网关软件LiteLLM遭遇供应链投毒攻击。攻击者TeamPCP利用窃取的官方仓库账号权限,在约4小时的窗口期内恶意发布了两个高危版本。此次攻击是该组织针对全球关键开发生态系统(包括Trivy、npm、Checkmarx、OpenVSX和PyPI)连续5天渗透行动的最新一环,影响范围已从基础软件开发延伸至AI应用安全等多个核心领域。

作为集成100余种大语言模型服务的统一接口,LiteLLM已成为AI应用开发的基础设施。其不仅月下载量高达9500万次,更被CrewAI、DSPy、Browser-Use及Mem0等主流AI框架深度依赖。这种广泛的渗透率意味着底层漏洞将产生剧烈的连锁反应:攻击者不仅能通过恶意代码窃取AWS云凭据、GitHub令牌、Kubernetes集群权限及加密货币钱包,还能以此为跳板横向渗透至CI/CD流水线与生产服务器,波及全球数百万开发者及企业用户。此事件极具破坏性,堪称AI时代供应链攻击的典型案例。

01 攻击时间线

3月19日:Trivy 沦陷

攻击者使用窃取的凭据发布 Trivy v0.69.4 恶意版本,强制推送 aquasecurity/trivy-action 的 76 个标签,并替换 aquasecurity/setup-trivy 的所有标签。恶意代码从 GitHub Runner 内存中提取凭据,加密后外泄到 scan.aquasecurtiy[.]org(仿冒域名)。

3月20-22日:npm 蠕虫传播

攻击者部署自传播 npm 蠕虫 “CanisterWorm”,自动窃取 npm token、识别可发布包、修改版本号后重新发布。涉及 @EmilGroup(28 个包)、@opengov(16 个包)等多个组织域。针对伊朗系统的破坏性路径会删除主机文件系统。

3月23日:Checkmarx 和 OpenVSX

同样的攻击模式扩展到 Checkmarx/kics-github-action、Checkmarx/ast-github-action,以及 OpenVSX 扩展 ast-results (v2.53.0) 和 cx-dev-assist (v1.7.0)。

3月24日:LiteLLM 投毒

攻击者利用从 Trivy 攻击中获取的 CI/CD 凭据,入侵 LiteLLM 联合创始人 Krish Dholakia 的 GitHub 和 PyPI 账户,绕过官方发布流程直接向 PyPI 上传恶意包。

02 技术分析

2.1 攻击向量

LiteLLM 投毒事件的一个关键特征是攻击者未使用伪造包或拼写抢注,而是成功入侵了真实项目的 PyPI 发布权限。

入侵路径推测:

  1. 3月19日 Trivy 攻击窃取了 GitHub Actions 凭据
  2. 凭据可能被用于访问其他组织的 CI/CD 流程
  3. 通过 LiteLLM CEO 的账户绕过官方 CI/CD 直接发布到 PyPI

2.2 恶意载荷分析

两版本采用不同的触发机制:

版本 1.82.7:恶意代码注入到 litellm/proxy/proxy_server.py,仅在 import litellm.proxy 时触发。

版本 1.82.8:新增 litellm_init.pth 文件,利用 Python site 模块在解释器启动时自动执行 .pth 文件中的可执行代码。这意味着只要安装了该包,任何 Python 进程启动都会触发恶意载荷,无需显式导入 LiteLLM。

2.3 攻击流程

恶意载荷采用三阶段架构,每个阶段独立执行特定功能,可被攻击者远程更新和扩展。

阶段一:触发执行

技术亮点:v1.82.8 引入的 .pth 文件攻击方式极为隐蔽。

为什么 .pth 文件更危险?

Python 的 site 模块在解释器启动时会自动处理 site-packages 目录下的 .pth 文件。如果 .pth 文件包含可执行代码(以 import 开头),这些代码会在任何 Python 程序启动时自动运行——即使用户从未显式导入 LiteLLM。这意味着:

  • 开发者只是运行 python manage.py 或启动任意 Python 脚本,恶意代码就会执行
  • 可以感染开发环境、CI/CD runner、生产服务器——任何安装了该包的 Python 环境
  • 无需社会工程诱导用户执行特定操作

阶段二:凭据窃取

恶意载荷首先进行大规模凭据收集,覆盖云基础设施、开发工具和加密资产。

关键攻击目标:

| | | | | — | — | — | | 凭据类型 | 收集路径 | 攻击价值 | | AWS 凭据 | ~/.aws/credentials, 环境变量 AWS_* | 可访问云资源、部署恶意基础设施 | | GitHub Token | 环境变量 GITHUB_TOKEN, .env | 可窃取代码、投毒更多仓库 | | K8s Service Account | /var/run/secrets/… | 集群横向移动、特权提升 | | 加密货币钱包 | ~/*wallet*, ~/.bitcoin/* | 直接经济收益 | | Shell 历史 | ~/.bash_history, ~/.zsh_history | 可能包含敏感命令和密码 |

阶段三:加密外泄

攻击者使用混合加密方案,确保即使流量被截获也无法解密。

加密方案设计:

  • 对称层:AES-256-CBC 加密实际数据,效率高、速度快
  • 非对称层:RSA-4096 加密 AES 会话密钥,只有攻击者能解密
  • 密钥管理:RSA 公钥硬编码在恶意代码中,私钥仅攻击者持有

这种设计意味着:

  • 流量分析只能看到加密数据,无法获知窃取了什么
  • 即使发现外泄,也无法确定具体损失范围
  • 攻击者可以”批量”收集数据,再离线解密分析

阶段四:持久化驻留

载荷安装用户级 systemd 服务,确保长期存在并等待后续指令。

持久化技术细节:

Python# sysmon.service 伪装成系统监控服务[Unit]Description=System Monitor Service
[Service]ExecStart=%h/.config/sysmon/sysmon.pyRestart=always
[Install]WantedBy=default.target

驻留脚本会:

  1. 定期轮询 checkmarx.zone/raw 获取指令
  2. 下载并执行 /tmp/pglog 中的任意代码
  3. 使用 /tmp/.pg_state 维护状态,避免重复执行

威胁特征:攻击者可以随时推送新功能——挖矿、勒索软件、更多凭据窃取工具——无需重新感染。

阶段五:Kubernetes 横向移动

当检测到 Kubernetes 环境时,载荷自动创建特权 DaemonSet 实现集群范围感染。

攻击路径:

  1. 检测环境:检查 /var/run/secrets/kubernetes.io/serviceaccount/token
  2. 创建特权 Pod:
  3. 横向移动:DaemonSet 确保每个节点都运行恶意 Pod
  4. 数据窃取:通过 /host 路径访问节点上所有文件,包括其他 Pod 的 secrets

后果:一个被感染的容器可以扩散到整个集群,窃取所有命名空间的 secrets,甚至在集群中部署挖矿或勒索软件。

2.4 加密与外泄

攻击者使用混合加密方案保护窃取的数据:

  1. 对称加密:AES-256-CBC 加密收集的数据
  2. 非对称加密:RSA-4096 加密 AES 会话密钥
  3. 外泄:POST 到 models.litellm[.]cloud,Header X-Filename: tpcp.tar.gz

由于只有攻击者持有 RSA 私钥,即使截获外泄流量也无法解密。

2.5 持久化机制

恶意载荷安装了一个名为 sysmon.service 的用户级 systemd 服务,通过 ~/.config/sysmon/sysmon.py 执行:

  • 轮询 https://checkmarx[.]zone/raw 获取后续指令
  • 下载 /tmp/pglog 并执行
  • 使用 /tmp/.pg_state 维护状态

2.6 Kubernetes 横向移动

载荷检测到 Kubernetes 服务账户 token 时会:

  1. 创建特权 DaemonSet node-setup-*
  2. 挂载主机根文件系统
  3. 在每个节点上部署恶意 Pod
  4. 实现集群范围的横向移动

03 影响范围

3.1 直接依赖

| | | | | — | — | — | | 项目 | 月下载量 | 依赖类型 | | litellm | 95M | – | | CrewAI | 5.9M | 直接依赖 | | Browser-Use | 4.2M | 直接依赖 | | Opik | 3.5M | 直接依赖 | | Mem0 | 2.7M | 直接依赖 | | DSPy | 1.6M | 直接依赖 | | Agno | 1.6M | 直接依赖 | | Guardrails | 233K | 直接依赖 | | Camel-AI | 84K | 直接依赖 |

3.2 时间窗口

  • v1.82.7:10:39 UTC 发布

  • v1.82.8:约 14:00 UTC 发布

  • 下架时间:约 16:00 UTC(全程约 5 小时)

攻击被发现的契机是 Callum McMahon 在使用 Cursor 的 MCP 插件时,litellm 作为传递依赖被安装,导致机器内存耗尽崩溃。如果载荷没有 bug,可能持续数天甚至数周不被发现。

04 安全启示

供应链攻击已成常态

TeamPCP 在 5 天内连续攻击 Trivy、npm 生态、Checkmarx、LiteLLM,展示了凭据窃取 → 横向移动 → 生态扩散的成熟攻击模式。一次入侵可以像多米诺骨牌一样影响整个生态。

.pth 文件攻击面被低估

LiteLLM 1.82.8 的 .pth 文件攻击方式比传统的导入触发更隐蔽,用户可能根本不知道自己运行了被投毒的代码。这是 Python 生态安全审计的盲区。

快速响应并不总是足够

虽然 LiteLLM 官方在约 5 小时内下架了恶意包,但对于已经安装的系统,损害已经造成。防御重点应该从”快速响应”转向”预防性控制”——固定版本、内部镜像、沙箱隔离。

AI 生态是高价值目标

LiteLLM 作为 AI 应用栈的网关层,默认持有多个 LLM 厂商的 API key,还可能接触向量数据库、观测系统、工具集成等敏感资源。一次供应链攻击可以窃取价值显著的 AI 基础设施访问权限。

05 参考链接

[1]Datadog Security Labs: LiteLLM compromised on PyPI: Tracing the March 2026 TeamPCP supply chain campaign

[2]LiteLLM 官方安全公告: Security Update: Suspected Supply Chain Incident

[3]Upwind: LiteLLM Supply Chain Breakdown

[4]Comet: LiteLLM Supply Chain Attack: What Happened, Who’s Affected

[5]ReversingLabs: TeamPCP software supply chain attack spreads to LiteLLM

[6]悬镜安全: 紧急AI投毒情报 | 热门AI模型网关LiteLLM遭受供应链投毒

绿盟科技天元实验室专注于新型实战化攻防对抗技术研究。

研究目标包括:漏洞利用技术、防御绕过技术、攻击隐匿技术、攻击持久化技术等蓝军技术,以及攻击技战术、攻击框架的研究。涵盖Web安全、终端安全、AD安全、云安全等多个技术领域的攻击技术研究,以及工业互联网、车联网等业务场景的攻击技术研究。通过研究攻击对抗技术,从攻击视角提供识别风险的方法和手段,为威胁对抗提供决策支撑。

M01N Team公众号

聚焦高级攻防对抗热点技术

绿盟科技蓝军技术研究战队

官方攻防交流群

网络安全一手资讯

攻防技术答疑解惑

扫码加好友即可拉群


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:M01N Team 天元实验室 天元实验室《LiteLLM 供应链投毒深度分析:从 TeamPCP 连环攻击到全生态沦陷判》

评论:0   参与:  0