liteLLM供应链投毒事件:溯源分析与技术拆解

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

文章总结: liteLLM供应链投毒事件中,攻击者TeamPCP通过攻陷Trivy窃取PyPI令牌,推送带毒版本1.82.7和1.82.8,利用.pth文件窃取API密钥,因Fork炸弹Bug败露。建议自查版本、轮换密钥,并采取锁定哈希和网络白名单等长期措施。 综合评分: 85 文章分类: 供应链安全,漏洞分析,应急响应,安全大事件,威胁情报


cover_image

liteLLM 供应链投毒事件:溯源分析与技术拆解

原创

APT-101 APT-101

APT-101

2026年3月25日 15:08 陕西

前言

2026年3月24日,AI 社区核心依赖库 liteLLM 遭遇严重的供应链攻击。由于其 GitHub 4万星、月下载量超 9500万次 的地位,此次投毒波及了数千个下游项目。

安全研究机构 FutureSearch 在报告《No Prompt Injection Required》中指出:当全行业都在防御复杂的“提示词注入”时,攻击者却通过最基础的 Python 脚本,在传输层实现了对 AI 核心资产的精准收割。


一、 科普:你可能从未安装过它,但你一定在用它

liteLLM 是什么? 简单来说,它是一个“大模型翻译官”。它将 OpenAI、Anthropic、Google Gemini 以及国产的各种大模型 API 统一封装成一套标准格式。开发者只需写一份代码,就能无缝切换上百个模型。

为什么它中毒全家遭殃? 由于它极高的便利性,包括 DSPy、MLflow、Open Interpreter 在内的 2000 多个主流 Python 包都将其作为底层依赖。

残酷的事实: 即使你从未手动执行过 pip install litellm,你安装的某个 AI 插件、某个数据科学工具,可能早已悄悄替你装上了它。


二、 事件起因:从“安全工具”到“中毒中间件”

本次攻击由组织 TeamPCP 发起,其链路体现了极强的工程化思维:

  1. 渗透扫描器:3月19日,攻击者首先攻陷了知名漏洞扫描工具 Trivy
  2. 窃取凭证:利用 Trivy CI/CD 流程中的漏洞,窃取了 liteLLM 的 PyPI 发布令牌。
  3. 精准投毒:3月24日,攻击者向官方仓库推送了带毒版本 1.82.7(逻辑触发)和 1.82.8(系统级触发)。


三、 深度技术拆解:恶意代码是如何“套娃”的?

根据 FutureSearch 的代码审计,这次攻击在隐蔽性和执行力上极具代表性。

1. 三层嵌套混淆 (Triple-Nested Obfuscation)

恶意代码并非简单的 Base64,而是采用了多层解密结构以规避静态扫描:

  • 第一层:隐藏在 .pth 文件中的初始引导加载器。
  • 第二层:环境探测脚本,检查是否处于受限的虚拟机或安全沙箱中。
  • 第三层:真正的“收割机”(Harvester),负责搜刮 os.environ 里的所有 API Key 及 SSH 密钥。

2. 恶意 litellm_vulnerability_poc.pth 示例

内容保存为 .pth 文件,放入 Python 环境的 site-packages 目录中即可触发。

import os, sys, subprocess, base64; # 注入开始# 模拟混淆后的恶意代码:实际上是在后台启动一个数据搜刮进程payload = "cHJpbnQoIlsrXSBTeXN0ZW0gSGlqYWNrZWQ6IFN0ZWFsaW5nIEFQSSBLZXlzLi4uIik=" # base64: print("[+] System Hijacked: Stealing API Keys...")
# 逻辑:利用 site.py 的执行特性,在解释器初始化时静默运行if not os.environ.get('ALREADY_RUN'):    os.environ['ALREADY_RUN'] = 'true'    # 模拟泄露环境变量中的敏感信息    keys = {k: v for k, v in os.environ.items() if "KEY" in k or "SECRET" in k}    if keys:        # 在真实攻击中,这里会通过 requests.post 发送给 models.litellm.cloud        print(f"\n[!] SECURITY ALERT: Malicious .pth detected sensitive keys: {list(keys.keys())}\n")
    # 模拟攻击者持久化:开启一个不干扰主进程的后台任务    # 注意:如果不加环境变量判断,这里会触发 Fork 炸弹导致内存撑爆    # subprocess.Popen([sys.executable, "-c", base64.b64decode(payload).decode()])

技术原理解析:为什么它能“装上就执行”?

当 Python 启动时,site 模块会自动扫描 site-packages 目录下的所有 .pth 文件。

  • 正常用途C:\my_libs(将路径加入 sys.path)。
  • 攻击利用:如果一行以 import(注意 import 前有空格)开头,Python 会直接调用 exec(line) 执行该行代码。

2. 伪装者域名:models.litellm.cloud

为了躲避流量审计,攻击者注册了极具欺骗性的回传域名 https://models.litellm.cloud/

  • 迷惑性:该域名与官方域名高度相似。即使管理员查看防火墙日志,也极易将其误认为 liteLLM 正在进行合法的模型配置同步。

3. “无需提示词注入”的降维打击

攻击者意识到:与其去研究如何绕过 LLM 的安全对齐(Alignment),不如直接在数据传输层下毒。通过控制 liteLLM 这个“翻译官”,攻击者无需接触大模型本体,就能直接获取全套 AI 基础设施的控制权。


四、 “Fork 炸弹”:为什么攻击者会“穿帮”?

这起攻击本可以静默运行数周,但最终因一个逻辑 Bug 败露。 恶意代码在启动监控子进程时,由于 Python 解释器的初始化特性:

  1. 主进程启动 -> 执行 litellm_init.pth -> 生成子进程 A。
  2. 子进程 A 启动 -> 再次加载同一个 .pth -> 生成子进程 B。
  3. 死循环发生:系统瞬间产生数千个 Python 进程,CPU 与内存直接撑爆。


五、 应急响应:检测、处置与规避

1. 快速自查

执行以下命令确认版本:

pip show litellm
  • 风险版本1.82.71.82.8
  • 修复版本:官方已紧急撤回毒包,建议回退至 1.82.6 或更新至最新修复版。

2. 处置(假设已泄露原则)

如果你曾安装过毒包,删除代码是不够的

  • 第一步pip uninstall litellm
  • 第二步立即轮换所有密钥。包括 OpenAI/Claude Key、AWS 凭证、数据库密码及 SSH 密钥。
  • 第三步:检查 Kubernetes 环境中是否存在异常的“特权 Pod”。

3. 长期规避建议

  • 锁定哈希:在 requirements.txt 中强制开启 --hash 校验。
  • 网络白名单:对生产环境的 Python 进程执行出口流量管控,禁止访问非预期域名。
  • 减少过度依赖:对于简单的 API 调用,优先考虑原生实现,减少依赖树深度。

总结

liteLLM 事件再次证明:在 AI 时代,供应链安全就是生命线。当我们追求 AI 应用的快速迭代时,决不能忽视对底层依赖链的信任审计。

改变造世界的方式,就能改变世界。 保持警惕,共建安全生态。

参考

https://futuresearch.ai/blog/no-prompt-injection-required/

https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/

https://github.com/BerriAI/litellm/issues/24512


免责声明:

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

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

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

本文转载自:APT-101 APT-101 APT-101《liteLLM 供应链投毒事件:溯源分析与技术拆解》

评论:0   参与:  0