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, 威胁分析, 安全情报, 安全报告, 开源软件安全, 恶意软件, 文档安全, 暗色界面, 网络信息收集, 自动化侦查工具, 软件供应链, 防御加固