| 关键词: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的项目都会自动安装上。
这两个恶意版本使用了不同的注入技术: 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攻击细节:
建议:
| ||||||||||||||||||||||
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|