开发者注意!Litellm遭遇供应链攻击 火绒已可全面拦截
-
作者:火绒安全
-
发布时间:2026-03-25
-
阅读量:580
火绒安全团队于2026年3月24日发现并捕获了针对Python开源组件Litellm的恶意供应链攻击事件,本次攻击通过在组件安装包中植入恶意代码实现攻击,影响范围广泛,风险等级极高。目前,火绒安全产品可对上述被污染模块进行查杀、拦截。

查杀图

拦截图

拦截图
一、事件概述

二、攻击者
TeamPCP — 同期发起了多起供应链攻击(来源:[Endor Labs](参考链接1),[Wiz](参考链接2)):
- 2026-03-19: Trivy (Aqua Security) 漏洞扫描器
- 2026-03-23: Checkmarx KICS GitHub Action
- 2026-03-24: Litellm
三、影响范围
Litellm是AI基础设施的核心组件:
- 统一接口:提供100+LLM providers的OpenAI兼容接口
- API Gateway:企业级LLM代理服务
- 月下载量 ~9500 万,GitHub Stars ~4 万(来源:[GitHub](参考链接3)、[Endor Labs](参考链接4))
受影响场景(来源:[GitHub Issue #24512](参考链接5)):
- 本地开发机器
- CI/CD 流水线
- Docker 容器
- 生产服务器
- Litellm Proxy 用户(风险最高):持有所有 LLM provider 的 API keys
四、恶意代码位置
1.82.7版本(来源:[Endor Labs](参考链接6))
- 文件:`litellm/proxy/proxy_server.py` 第 128-139 行
- 注入方式:12行base64混淆代码插入在REALTIME_REQUEST_SCOPE_TEMPLATE字典和showwarning函数之间
- 触发方式:import litellm 时执行
- GitHub 源码对应位置不含恶意代码,注入发生在wheel构建/发布阶段
1.82.8版本(更危险)(来源:[GitHub Issue #24512](参考链接7),[Endor Labs](参考链接8),[FutureSearch](参考链接9))
- 文件 1:litellm/proxy/proxy_server.py(同 1.82.7,payload 在第 130 行)
- 文件 2:litellm_init.pth(34,628 bytes)
- 触发方式:任何Python启动自动执行,无需import
- 绕过 GitHub release:未打tag,直发PyPI
- 附带 bug:.pth的subprocess.Popen 会触发子进程再次执行 .pth,形成指数级 fork bomb,曾导致中招机器崩溃(来源:[FutureSearch](参考链接10))
五、技术分析:三阶段攻击
Stage 1: 信息收集
目标列表(332行Python代码,来源:[Endor Labs](参考链接11)):
- 系统信息:hostname, whoami, uname, IP, route
- 环境变量:printenv(所有 API keys、secrets、tokens)
- SSH keys:id_rsa, id_ed25519, id_ecdsa, id_dsa, authorized_keys, known_hosts, config
- Git 凭据:.gitconfig, .git-credentials
- 云凭证:
- AWS: ~/.aws/credentials, IMDS role credentials, Secrets Manager, SSM
- GCP: application_default_credentials.json, gcloud configs
- Azure: ~/.azure/ 目录树
- Kubernetes: ~/.kube/config, /etc/kubernetes/*.conf, 全 namespace secrets
- Docker configs:~/.docker/config.json
- 数据库:.pgpass, my.cnf, redis.conf, .mongorc.js
- 加密货币:Bitcoin (wallet.dat), Ethereum keystores, Solana validator keypairs, Cardano signing/verification keys, Litecoin, Dogecoin, Zcash, Dash, Monero, Ripple + 各币种 config 文件
- SSL/TLS 私钥:/etc/ssl/private/,Let's Encrypt .pem 和 .key 文件
- CI/CD:terraform.tfvars, .gitlab-ci.yml, Jenkinsfile, .drone.yml
- Shell 历史:bash, zsh, mysql, postgres, redis
- .env 文件:递归搜索 /home, /root, /opt, /srv, /var/www, /app, /data 等目录,深度 6 层
Stage 2: 加密与外泄
(来源:[GitHub Issue #24512](参考链接12),[Endor Labs](参考链接13))
1. 收集数据 → 临时文件
2. openssl rand → 生成 32-byte AES-256 session key
3. openssl enc -aes-256-cbc -pbkdf2 → 加密数据
4. openssl pkeyutl -encrypt → 用 RSA-4096 公钥加密 AES key
5. 打包为 tpcp.tar.gz
6. POST 到 https://models.litellm.cloud/(注意:非 litellm.ai 官方域名)
Stage 3: 持久化与横向移动
(来源:[Endor Labs](参考链接14),[FutureSearch](参考链接15))
本地持久化:
- 后门:`~/.config/sysmon/sysmon.py`
- 服务:`~/.config/systemd/user/sysmon.service`
- 显示名:"System Telemetry Service"
- C2:`https://checkmarx.zone/raw`(每 50 分钟轮询,time.sleep(3000))
- Kill switch:响应包含 "youtube.com" 则停止
- 初始延迟:5 分钟(time.sleep(300))
- 二进制路径:/tmp/pglog(伪装成 PostgreSQL 进程)
Kubernetes 横向移动:
- 检测到 /var/run/secrets/kubernetes.io/serviceaccount/token 时触发
- 枚举集群所有节点
- 每个节点创建 privileged alpine:latest pod
- Pod 名称:`node-setup-{node_name}`
- 部署到 kube-system namespace
- 请求 hostPID、hostNetwork,privileged: true
- 挂载整个 host 根文件系统到 /host
- Pod 内 chroot 到 host 并安装同样的持久化后门
六、C2 服务器
(来源:[Endor Labs](参考链接16))

七、IOC 指标
文件(来源:[GitHub Issue #24512](参考链接17))

持久化路径(来源:[Endor Labs](参考链接18),[FutureSearch](参考链接19))
- 本地:`~/.config/sysmon/sysmon.py` + `~/.config/systemd/user/sysmon.service`
- Kubernetes Pod 内:`/root/.config/sysmon/sysmon.py`(chroot 后安装)
- `/tmp/.pg_state`(状态文件)
- `/tmp/pglog`(C2 下载的二进制)
八、修复步骤
1. 检查
```bash
pip show litellm | grep Version
find ~/.local -name "litellm_init.pth" 2>/dev/null
find / -name "sysmon.py" 2>/dev/null
```
2. 清除
```bash
pip uninstall litellm -y
find $(python3 -c "import site; print(':'.join(site.getsitepackages()))") \
-name "litellm_init.pth" -delete 2>/dev/null
rm -rf ~/.config/sysmon/
pip cache purge
rm -rf ~/.cache/uv
```
3. 降级
```bash
pip install litellm==1.82.6
```
4. 轮换凭据(必须)
- 所有 LLM API keys
- SSH keys
- 云服务凭据
- 数据库密码
- Kubernetes configs
九、防范建议
1. 锁定版本:`litellm>=1.82.0,<1.82.7`
2. 使用 lock文件
3. 定期审计pth文件:任何 >1KB 的 .pth 文件都可疑
4. 启用PyPI安全通知
5. 网络层拦截:阻止对 models.litellm.cloud 和 checkmarx.zone 的出站连接
6. 源码 vs wheel 比对:PyPI wheel 的 SHA256 应与源码构建产物一致
综上所述,此次攻击事件不同于常规恶意程序的单点破坏,它可直接锚定企业AI业务的核心枢纽,借助开源组件的超高普及率实现大范围触达,能批量窃取企业核心的大模型API密钥、云服务凭证、集群配置等核心资产,造成不可逆损失。同时,本次事件也暴露了当前AI开源生态中供应链安全防护的核心短板——攻击者通过安装包构建环节的代码注入,能绕过常规的源码审计,触达数千万终端与服务器,其隐蔽性、扩散性与破坏性,远高于常规网络攻击。
火绒安全在此提醒广大用户:及时更新火绒安全软件病毒库并开启实时防护,切勿使用来源不明的组件安装包;日常开发与运维中,严格锁定开源依赖的安全版本,做好依赖包的完整性校验,杜绝盲目更新未经安全审计的版本;核心业务场景需定期轮换各类密钥与凭证,落实最小权限管控,建立常态化的开源组件安全审计机制,从源头筑牢供应链攻击的防护防线。
参考资料:
参考链接1:https://www.endorlabs.com/learn/teampcp-isnt-done
参考链接2:https://www.wiz.io/blog/teampcp-attack-kics-github-action
参考链接3:https://github.com/BerriAI/litellm
参考链接4:https://www.endorlabs.com/learn/teampcp-isnt-done)
参考链接5:https://github.com/BerriAI/litellm/issues/24512
参考链接6:https://www.endorlabs.com/learn/teampcp-isnt-done
参考链接7:https://github.com/BerriAI/litellm/issues/24512
参考链接8:https://www.endorlabs.com/learn/teampcp-isnt-done
参考链接9:https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/
参考链接10:https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/
参考链接11:https://www.endorlabs.com/learn/teampcp-isnt-done
参考链接12:https://github.com/BerriAI/litellm/issues/24512
参考链接13:https://www.endorlabs.com/learn/teampcp-isnt-done
参考链接14:https://www.endorlabs.com/learn/teampcp-isnt-done
参考链接15:https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/
参考链接16:https://www.endorlabs.com/learn/teampcp-isnt-done
参考链接17:https://github.com/BerriAI/litellm/issues/24512
参考链接18:https://www.endorlabs.com/learn/teampcp-isnt-done
参考链接19:https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/