腾讯云安全中心监测到,LiteLLM 被披露其存在供应链投毒风险。可导致攻击者窃取系统环境变量、云厂商及 K8s 凭据、SSH 密钥、Git 配置、Shell 历史、SSL 私钥及加密钱包等高度敏感信息。
为避免您的业务受影响,腾讯云安全建议您及时开展安全自查,如在受影响范围,请您及时进行更新修复,避免被外部攻击者入侵。
风险详情
LiteLLM 是一个开源库,旨在简化 LLM 完成和嵌入调用。它集成了 Azure、Anthropic、OpenAI、Cohere 和 Replicate 等多个平台的 API,让用户可以使用一个函数轻松调用它们。LiteLLM 提供了方便的接口和一致的输出格式,使得使用 LLM 模型变得更加简单。它可以用于各种场景,如自然语言处理、文本生成、对话系统等。
据描述,在 LiteLLM 组件 1.82.7 及 1.82.8 版本中,由于攻击者利用 Python 的 .pth 文件启动即执行机制,在 littellm_init.pth 中植入经过多层 Base64 编码的混淆恶意代码,并将恶意代码隐藏于 littellm/proxy/proxy_server.py 文件中,导致 Python 解释器启动时便会静默执行该恶意逻辑,恶意代码通过收集系统环境变量、SSH 密钥、AWS/Azure/GCP 云厂商凭据、K8s/Docker 凭据、Git 配置、shell 历史、SSL 私钥及加密钱包等敏感信息,经 RSA 加密后外传至攻击者控制的服务器 https://models[.]litellm[.]cloud。
注:任何依赖 LiteLLM 的项目都会受到该供应链风险的影响,直接依赖 LiteLLM 的知名框架有(CrewAI、DSPy、Giskard、Google ADK、PydanticAI、Agent Lightning/Hermes-agent 及 LangGraph 等)
风险等级
高风险
影响版本
LiteLLM == 1.82.7
LiteLLM == 1.82.8
litellm (pip) == 1.82.7
litellm (pip) == 1.82.8
安全版本
LiteLLM <= 1.82.6
LiteLLM > 1.82.8
litellm (pip) <= 1.82.6
litellm (pip) > 1.82.8
排查方法
1. 检查受影响的软件版本
pip show litellm | grep Version
判断标准:如果输出的版本号是 1.82.7 或 1.82.8,则表示您已安装了恶意软件包,系统应被视为已被入侵。即使没有主动运行应用代码,恶意代码也会在 pip install 过程中执行。
2. 检查本地持久化残留物
(1) 检查后门文件:
ls -la ~/.config/sysmon/sysmon.py 2>/dev/null && echo "BACKDOOR FOUND"
ls -la /root/.config/sysmon/sysmon.py 2>/dev/null && echo "ROOT BACKDOOR FOUND"
(2) 检查 Systemd 服务:
systemctl --user status sysmon.service 2>/dev/null
ls -la ~/.config/systemd/user/sysmon.service 2>/dev/null && echo "PERSISTENCE SERVICE FOUND"
(3) 检查外传过程中的临时文件:
ls /tmp/tpcp.tar.gz /tmp/session.key /tmp/payload.enc /tmp/session.key.enc 2>/dev/null && echo "EXFIL ARTIFACTS FOUND"
3. 检查恶意 .pth 文件
对于 1.82.8 版本,恶意代码通过 site-packages 目录下的 .pth 文件加载。
find $(python3 -c "import site; print(' '.join(site.getsitepackages()))") -name "*.pth" -exec grep -l "base64\|subprocess\|exec" {} \;
判断标准:任何输出结果都应视为高度可疑。合法的 .pth 文件通常只包含目录路径,而不包含代码。
4. 检查文件哈希值
(1) 检查 litellm/proxy/proxy_server.py 文件 (版本 1.82.7):
find / -path "*/litellm/proxy/proxy_server.py" 2>/dev/null -exec shasum -a 256 {} \;
恶意 SHA256:a0d229be8efcb2f9135e2ad55ba275b76ddcfeb55fa4370e0a522a5bdee0120b
(2) 检查 litellm_init.pth 文件 (版本 1.82.8):
find / -name "litellm_init.pth" 2>/dev/null -exec shasum -a 256 {} \;
恶意 SHA256:71e35aef03099cd1f2d6446734273025a163597de93912df321ef118bf135238
5. 检查网络指示器
数据外传目标:https://models[.]litellm[.]cloud/
命令与控制 (C2) 服务器:https://checkmarx[.]zone/raw
6. 检查 Kubernetes 环境
kubectl get pods -A | grep "node-setup-"
判断标准:在 kube-system 命名空间中发现名称模式为 node-setup-{node_name} 的 Pod,表示攻击者已成功创建特权 Pod 并可能入侵了对应节点。
修复建议
1. 立即隔离受感染系统、卸载恶意版本及清理缓存
(1) 在进行任何其他操作之前,将受影响的机器从网络中隔离,以防止 C2 agent 接收新的指令或外传更多数据。
(2) 卸载恶意的 LiteLLM 版本:
pip uninstall litellm -y
(3) 清理残留的恶意文件:
# 查找并删除 litellm_init.pth
find $(python3 -c "import site; print(' '.join(site.getsitepackages()))") -name "litellm_init.pth" -exec rm -f {} \;
# 查找并删除可能残留的恶意 proxy_server.py
find $(python3 -c "import site; print(' '.join(site.getsitepackages()))") -path "*/litellm/proxy/proxy_server.py" -exec rm -f {} \;
(4) 清理 Python 缓存:
# 清除 pip 的下载缓存
pip cache purge
#
# 清除 pip 构建缓存
rm -rf ~/.cache/pip/build/*
rm -rf /tmp/pip-build-*
rm -rf /tmp/pip-install-*
2. 清除持久化残留
(1) 删除攻击者植入的后门文件和服务:
rm -f ~/.config/sysmon/sysmon.py
rm -f ~/.config/systemd/user/sysmon.service
systemctl --user disable sysmon.service 2>/dev/null
systemctl --user daemon-reload
(2) 清理临时文件:
rm -f /tmp/tpcp.tar.gz /tmp/session.key /tmp/payload.enc /tmp/session.key.enc /tmp/.pg_state /tmp/pglog
3. 轮换所有凭证
(1) 及时轮换 SSH 密钥、API 密钥和令牌、数据库凭证及加密货币钱包
(2) 检查攻击者是否通过窃取的 Kubernetes 凭证进行了更深层次的操作,及时轮换所有命名空间中的 secrets,并重新创建节点和所有相关服务
kubectl get pods -n kube-system | grep node-setup-
kubectl delete pod -n kube-system -l <选择器> # 删除所有恶意Pod
4. 安装安全版本
如果仍需使用 LiteLLM,请立即回滚到安全版本。
pip install litellm==1.82.6
【备注】:建议您在升级前做好数据备份工作,避免出现意外
参考链接