LiteLLM供应链攻击 — AI基础设施依赖的安全盲区

LiteLLM供应链攻击 — AI基础设施依赖的安全盲区

分析PyPI上发生的LiteLLM供应链攻击,整理在AI工具链中加强依赖管理和供应链安全的实战方法。

3月24日,在PyPI上发布的LiteLLM 1.82.7和1.82.8版本中发现了后门。LiteLLM是一个日下载量达340万的LLM代理库,安装在36%的云环境中。攻击者先感染了安全扫描器Trivy,然后通过该扫描器在CI/CD管道中污染了LiteLLM的构建。

我们信任的安全工具本身竟然成了感染途径,这一点相当令人震惊。

攻击链分析

这次攻击由一个名为TeamPCP的组织执行,分为三个阶段。

第1阶段:安全扫描器感染

首先针对Aqua Security的Trivy(容器漏洞扫描器)进行攻击。通过Trivy的GitHub Actions工作流将恶意代码注入CI/CD管道。由于LiteLLM的发布管道使用Trivy作为安全验证步骤,安全验证本身就成了感染向量。

第2阶段:包污染

通过被感染的CI/CD,在LiteLLM包中插入了.pth文件。Python的.pth文件如果存在于site-packages目录中,会在Python进程启动时自动执行。也就是说,即使不执行import litellm,只要在同一环境中运行任何Python脚本,恶意代码就会运行。

.pth文件原本用于包路径配置,但存在允许任意代码执行的结构性漏洞。大多数安全扫描器只检查.py文件而不检查.pth——攻击者巧妙地利用了这个盲区。

第3阶段:三重载荷

执行后,依次进行三个操作:

阶段行为目的
凭证收集收集AWS、GCP、Azure认证信息窃取云资源
K8s横向移动在Kubernetes集群内向其他节点扩散扩大攻击范围
systemd后门安装持久化systemd服务重启后仍然存在

暴露时间约为3小时。看起来可能很短,但在日下载量340万的规模下,3小时内可能已有数千个环境被感染。

为什么AI工具链特别危险

我认为这一事件对AI/LLM生态系统特别危险,有其具体原因。

依赖链深且广。 与普通Web应用不同,AI项目的requirements.txt包含数十个ML库。仅LiteLLM就依赖OpenAI、Anthropic、Google、Cohere等数十个提供商的SDK。一个被感染,传播范围就很广。

更新周期快。 AI库的API变更频繁,导致开发者经常执行pip install --upgrade。每次新模型发布就更新SDK的习惯扩大了攻击面。

生产环境的高权限。 LLM代理服务器大多将云API密钥作为环境变量。AWS、GCP和各种AI提供商的密钥集中在一个地方,对攻击者来说简直是金矿。

实战应对方法

比起理论性的讨论,这里整理了可以立即应用的方法。

1. 版本锁定 + 哈希验证

# 在requirements.txt中同时固定哈希
litellm==1.82.6 \
  --hash=sha256:abc123...

# 可以用pip-compile自动生成
pip-compile --generate-hashes requirements.in

>=1.82.0这样的范围指定会直接暴露于此类攻击。需要同时固定精确版本和哈希。

2. .pth文件监控

在CI/CD管道中添加在包安装前后对比.pth文件diff的步骤很有效。如果site-packages目录中出现意外的.pth文件,应立即发出告警。

# site-packages中.pth文件列表的快照比较
diff <(cat /tmp/pth-before.txt) \
     <(find "$(python -c 'import site; print(site.getsitepackages()[0])')" \
       -name "*.pth" | sort)

3. 安全工具也是验证对象

这次事件最痛苦的教训是”我们信任了安全扫描器,结果它就是感染向量”。Trivy、Snyk、Checkmarx等安全工具的GitHub Actions版本也应该基于哈希固定。

# Bad: 基于标签(可被篡改)
- uses: aquasecurity/trivy-action@latest

# Good: 基于提交哈希
- uses: aquasecurity/trivy-action@a7b7e23e4a1e36c8a6a1b8c0a1d2e3f4a5b6c7d8

4. 网络隔离

如果LLM代理服务器可以打开对外的出站连接,凭证泄露就成为可能。在生产环境中,最好只以白名单方式开放已批准的AI API端点。

警惕过度解读

需要注意一点:不要将此事件过度解读为”不应该使用AI库”。供应链攻击不是AI独有的问题,从npm(event-stream事件)、PyPI(ctx包)到SolarWinds,这是整个软件生态系统的问题。但AI工具链由于高权限+快速更新周期+深层依赖的组合,攻击价值更高,这一点需要认识到。

就个人而言,这次事件之后,我们团队开始将CI/CD管道中所有外部Action切换为基于哈希的方式。说实话很麻烦,但想到一个.pth文件就能让所有云密钥被窃取的场景,没有理由不做。


参考资料:

阅读其他语言版本

这篇文章有帮助吗?

您的支持能帮助我创作更好的内容。请我喝杯咖啡吧!☕

关于作者

JK

Kim Jangwook

AI/LLM专业全栈开发者

凭借10年以上的Web开发经验,构建AI代理系统、LLM应用程序和自动化解决方案。分享Claude Code、MCP和RAG系统的实践经验。