首页 网络安全 网安动态 查看内容

紧急通告:每月下载量达9700万次的LiteLLM PyPI遭到供应链攻击!可偷窃SSH和API密钥 . ...

2026-3-26 02:16 |来自: 黑基网 569 0

摘要: 包含恶意代码的LiteLLM(一个流行的AI/LLM代理库)版本 1.82.7 和 1.82.8 被上传到 PyPI,可偷窃泄露SSH密钥、AWS/GCP/Azure信用、Kubernetes配置、git凭证、env vars(所有API密钥)、shell历史、加密钱包、SSL私钥、CI/CD秘密、数据库密码
关键词:LiteLLM, Python, Trivy, Kubernetes, GitHub, LLM, TeamPCP, Shell, CI/CD, base64

2026年3月24日,PyPI 上发现两个版本的 Python 包包含恶意代码。这些包(版本 1.82.7 和 1.82.8)是由名为 TeamPCP 的威胁行为者发布的,他们通过之前攻破 Trivy(LiteLLM CI/CD 流水线中使用的开源安全扫描器)获得了维护者的 PyPI 凭证。恶意版本大约有三小时后,PyPI 将该包隔离。

LiteLLM 每天大约被下载 340 万次。 简单的“pip install litellm”就足以泄露SSH密钥、AWS/GCP/Azure信用、Kubernetes配置、git凭证、env vars(所有API密钥)、shell历史、加密钱包、SSL私钥、CI/CD秘密、数据库密码。你可以认为我没有使用这么命令安装应该没问题吧,错!因为只要你安装了依赖LiteLLM的项目都会自动安装上。

受影响的包裹

litellm(PyPI)

受影响版本

1.82.7, 1.82.8

安全版本

≤ 1.82.6

Snyk ID

首次检测

2026年3月24日 10:39 UTC(1.82:7 上传)

PyPI隔离

\~13:38 UTC,2026年3月24日

攻击者

TeamPCP(也包括:PCPcat、Persy_PCP、ShellForce、DeadCatx3)

攻击向量

供应链:通过被毒害的 Trivy GitHub Action 在 LiteLLM CI/CD 中被泄露的 PyPI 发布者凭证

有效载荷类型

三阶段:凭证采集器 + 加密泄露 + 持久后门 + Kubernetes 蠕虫

外滤域

models.litellm.cloud(注册日期:2026年3月23日)

MITRE AT&CK

T1546.018(Python 启动钩子),T1003(凭证倾销),T1610(部署容器)

它是如何被发现的 FutureSearch的Callum McMahon正在测试一个以传递依赖方式拉入的光标MCP插件。Python 刚开始不久,他的机器因内存耗尽而变得无响应。他追踪到新安装的litellm包,发现了一个34,628字节的文件,双base64编码。litellmlitellm_init.pthsite-packages/ 内存耗尽是载荷的副作用,而非有意设计。每次 Python 解释器启动时,该机制都会触发。因为有效载荷会生成一个新的Python子进程,而这个新进程也会触发执行,结果是一个意外的分支炸弹。麦克马洪在 futuresearch.ai 上发布了他的发现,这一消息在一小时内迅速传播到r/LocalLLaMA、r/Python和Hacker News。.pth.pth 攻击链 对LiteLLM的攻击始于五天前的Trivy。 3月19日:攻击者重写了GitHub Action仓库中的Git标签,指向一个带有后续行动中使用的相同凭证采集和窃取基础设施的恶意发布()。(有关Trivy被攻破的详细信息,请参见Snyk的Trivy GitHub Actions供应链攻破报道。)trivy-actionv0.69.4 3月23日:同一基础设施被用于对Checkmarx KICS(保持基础设施安全)的另一项攻击。冒充Checkmarx安全公司的C2域名在此次行动中注册并激活。checkmarx.zone 3月24日:LiteLLM的CI/CD流水线在构建过程中运行Trivy,从没有固定版本的情况下拉取了它。被攻破的操作从GitHub Actions运行环境中窃取了令牌。利用该凭证,攻击者于10:39 UTC和10:52 UTC发布了1.82.7版本,均包含恶意载荷。

这两个恶意版本使用了不同的注入技术:

1.82.7(源代码注入):有效载荷采用base64编码,直接嵌入其中。它litellm/proxy/proxy_server.py当任何东西导入时执行litellm.proxy,是LiteLLM代理服务器模式的标准导入路径。

1.82.8 (.pth file):本版本新增litellm_init.pth到。该机制在每次 Python 解释器启动时都会触发,无需导入,包括 、 ,或 IDE 语言服务器启动 Python。site-packages/.pthpippython -c

