found-cake/supply-chain-attacks-2026-03
GitHub: found-cake/supply-chain-attacks-2026-03
记录2026年3月发生的多起供应链攻击事件,涵盖攻击手法、时间线、IoC指标及防御建议的综合分析文档。
Stars: 4 | Forks: 0
# 2026 年 3 月供应链攻击摘要
仅在 2026 年 3 月期间,就发生了 5 起以上前所未有的供应链攻击浪潮,目标直指 Trivy 和 axios 等广泛使用的开源项目。本文档旨在提供一个整合的参考资料。
# 目录
1. Trivy
2. Checkmarx-KICS
3. LiteLLM
4. Telnyx
5. Axios
6. 总结
# 1. Trivy
## 目标
- [trivy](https://github.com/aquasecurity/trivy)
- [trivy-action](https://github.com/aquasecurity/trivy-action)
- [setup-trivy](https://github.com/aquasecurity/setup-trivy)
## 攻击者
- TeamPCP(又名 DeadCatx3, PCPcat, ShellForce, CipherForce)
## 攻击经过
### 起源:2 月下旬 Token 被盗
- 一个名为 `hackerbot-claw` 的自动化 bot 利用 Trivy CI/CD 流水线中的 **`pull_request_target` 工作流配置错误**,窃取了一个 GitHub **Personal Access Token (PAT)**。
- 3 月 1 日,Aqua Security 披露了该事件并进行了凭证轮换,但攻击者仍继续操作,这表明该过程覆盖并不完整。
### trivy
- 利用被盗 token 入侵了 `aqua-bot` 服务账户,随后创建了伪造合法维护者的冒名提交 (DmitriyLewen, rauchg)
- 推送了一个提交 ([#1885610c](https://github.com/aquasecurity/trivy/commit/1885610c)),将一个复合操作替换为包含 Go 源代码下载器的虚假 checkout 提交 ([#70379aad](https://github.com/actions/checkout/commit/70379aad))
- 发布为 **v0.69.4** → 恶意二进制文件分发至所有渠道:GitHub Releases, GHCR, Docker Hub, ECR Public, deb/rpm 仓库
- 3 月 22 日,还使用单独窃取的 Docker Hub 凭证向 Docker Hub 推送了 **v0.69.5, v0.69.6 和 latest** 镜像(约 10 小时的额外暴露时间)
- 执行时,恶意二进制文件在 `~/.config/systemd/user/sysmon.py` 安装了一个持久化投放器,每 50 分钟轮询一次 **ICP 区块链容器** 作为去中心化 C2
### trivy-action
- 利用被盗 token 对 **76 个标签中的 75 个**(除 v0.35.0 外所有)进行了强制推送,指向恶意提交
- Payload 在合法 Trivy 扫描 **之前** 执行 → 工作流显示正常完成
- "TeamPCP Cloud stealer" 转储 Runner.Worker 进程内存,窃取 SSH/cloud/K8s secrets,使用 AES-256+RSA-4096 加密,并渗漏到远程服务器
- 后备机制:在受害者的 GitHub 账户中创建一个 `tpcp-docs` 仓库用于数据渗漏
#### 提交
- [#ddb9da4](https://github.com/aquasecurity/trivy-action/commit/ddb9da4)
- [#a9bc513](https://github.com/aquasecurity/trivy-action/commit/a9bc513)
- 等...
### setup-trivy
- 与 trivy-action 模式相同,**所有 7 个标签** 均被强制推送
#### 提交
- [8afa9b9](https://github.com/aquasecurity/setup-trivy/commit/8afa9b9)
### 附加危害
- 使用 `aqua-bot` 账户向 **tfsec 和 traceeshark** 仓库推送恶意工作流,窃取 GPG keys, Docker Hub, Twitter 和 Slack 凭证
- 使用被盗的 `Argon-DevOps-Mgt` token **破坏了 aquasec-com GitHub org 中的所有 44 个仓库**(重命名为 `tpcp-docs-` 前缀,暴露了专有源代码)
- 使用被盗的 npm tokens 部署 **CanisterWorm** 蠕虫 → **66+ 个 npm 包** 被感染,使用 ICP 区块链容器作为 C2(不受常规关停手段影响)
### 关键要点
- 整个攻击活动源于单个被盗 token
- Trivy 二进制文件是在 GitHub Actions 构建过程中通过从 `https://scan.aquasecurtiy[.]org/static` 的恶意下载被入侵的
- trivy-action 和 setup-trivy 执行了 base64 编码的恶意软件,以从 GitHub Actions runners 窃取环境变量、公钥和 secrets
- ⇒ 每个使用 Trivy 的项目都成为了级联二阶和三阶入侵的潜在载体(LiteLLM, Telnyx, CanisterWorm 等)
## Aqua Security 响应
- 降级 Trivy 并移除 `v0.69.4` 标签
- 通过 brew 和 Docker 进行紧急降级
- trivy-action, setup-trivy
- 重新发布带有 **`v`** 前缀的受影响标签
- 增加了 commit SHA 锁定支持
## 参考
- https://github.com/aquasecurity/trivy/security/advisories/GHSA-69fq-xp46-6x23
- https://www.aquasec.com/blog/trivy-supply-chain-attack-what-you-need-to-know/
- https://thehackernews.com/2026/03/trivy-security-scanner-github-actions.html
- https://www.stepsecurity.io/blog/trivy-compromised-a-second-time---malicious-v0-69-4-release
- https://www.wiz.io/blog/trivy-compromised-teampcp-supply-chain-attack
- https://www.microsoft.com/en-us/security/blog/2026/03/24/detecting-investigating-defending-against-trivy-supply-chain-compromise/
- https://www.aikido.dev/blog/teampcp-deploys-worm-npm-trivy-compromise (CanisterWorm)
# 2. Checkmarx-KICS
## 目标
- https://github.com/Checkmarx/kics-github-action
- https://github.com/Checkmarx/ast-github-action (确认 v2.3.28 被入侵)
- OpenVSX 扩展: `ast-results` v2.53.0, `cx-dev-assist` v1.7.0
## 攻击者
- TeamPCP
## 攻击经过
- 与 trivy-action 相同的标签强制推送模式
- kics-github-action 中 **所有 35 个标签** 被劫持
- 强制推送到提交 [#8e20c7a](https://github.com/Checkmarx/kics-github-action/commit/8e20c7a)
- 使用 `checkmarx[.]zone`(仿冒域名)作为 C2
- 后备方案:如果 C2 失败,使用受害者的 GITHUB_TOKEN 创建 `docs-tpcp` 仓库(与 Trivy 模式相同)
- 向 Checkmarx OpenVSX 扩展注入恶意代码 → 针对 VS Code 本地环境
### 待解问题
- 与 Trivy 不同,用于此次攻击的账户是 [**elit-cx**](https://github.com/Checkmarx/kics-github-action/commits?author=elit-cx),该账户自 2021 年以来未曾向仓库贡献代码
- 目前尚不清楚该账户的 token 或凭证最初是何时被入侵的
- 这样一个长期不活跃的贡献者仍然拥有推送权限这一事实,引发了人们对 Checkmarx 访问管理实践的质疑
## Checkmarx 响应
- 增加了 commit SHA 锁定支持 [PR#153](https://github.com/Checkmarx/kics-github-action/pull/153)
- 移除了恶意的 OpenVSX 扩展
## 参考
- https://github.com/Checkmarx/kics-github-action/issues/152
- https://www.sysdig.com/blog/teampcp-expands-supply-chain-compromise-spreads-from-trivy-to-checkmarx-github-actions
# 3. LiteLLM
## 目标
https://github.com/BerriAI/litellm
## 攻击者
- TeamPCP
## 攻击经过
1. **PyPI 发布 token 被盗**,作为 Trivy 入侵的级联危害
- LiteLLM 的 CI/CD 流水线使用了未锁定版本的 Trivy → 被入侵的 trivy-action 窃取了 PYPI_PUBLISH token
- CEO (Krish Dholakia) 的 GitHub 账户也被入侵(3 月 23 日至 24 日自动化破坏)
2. 凭证窃取和 Kubernetes 恶意软件部署(1-2 轮 base64 解码)
- v1.82.8 滥用了 Python 的 `.pth` 文件机制 (`litellm_init.pth`) → **即使不导入 LiteLLM,也会在每个 Python 进程启动时自动执行**
3. 直接向 PyPI 上传了 `litellm` 1.82.7 和 1.82.8(绕过常规 CI/CD)
4. 将加密数据渗漏至 `models.litellm[.]cloud`(非官方域名)
5. 在 GitHub issue #24512 中用 **73 个被盗账户在 102 秒内发布的 88 条 bot 评论** 刷屏以稀释讨论,随后关闭该 issue 并标记为 "not planned"
### 影响
- 在 PyPI 上暴露约 40 分钟(10:39 UTC 至隔离)
- 每日约 340 万次下载
- 已分配 **CVE-2026-33634**(CVSS4B: 9.4)
- 由于依赖项锁定,使用官方 LiteLLM Proxy Docker 镜像的用户未受影响
## BerriAI 响应
- 撤下 PyPI 1.82.7 和 1.82.8(由 PyPI 安全团队快速隔离)
- 暂停所有发布,等待完整的供应链审查
- 通过新的加固 CI/CD v2 流水线发布了 v1.83.0
## 参考
- https://github.com/BerriAI/litellm/issues/24512
- https://docs.litellm.ai/blog/security-update-march-2026
- https://thehackernews.com/2026/03/teampcp-backdoors-litellm-versions.html
- https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/
# 4. Telnyx
## 目标
https://github.com/team-telnyx/telnyx-python
## 攻击者
- TeamPCP
## 攻击经过
1. PyPI token 被盗,作为 Trivy 入侵的级联危害(可能从 LiteLLM 环境中窃取)
2. 凭证窃取和 Kubernetes 恶意软件部署
- **WAV 隐写术**:恶意 payload 隐藏在 WAV 文件音频帧数据中
- 3 阶段运行时攻击链:音频隐写术投递 → 内存数据收集器执行 → 加密渗漏
3. 直接向 PyPI 上传了 `telnyx` 4.87.1 和 4.87.2
4. 恶意代码注入 `telnyx/_client.py`,在包导入时自动执行
5. C2: `83[.]142.209.203`
6. Linux/macOS:无持久化 —— 在临时目录中运行,执行后自动删除(规避检测)
7. Windows:在 Startup 文件夹中投放 `msbuild.exe`
### 影响
- 暴露时间从 3 月 27 日 03:51 至 10:13 UTC(约 6.5 小时)
- 每周约 34,000 次下载
- Telnyx 平台、API 和基础设施未受影响(仅限于 PyPI 分发渠道)
## Telnyx 响应
- 移除了恶意发布版本,PyPI 已隔离
## 参考
- https://github.com/team-telnyx/telnyx-python/security/advisories/GHSA-955r-262c-33jc
- https://telnyx.com/resources/telnyx-python-sdk-supply-chain-security-notice-march-2026
- https://thehackernews.com/2026/03/teampcp-pushes-malicious-telnyx.html
# 5. Axios
## 目标
https://www.npmjs.com/package/axios
## 攻击者
- **UNC1069**(由 Google GTIG 归因,朝鲜背景威胁行为者)
- Microsoft 追踪名称:**Sapphire Sleet**(= BlueNoroff 子组织)
- 自 2018 年以来活跃,出于经济动机(加密货币盗窃)
- **与 TeamPCP 攻击活动完全无关**
## 攻击经过
1. 入侵了 `jasonsaayman` 的 npm 账户并将邮箱更改为攻击者控制的地址 (`ifstap@proton.me`)
- 使用 **长期有效的 access token** 通过 npm CLI 直接发布(绕过 GitHub Actions OIDC 工作流)
- 虽然配置了 OIDC Trusted Publishing,但发布工作流也将 NPM_TOKEN 作为环境变量传递 → 当两者同时存在时,**npm 会使用 token,实际上使 OIDC 失效**
2. 预发布了 [plain-crypto-js](https://www.npmjs.com/package/plain-crypto-js) 4.2.0 作为幽灵依赖
3. 在 `plain-crypto-js` 4.2.1 中添加了恶意代码
4. 发布了带有恶意依赖的 axios **114.1**(标记为 `latest`)和 **0.30.4**(标记为 `legacy`)
- 3 月 31 日 00:21–03:20 UTC(约 3 小时窗口,选择在周日晚至周一凌晨的时间段)
### 恶意 Payload
- `postinstall` 钩子自动执行 SILKBELL 投放器 (`setup.js`)
- 检测操作系统并部署特定平台的 **WAVESHAPER.V2** 后门(macOS: C++, Windows: PowerShell, Linux: Python)
- C2 流量伪装成 `packages.npm.org` 以进行 **SIEM 规避**(该域名属于 National Association of Pastoral Musicians,而非 npm registry)
- 单次执行后自我删除
### 影响
- Axios 每周下载量约 1 亿次,存在于约 80% 的云/代码环境中(Wiz 估算)
- 约 3% 的用户在暴露窗口期间下载了该版本
- Huntress 观察到至少有 135 个端点连接到攻击者 C2
- [depup](https://www.npmjs.com/package/@depup/axios)
## npm & axios 响应
- `plain-crypto-js` 被阻止安装
- 恶意发布版本被移除
- 被入侵账户已禁用
## 参考
- https://github.com/axios/axios/issues/10604
- https://cloud.google.com/blog/topics/threat-intelligence/north-korea-threat-actor-targets-axios-npm-package
- https://www.microsoft.com/en-us/security/blog/2026/04/01/mitigating-the-axios-npm-supply-chain-compromise/
- https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan
- https://www.huntress.com/blog/supply-chain-compromise-axios-npm-package
# 6. 总结
## 时间线
| 日期 | 事件 |
|------|-------|
| 2 月下旬 | `hackerbot-claw` bot 利用 Trivy 的 `pull_request_target` 工作流,窃取 PAT |
| 3/1 | Aqua Security 披露事件,执行凭证轮换(残留访问权限依然存在) |
| 3/19 17:43 UTC | TeamPCP:强制推送 76 个 trivy-action 标签 + 7 个 setup-trivy 标签,发布恶意 trivy v0.69.4 |
| 3/19 20:38 UTC | Trivy 团队检测并移除恶意构件 |
| 3/20 20:45 UTC | CanisterWorm npm 蠕虫开始传播(66+ 个包) |
| 3/22 | 恶意 trivy v0.69.5/6/latest 推送到 Docker Hub;aquasec-com 组织 44 个仓库被破坏 |
| 3/23 | Checkmarx KICS/AST GitHub Action 标签被劫持,OpenVSX 扩展被感染 |
| 3/24 10:39 UTC | LiteLLM 1.82.7 & 1.82.8 恶意上传至 PyPI(约 40 分钟暴露) |
| 3/27 03:51 UTC | Telnyx 4.87.1 & 4.87.2 恶意上传至 PyPI(约 6.5 小时暴露) |
| 3/31 00:21 UTC | Axios 1.14.1 & 0.30.4 恶意上传至 npm(约 3 小时暴露) — **独立攻击者 (UNC1069, 朝鲜)** |
## 攻击者分类
### TeamPCP (#1–4)
- 别名: DeadCatx3, PCPcat, ShellForce, CipherForce
- 自 2024 年活跃;在 2025 年底构建了带有 CanisterWorm 的自动化供应链攻击能力
- **从单个被盗凭证级联至 5 个生态系统**: GitHub Actions → Docker Hub → npm → OpenVSX → PyPI
### UNC1069 / Sapphire Sleet (#5)
- 朝鲜背景,自 2018 年活跃,出于经济动机(加密货币盗窃)
- 部署了 WAVESHAPER.V2 后门
- 与 TeamPCP 攻击活动完全独立
## 共同模式与教训
### 攻击模式
1. **凭证盗窃作为切入点**:每次攻击都始于维护者账户或 token 被入侵
2. **可变标签滥用**:利用 Git 标签可强制推送的特性(标签投毒)
3. **滥用合法分发渠道**:恶意版本直接上传至 PyPI/npm —— 包名仍然合法,使得通过功能测试无法检测
4. **级联传播**:单次入侵通过被盗凭证传播至下游项目
5. **安全工具作为攻击载体**:Trivy, KICS 和类似扫描器以高权限运行,一旦被入侵影响最大化
### 防御建议
1. **将 GitHub Actions 锁定到 commit SHA** —— 标签可被强制推送
2. **锁定包版本并使用 lockfile** —— 切勿运行未锁定的安装
3. **监控 CI/CD runner 出站网络流量** —— 检测发往未知域名的意外 POST 请求
4. **对 npm/PyPI tokens 应用最小权限 + 设置过期时间**
5. **切勿让 OIDC 与长期 token 共存** —— 如 axios 案例所示,当两者同时存在时 npm 会使用 token,使 OIDC 失效
6. **立即且完整地执行凭证轮换** —— 不完整的轮换是 Trivy 级联入侵的根本原因
7. **检查是否存在 `tpcp-docs` / `docs-tpcp` 仓库** —— TeamPCP 的后备渗漏机制
8. **在自动更新到最新版本前应用隔离期** —— 在 CI/CD 中自动补丁等同于自动引狼入室
### IOC 域名
- `scan.aquasecurtiy[.]org` (Trivy)
- `checkmarx[.]zone` (Checkmarx)
- `models.litellm[.]cloud` (LiteLLM)
- `83[.]142.209.203` (Telnyx)
- `packages.npm.org` (Axios, npm 伪装)
- `plug-tab-protective-relay.trycloudflare[.]com` (Trivy Cloudflare Tunnel C2)
- ICP canister `tdtqy-oyaaa-aaaae-af2dq-cai` (CanisterWorm)
标签:2026年3月, Axios, CI/CD安全, DNS 反向解析, GitHub安全, IP 地址批量处理, Llama, TeamPCP, 供应链攻击, 凭据窃取, 区块链C2, 威胁分析, 安全情报, 安全报告, 开源软件安全, 恶意软件, 文档安全, 暗色界面, 网络信息收集, 自动化侦查工具, 软件供应链, 防御加固