LiteLLM 项目是一个流行的 Python 接口和大型语言模型 (LLM) 提供商代理,最近在涉及 1.107.0 版本的供应链攻击中成为目标。安全研究人员发现,虽然上游 GitHub 仓库保持干净,但分发到 PyPI 的 'wheels'(预编译的 Python 包)包含三个恶意文件:`cook.pth`、`cook.py` 和 `sitecustomize.py`。这些文件旨在每当主机上的 Python 进程启动时自动执行,无论应用程序是否实际导入了 LiteLLM 库。

该图像作为涉及 1.107.0 版本 LiteLLM 供应链攻击的主要视觉素材。
此次入侵通过两种主要机制运作。首先,`cook.pth` 作为启动钩子导入 `cook.py`,其中包含一个名为 'privcollect' 的凭据窃取器。该窃取器针对广泛的敏感数据,包括 SSH 密钥、云凭据(AWS、Azure、GCP)、浏览器密码,甚至包括存储在 LiteLLM 代理数据库中的 LLM 提供商 API 密钥。它会加密这些数据并将其外泄到远程服务器。其次,`sitecustomize.py` 启动了一个后台守护进程,每小时检查一次远程 GitHub 仓库是否有新域名。如果发现,该守护进程将下载并执行第二阶段负载,为攻击者提供持久的远程代码执行 (RCE) 通道。
对构建产物的分析表明,注入发生在 wheel 构建过程中,而不是通过简单的手动上传修改后的 ZIP 文件。源代码分发中的 `pyproject.toml` 文件包含一条特定指令 (`data = "cook"`),指示构建工具 Maturin 将名为 `cook` 的文件夹包含在最终包中。由于该文件夹及其内容在公共 Git 仓库中不存在,因此恶意代码仅对下载了编译好的 wheel 的用户可见。研究人员认为,此次攻击可能源于被入侵的私有发布流水线、被盗的维护者凭据或被入侵的私有分支,因为恶意 wheels 与该项目标准构建流水线的输出相匹配。PyPI 随后删除了受影响的发布版本,建议用户将版本固定在 1.106.2 或更早版本。