该文件在轮子文件中被正确声明,因此通过了 Pip 的哈希验证。该软件包通过了所有标准的完整性检查,因为恶意内容是通过合法凭证发布的,而不是事后注入的。Snyk Learn 在《Compromise of a Legitimate Package》中有详细的演示,讲解了这类攻击的工作原理。.pthRECORD

CPython 维护者已承认 issue #113659 中启动钩子存在安全风险,但尚未实施补丁。该技术映射到 MITRE ATT\&CK T1546.018(Python 启动钩子)。.pth

攻击链技术分析

第一阶段:信息收集 系统数据:主机名、环境变量、正在运行的进程、网络路由、最近的认证日志/var/log/auth.log 凭据:SSH私钥、文件、Git凭据、shell历史中的API密钥、Slack和Discord的webhook令牌、CI/CD配置(Jenkins、Travis CI、Terraform)、来自密码哈希.env/etc/shadow 云端凭证:AWS 凭证和配置、GCP 和 Azure 服务账户文件、通过直接 IMDS 查询的云元数据、AWS Secrets Manager 以及 SSM 参数存储(脚本中实现了完整的 IMDSv2 签名) 容器与编排:Docker(注册表凭据)、Kubernetes 文件、服务账户令牌、秘密和证书config.jsonkubeconfig 加密货币:比特币、以太坊、Solana、Cardano、Monero钱包文件和助记词、Ledger硬件钱包配置

解码后的恶意代码部分,显示了在各个目录中秘密的结构化迭代和收集情况

第二阶段:加密与数据外泄 收集的数据在传输前会进行加密: 一个32字节的AES-256会话密钥通过以下方式生成openssl rand 数据采用AES-256-CBC(PBKDF2密钥派生)加密 会话密钥通过硬编码的4096位RSA公钥(OAEP填充)加密 所有内容都集成在tpcp.tar.gz 该捆绑包通过 POST发送至https://models.litellm.cloud/curl models.litellm.cloud与合法域名不同,注册日期为3月23日,即恶意软件包发布前一天。litellm.ai 该有效载荷中的RSA公钥与Trivy和KICS载荷中的公钥相同。Wiz研究人员在三项行动中确认了这一匹配,使其成为最强的单一技术归因链。 在外泄过程中创建的临时文件:系统临时目录中的 , , , , 。session.keypayload.encsession.key.enctpcp.tar.gz

对恶意代码的去掉视角。该tpcp.tar.gz归档名称是Trivy、KICS和LiteLLM操作中一致的标记。 第三阶段:持续性与横向移动 局部持续性: 编写一个后门Python脚本到(或)~/.config/sysmon/sysmon.py/root/.config/sysmon/sysmon.py) 创建一个系统用户服务,描述为“系统遥测服务”~/.config/systemd/user/sysmon.service 注册并启用:systemctl --user daemon-reload && systemctl --user enable --now sysmon.service 持久化脚本每5分钟轮询一次URL,下载文件到,使其可执行,并作为后台进程运行。状态在 中被追踪。分析时,端点返回的是 YouTube URL;操作员可以随时切换到实时有效载荷的投放。https://checkmarx.zone/raw/tmp/pglog/tmp/.pg_state Kubernetes 横向移动:如果脚本在标准挂载路径上找到 Kubernetes 服务账户令牌,它会读取所有命名空间内的所有秘密。然后它尝试向所有使用 的节点部署一个特权 Pod。这些Pod会挂载主机文件系统,并在底层节点上安装后门。kube-systemalpine:latestsysmon 恶意 pod 会被命名(节点名截断为 35 个字符),容器名为 。node-setup-{node_name}setup

攻击细节:

  • 攻击者(疑似 TeamPCP)通过劫持维护者账号或污染 CI/CD 管道(涉及 Trivy 等工具),直接将恶意版本推送到 PyPI(绕过 GitHub 正常发布流程)。
  • 恶意代码隐藏在 proxy_server.py 中(插入 base64 编码的 payload),并在 1.82.8 版本额外添加 litellm_init.pth 文件。
  • .pth 文件会在 Python 解释器启动时自动执行(无需显式 import litellm),实现凭证窃取、Kubernetes 横向移动和持久化后门。
  • 窃取目标包括:AWS/GCP 密钥、SSH 密钥、GitHub token、加密货币钱包(Bitcoin、Ethereum 等)、环境变量、Kubernetes secrets 等。
  • 该包每天下载量巨大,影响范围广泛,已被从 PyPI 下架。

建议

  • 立即检查是否安装了 1.82.7 或 1.82.8 版本 → 回滚到 1.82.6(使用 pip install litellm==1.82.6 并 pin 版本)。
  • 旋转所有可能泄露的密钥(AWS、SSH、云凭证等)。
  • 扫描系统和 Kubernetes 集群是否有异常。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋
返回顶部