投毒即服务:TeamPCP如何引爆AI时代供应链危机

admin 2026-06-13 04:34:02 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: TeamPCP是一个自2025年下半年活跃的AI驱动供应链攻击组织,其攻击横跨npm、PyPI、DockerHub等10+分发渠道,通过窃取凭据劫持发布权限进行供应链投毒。该组织利用AnthropicClaude、GPT-4o等AI工具生成恶意代码,使武器迭代周期缩短至2-3周,并开源核心框架引发第三方变种扩散,首次实战击穿SLSABuildLevel3可信发布标准,对开源供应链安全构成严重威胁。 综合评分: 92 文章分类: 供应链安全,恶意软件,威胁情报,漏洞分析,安全运营


cover_image

投毒即服务:TeamPCP如何引爆AI时代供应链危机

原创

腾讯云安全 腾讯云安全

云鼎实验室

2026年6月12日 20:56 广东

在小说阅读器读本章

去阅读

01 |总览与摘要

TeamPCP 是一个至少从 2025 年下半年活跃于开源供应链领域的组织。云鼎实验室通过对其相关事件的持续监测分析发现,其攻击并非传统的单点恶意包投放,而是围绕开发者工具链、CI/CD、包管理器、云凭据与开源发布权限形成的连续作战链条。

手段:典型路径为凭据窃取 → 发布权限劫持 → 供应链投毒 → 横向扩散。攻击者通过终端窃取、GitHub Actions 滥用、包发布账号劫持等方式获取凭据后,劫持 npm、PyPI、Docker Hub、OpenVSX 等分发与构建渠道投放恶意制品,并利用受害环境中的云密钥、源码仓库和发布令牌继续扩散。

AI 赋能:TeamPCP 最突出的特征是人机协同攻击。公开证据显示,TeamPCP 主要使用 Anthropic Claude(Claude 3.5 Sonnet 与 Claude Code CLI)生成后门脚手架和启动脚本,利用 GPT-4o 优化混淆与免杀逻辑,并借助 GitHub Copilot 补全攻击代码。其恶意仓库中直接暴露了用于提交的 Git 邮箱地址 [email protected]。借助 AI 的全面赋能,其武器迭代周期从传统的数月缩短至 2–3 周,并在 3 个月内完成了五代武器的进化。

范围:攻击面横跨 npm、PyPI、Docker Hub、GitHub Actions、OpenVSX、VS Code Marketplace、Jenkins 插件市场、GitHub 内部仓库等 10+ 分发与构建渠道,波及 Trivy、Checkmarx KICS、LiteLLM、Telnyx、Bitwarden CLI、SAP CAP、TanStack、UiPath、Mistral、durabletask、Red Hat、微软等知名组织和项目。

影响:首次在实战中击穿 SLSA Build Level 3 可信发布标准;渗透 GitHub 员工设备窃取约 3,800 个内部仓库并在暗网出售;2026 年 5 月将核心攻击框架 Mini Shai-Hulud 开源,直接引发第三方复用的行业级蔓延——Miasma 蠕虫导致 GitHub 在 105 秒内禁用 73 个 Microsoft 相关仓库(见时间线 2026-06-05),Phantom Gyp 变种 2 小时内感染 57 个包/286+ 版本;CISA 将相关漏洞加入 KEV 目录并发布独立公告。

本文基于云鼎实验室内部沉淀的威胁情报,从组织画像、技战法、武器库、典型事件、生态影响到 IOC 指标,完整复盘 TeamPCP 这条新型 AI 驱动供应链攻击组织的全貌。


核心观点

  1. 攻击目标覆盖整个研发供应链。 从生态层面看,攻击横跨 npm、PyPI、GitHub Actions、Docker Hub、OpenVSX、VS Code Marketplace 等 10+ 分发与构建渠道。从受害对象看,涉及数十个知名开源项目及 GitHub、微软等大型平台组织的内部仓库。传统的”只审查应用代码依赖”策略对此类攻击完全失效。
  2. 攻击重点是信任链路。 包括 GitHub Actions 工作流、npm/PyPI 发布权限、Docker Hub 镜像、OpenVSX 插件、CI Runner 内存、GitHub OIDC trusted publishing 等。攻击者不是在代码中找漏洞,而是在软件从源码到用户手中的传输管道上逐个攻破信任节点。
  3. 凭据是攻击闭环的核心资产。 攻击者持续收集环境变量、SSH 密钥、GitHub/npm/PyPI token、AWS/GCP/Azure 凭据、Kubernetes Service Account、Vault token、Docker 配置和数据库密码。凭据不仅是单次入侵的终点,更是启动下一轮供应链扩散的燃料。
  4. AI 编码工具被全面武器化,攻击效率呈指数级提升。 公开证据显示 TeamPCP 以 Anthropic Claude 为主力生成项目脚手架与后门代码,GPT-4o 优化混淆免杀逻辑,GitHub Copilot 补全攻击片段,构建了人机协同的恶意代码生产流水线。这使得武器从 Cloud Stealer → CanisterWorm → .pth/WAV 隐写 → Mini Shai-Hulud → 开源二开变种的 5 代进化在不到 3 个月内完成,迭代速度远超传统供应链攻击组织。AI 同时被用于自动化目标侦察、多态载荷批量生成和溯源干扰,使传统基于签名匹配的检测体系面临结构性失效。
  5. 武器体系持续演进且已开源扩散。 从 TeamPCP Cloud Stealer、CanisterWorm、sysmon.py/pgmon 持久化后门,到 Python .pth 注入、WAV 隐写投递、Mini Shai-Hulud 自传播蠕虫、Session 网络外传与 GitHub dead drop,武器库随事件不断扩充。2026 年 5 月核心框架开源后,Miasma 和 Phantom Gyp 变种被第三方快速复用,攻击活动已超越单一操作者的控制范围,归因难度显著上升。
  6. 多起事件具有战役化关联,形成连贯作战图谱。 基础设施(Typosquat 域名、ICP Canister、C2 IP 段)、RSA 公钥、tpcp.tar.gz 归档名、外传方式、俄语系统规避、GitHub 回退通道和代码模式在多起事件中反复出现,表明这些事件并非孤立的偶发投毒,而是围绕研发基础设施展开的连续攻击活动。

02|组织介绍

1. TeamPCP 是什么

TeamPCP 是近期多起开源供应链攻击中反复出现的黑客团伙。公开报告中,Wiz 将其作为独立威胁组织进行追踪,并将 Trivy、Checkmarx KICS、LiteLLM、Bitwarden、Lightning、Intercom、TanStack 多起事件归因到该组织。

与传统“上传一个恶意包”等单点攻击不同,TeamPCP 更像是围绕研发基础设施展开的连续攻击活动。其目标并不局限于终端用户,而是优先打击开发者工具、CI/CD 流水线、包发布账号、云凭据和开源项目维护者权限。一旦获取某个项目的发布令牌或 GitHub 权限,攻击者会将其作为跳板继续感染更多软件包或更多生态。

2. 组织画像

根据目前我们对TeamPCP团伙的攻击检测,发现其至少在不同阶段掌握的攻击能力如下

| 能力 | 体现 | | — | — | | 供应链投毒 | 劫持 npm、PyPI、Docker Hub、GitHub Actions、OpenVSX、Jenkins 插件等分发渠道 | | CI/CD 攻击 | 滥用 pull_request_target、GitHub Actions   cache poisoning、Runner 内存读取、OIDC token 抽取 | | 凭据窃取 | 收集 GitHub/npm/PyPI token、云凭据、SSH 密钥、K8s token、Vault token、数据库密码 | | 横向传播 | 使用被盗 token 枚举可发布包并重新发布恶意版本,形成蠕虫式扩散 | | 多通道外传 | 使用 typosquat 域名、Cloudflare Tunnel、ICP Canister(Internet Computer   Protocol 上的链上容器/智能合约服务,可被攻击者用作可轮换的 dead-drop C2)、GitHub release asset、GitHub   dead drop、Session 网络 | | 持久化 | systemd –user、macOS LaunchAgent、Python  .pth、IDE hook、GitHub   token monitor daemon | | 地下协作 | 与数据泄露、访问交易、论坛悬赏和勒索变现网络形成协作关系 |

3. 归属证据

公开资料中对 TeamPCP 的归因主要基于多类重叠证据,而不是单一线索:

3.1 命名与标识复用

多个事件中出现了明显的 tpcp 命名痕迹:

  • 被盗数据打包为 tpcp.tar.gz
  • GitHub 备用外传仓库名包括 tpcp-docsdocs-tpcp
  • 恶意工具自称 TeamPCP Cloud stealer
  • HTTP 外传头中出现 X-Filename: tpcp.tar.gz

3.2 加密材料复用

Trivy、KICS、LiteLLM、Telnyx 等事件中均出现 AES-256 与 RSA-4096 混合加密模式。Wiz 与多家研究机构指出,部分攻击复用了相同或高度相似的 RSA 公钥。由于对应私钥控制权高度敏感,公钥复用是强归属依据之一。

3.3 基础设施复用

多个事件中出现了相同或相近的基础设施:

  • scan.aquasecurtiy[.]org
  • checkmarx[.]zone
  • models.litellm[.]cloud
  • git-tanstack[.]com
  • ICP Canister:tdtqy-oyaaa-aaaae-af2dq-cai
  • Cloudflare Tunnel:plug-tab-protective-relay.trycloudflare.com

3.4 技术模式复用

攻击者反复使用以下模式:

  • 从 /proc/<pid>/mem 读取 GitHub Actions Runner.Worker 进程内存
  • 搜索 {"value":"<secret>","isSecret":true} 类型的 secret 结构
  • 通过 systemd --user 落地 sysmon.py 或 pgmon 后门
  • 使用 npm preinstall / postinstall 触发恶意代码
  • 使用 Python .pth 文件在解释器启动阶段执行代码
  • 针对俄语系统进行规避

4. 与 Shai-Hulud / Mini Shai-Hulud 的关系

公开报告中,“Mini Shai-Hulud”被用于描述 2026 年 4 月至 5 月出现的一批自传播供应链攻击。该活动复用了 Shai-Hulud 风格的概念,包括 npm install hook、自传播、GitHub dead drop、凭据窃取和仓库污染。

需要注意的是:

  • Wiz 高置信度认为 Mini Shai-Hulud 系列事件与 TeamPCP 有关。
  • 但 Wiz 也明确表示,不能仅凭命名判断其与历史 Shai-Hulud 行动是同一组织。
  • 更合理的表述是:TeamPCP 借鉴、复用或演化了 Shai-Hulud 风格的供应链蠕虫技术,并在 2026 年形成了更具攻击性的变种。

5. 访谈材料

| 观察维度 | 访谈材料反映的倾向 | 对企业安全的启示 | | — | — | — | | 从破坏型勒索转向访问变现 | 其自述早期更接近加密勒索,后续转向凭据窃取、源码外传、发布权限滥用和访问售卖 | 供应链攻击不一定以业务中断作为第一目标;更常见的风险是凭据、代码、云访问和发布权限被持续变现。 | | 优先攻击高价值开发链路 | 材料中反复强调 GitHub 权限、发布令牌、云凭据和大型组织访问价值 | 企业需要把 CI/CD、包发布账号、开发者终端和云身份视为同一条高价值攻击链,而不是割裂治理。 | | 访问交易生态化 | 访谈提到与数据泄露论坛、访问经纪和其他团伙协作,说明其并不依赖单一团队完成全部变现环节 | 一次供应链入侵可能很快进入地下访问交易、源码售卖或勒索网络,响应重点应包括凭据轮换、代码访问审计和外泄监测。 | | 防御建议具有反向验证价值 | 其提到依赖版本冷却期(对新发布包设置延迟准入窗口)、制品哈希锁定、细粒度发布令牌、限制 IDE 插件来源等措施 | 这些建议与防守方实践高度重合,说明攻击者实际利用的正是依赖解析、制品完整性、发布权限和开发者工具链中的默认信任。 | | AI 是效率放大器而非唯一核心 | 访谈中承认使用 AI 辅助,但也强调攻击链设计依赖对供应链机制的理解 | AI 会降低恶意代码生成、混淆和变种迭代门槛,但真正的风险仍来自攻击者对 CI/CD、包管理器和云身份机制的系统性理解。 |

因此,访谈材料应被视为威胁情报中的“行为意图和运营模式”证据:TeamPCP 的关注点已经从单次入侵转向可复用的供应链访问、可交易的数据资产和可扩散的攻击工具链。

6. 源码售卖、竞赛与地下协作

公开材料和用户补充资料显示,TeamPCP 的运营方式有明显“平台化”和“生态化”倾向:

  1. 工具公开与攻击众包。 地下论坛帖文显示,相关人员曾以“供应链攻击竞赛”的形式公开推广 Shai-Hulud worm,要求参与者使用该工具链,并以受影响软件包的周/月下载量作为衡量标准,同时通过 XMR 奖金、访问权收购和后续变现分成吸引第三方参与。这说明相关工具链公开后,攻击活动存在从单一团伙操作向第三方复用、改造和规模化扩散的风险。
  2. 源码、凭据与访问权限变现。 访谈材料中,攻击者声称出售 GitHub 私有仓库数据;其他公开线索还显示,其曾围绕 GitHub、MistralAI、Lightning.ai 等相关源码或访问权限进行地下售卖。本文不展开具体数据内容,仅将其作为 TeamPCP 将源码资产、访问权限和供应链投毒能力商品化的侧面证据。
  3. 地下协作与访问交易网络。 除 LAPSUS$、BreachForums 等公开提及的协作对象外,公开线索中还出现 the gentlemenHasanBroker's 等地下合作或访问交易关系,其中 HasanBroker’s 与其合作关系后续已破裂。整体来看,TeamPCP 更接近一个连接凭据窃取、源码外传、访问交易和供应链投毒能力的地下访问经纪节点,而不是单纯的恶意包作者。

7. 组织特点总结

TeamPCP 是一个极度危险的黑客组织,他们将攻击目标锁定为开发者或具备CI Runner、包发布账号和云服务凭据的重要人员,一旦突破,极有可能随着自动化发布链进入更大范围的生态系统。

与普通恶意包作者相比,TeamPCP 的差异在于:它攻击的是“开源软件如何被构建、发布和信任”的机制本身,并试图将凭据、源码、访问权限和供应链投毒能力转化为可交易、可复用、可扩散的地下资源。

03|攻击技战法

TeamPCP 的核心不是利用传统漏洞入侵单台服务器,而是劫持软件供应链中的信任关系:维护者账号、CI/CD 工作流、发布 token、GitHub OIDC、包管理生命周期脚本、Docker 镜像标签和 GitHub Action tag。

1. 攻击链总览

| 阶段 | 目标 | 典型方式 | 代表事件 | | — | — | — | — | | 初始访问 | 获取发布或仓库权限 | 被盗 npm/PyPI/Docker Hub token、GitHub PAT、服务账号、pull_request_target 误用 | Trivy、KICS、LiteLLM、TanStack | | 执行 | 在可信构建或安装流程中运行恶意代码 | npm 生命周期脚本、PyPI .pth、GitHub Action、OpenVSX 插件、Docker 镜像、Actions cache | CanisterWorm、LiteLLM、KICS、TanStack | | 凭据收集 | 收集开发、CI/CD 与云环境中的 secrets | 环境变量、SSH key、.npmrc、Docker 配置、K8s   token、Vault、Runner 内存 | Trivy、KICS、Mini Shai-Hulud | | 外传 | 将凭据或扫描结果传出受害环境 | HTTP POST、GitHub release asset、GitHub dead drop、Cloudflare Tunnel、ICP   Canister、Session 网络 | Trivy、KICS、TanStack | | 横向传播 | 利用被盗权限感染更多包或仓库 | 枚举可发布包、注入生命周期脚本、重新发布恶意版本 | CanisterWorm、Mini Shai-Hulud | | 持久化 | 维持后续访问 | systemd –user、macOS LaunchAgent、Python  .pth、IDE hook、GitHub   token monitor | Trivy、KICS、LiteLLM、TanStack |

#

2. 初始访问与执行入口

| 类型 | 技术点 | 说明 | | — | — | — | | 被盗发布令牌 | npm PyPI Docker Hub token | LiteLLM、Telnyx、Bitwarden CLI、KICS Docker Hub 等事件均体现发布权限被滥用。 | | GitHub 凭据 | PAT、服务账号、aqua-bot、cx-plugins-releases | 可用于覆盖 tag、创建恶意 workflow、推送 commit 或触发 CI。 | | Pwn Request | pull_request_target + fork 代码执行 | TanStack 中,fork PR 代码进入 base repo 的信任边界并污染 Actions cache。 | | npm 生命周期 | preinstall、postinstall、prepare | 安装即执行,是 CanisterWorm 与 Mini Shai-Hulud 的核心入口。 | | PyPI 自动执行 | .pth、模块导入、__init__.py | LiteLLM 通过 .pth 扩大触发面;Lightning 在 import lightning 时启动后台线程。 | | GitHub Action | action.yaml、entrypoint.sh、setup.sh | Trivy / KICS 在下游 CI Runner 中执行凭据窃取逻辑。 | | 插件市场 | OpenVSX VS Code Jenkins | 插件激活或加载时执行恶意逻辑,直接接触开发者环境。 | | 缓存投毒 | Actions cache / pnpm store | TanStack 中,PR 侧缓存被 release workflow 恢复并触发恶意执行。 |

#

3. 凭据发现与云环境枚举

| 类别 | 目标 | 说明 | | — | — | — | | 本地开发环境 | 环境变量、.env、Shell history、SSH   key、Git 凭据 | 攻击者重点寻找长期有效 token 与本地私钥。 | | 包管理器 | .npmrc、PyPI/Twine 配置、registry   token | 可用于重新发布恶意包,扩大供应链影响面。 | | 容器与 CI/CD | Docker config、GitHub Actions secrets、Runner 内存 | 多起事件读取 /proc//mem,从 Runner.Worker 中提取 secret 或 OIDC token。 | | 云平台 | AWS、GCP、Azure 凭据 | AWS 侧常见枚举包括 IAM、EC2、Lambda、RDS、Route 53、S3、Secrets Manager、ECS。 | | Kubernetes / Vault | Service Account token、kubeconfig、Vault token | KICS 与 Mini Shai-Hulud 均体现对云原生环境的持续关注。 | | 浏览器与钱包 | 浏览器密码、MetaMask、Phantom、Solana、Ethereum 等 | 后期变种开始扩展到浏览器凭据和加密钱包数据。 |

#

4. 横向传播、外传与持久化

| 能力 | 技术实现 | 风险 | | — | — | — | | 自传播 | 读取 npm token → 枚举可发布包 → 注入恶意脚本 → bump 版本 → 发布 | 维护者账号会变成传播节点,单个 token 可影响多个包。 | | OIDC 发布滥用 | 从 Runner 内存提取 OIDC token,直接向 npm registry 发起发布 | 不需要窃取长期 npm token,也可完成恶意发布。 | | 加密外传 | AES-256-CBC + RSA-4096 / RSA-OAEP,加密后打包为 tpcp.tar.gz | 即使拦截流量,也难以直接还原内容。 | | 多通道 C2 | Typosquat 域名、Cloudflare   Tunnel、ICP Canister、GitHub dead drop、Session 网络 | 单一域名封禁效果有限。 | | 主机持久化 | sysmon.py、pgmon、gh-token-monitor、LaunchAgent | 凭据轮换后仍可能被二次窃取。 | | IDE / 仓库持久化 | .vscode/tasks.json、.claude/settings.json、恶意仓库文件 | 用户打开项目或启动 IDE 即可能再次触发。 |

#


#

04|攻击武器与基础设施

#

1. 武器总览

TeamPCP 使用的“武器”并不只是单一恶意程序,而是一组围绕供应链攻击设计的组件:加载器、凭据窃取器、持久化脚本、自传播发布器、外传通道和回退 C2。其工具组合随着事件持续演进。

| 武器类别 | 代表组件 | 功能 | | — | — | — | | 凭据窃取器 | TeamPCP Cloud Stealer | 扫描 CI/CD 与开发者侧 secrets 并外传 | | npm 蠕虫 | CanisterWorm | 自动注入 optionalDependencies 实现链式扩散 | | Linux 后门 | sysmon.py + systemd unit | 用户态长期驻留,监控 GitHub token 与 Vault | | PyPI 注入器 | LiteLLM .pth / Telnyx WAV 隐写 | Python 启动时自动加载,stage-2 隐写在合法资源中 | | 蠕虫变种 | Mini Shai-Hulud / TanStack 变种 | 复用 Shai-Hulud 思路,叠加 PCP 公钥外传 |

2. TeamPCP Cloud Stealer

该组件在 Trivy 与 KICS 事件中尤为典型。其核心能力包括:

  • 读取 GitHub Actions Runner 进程内存
  • 搜索 secret JSON 结构
  • 收集环境变量、SSH 密钥、云凭据、Kubernetes token、Docker 配置
  • 查询 AWS IMDS 与 Kubernetes API
  • 使用 AES-256 + RSA-4096 加密
  • 打包为 tpcp.tar.gz
  • 外传到攻击者控制域名或 GitHub 仓库

可疑痕迹:

  • tpcp.tar.gz
  • tpcp-docs
  • docs-tpcp
  • scan.aquasecurtiy[.]org
  • checkmarx[.]zone

3. CanisterWorm

CanisterWorm 是 TeamPCP 风格 npm 蠕虫的重要代表。其名称来自攻击者使用 Internet Computer Protocol Canister 作为 dead-drop C2。

典型行为

  1. npm postinstall 执行 node index.js
  2. 加载器读取 base64 payload。
  3. Python dropper 写入本地。
  4. 创建 systemd --user 服务。
  5. 每隔约 3000 秒轮询 ICP Canister。
  6. 下载二阶段 payload 到 /tmp/pglog 并执行。
  7. 读取 npm token,枚举可发布包并重新发布恶意版本。

主要 IOC

  • https://tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io/
  • ICP Canister ID:tdtqy-oyaaa-aaaae-af2dq-cai
  • /tmp/pglog
  • /tmp/.pg_state
  • ~/.local/share/pgmon/service.py
  • ~/.config/systemd/user/pgmon.service

4. sysmon.py 与 systemd 后门

在 Trivy 与 KICS 事件中,攻击者会在非 CI 环境中落地 sysmon.py

常见路径:

  • ~/.config/systemd/user/sysmon.py
  • ~/.config/systemd/user/sysmon.service
  • /root/.config/sysmon/sysmon.py
  • /root/.config/systemd/user/sysmon.service

其行为是定时轮询 C2 获取下一阶段载荷。如果 C2 返回“youtube”相关内容,则视为休眠或 kill switch;否则下载并执行。

5. LiteLLM .pth 注入

LiteLLM 1.82.8 中出现 litellm_init.pth。Python 的 .pth 文件会在解释器启动时被 site 模块处理,因此攻击者无需等待用户显式 import litellm

该方式的危险性在于:

  • 触发面从单个库扩大到整个 Python 环境。
  • 任意 Python 进程启动都可能执行恶意代码。
  • 普通源码审查容易忽略 wheel 包中的 .pth 文件。

IOC:

  • litellm_init.pth
  • p.py
  • models.litellm[.]cloud
  • checkmarx[.]zone

6. Telnyx WAV 隐写投递

Telnyx Python SDK 的恶意版本 4.87.1 与 4.87.2 在 _client.py 中注入代码,从 83.142.209.203:8080 下载 WAV 文件,并从音频中提取 payload。

  • Windows:投递到启动目录下的 msbuild.exe
  • Linux/macOS:执行凭据收集器,加密并外传 tpcp.tar.gz

IOC:

  • http://83.142.209.203:8080/ringtone.wav
  • http://83.142.209.203:8080/hangup.wav
  • %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe

7. Mini Shai-Hulud

Mini Shai-Hulud 是 TeamPCP 后期攻击中更复杂的自传播框架。其能力包括:

  • npm preinstall 触发
  • 下载 Bun runtime
  • 执行混淆的 execution.js
  • 收集 GitHub/npm/cloud/K8s/Vault token
  • 浏览器凭据窃取
  • GitHub dead drop 外传
  • npm 自传播
  • IDE 持久化:.claude/ 与 .vscode/
  • 俄语系统规避

代表性文件:

  • setup.mjs
  • execution.js
  • .claude/execution.js
  • .claude/setup.mjs
  • .claude/settings.json
  • .vscode/tasks.json
  • .vscode/setup.mjs

8. TanStack 变种基础设施

TanStack 事件中,攻击者使用了更复杂的三通道外传体系:

  1. Typosquat 域名:git-tanstack[.]com
  2. Session 网络:filev2.getsession.orgseed1/2/3.getsession.org
  3. GitHub API dead drop:创建描述为 Shai-Hulud: Here We Go Again 的仓库

新增持久化组件:

  • gh-token-monitor
  • macOS:~/Library/LaunchAgents/com.user.gh-token-monitor.plist
  • Linux:~/.config/systemd/user/gh-token-monitor.service

9. 基础设施特点

TeamPCP 的基础设施呈现以下特点:

  • Typosquatting:如 scan.aquasecurtiy[.]orgmodels.litellm[.]cloudgit-tanstack[.]com
  • 去中心化或抗封锁通道:ICP Canister、Session 网络
  • 合法平台滥用:GitHub 仓库、GitHub Release、OpenVSX、npm/PyPI、Docker Hub
  • 临时隧道:Cloudflare Tunnel
  • 回退机制丰富:主 C2 失败后可切换 GitHub dead drop 或备用域名

#

05|事件时间线

时间线

| 时间 | 事件 | 关键动作 / 技术点 | 影响与备注 | | — | — | — | — | | 2025 年底 | TeamPCP 相关活动开始被公开资料持续关注 | 早期围绕开发者基础设施、云环境、供应链投毒和访问售卖活动展开 | 后续事件显示其目标从单次入侵逐步转向”凭据—发布权限—供应链扩散”的连续作战模式。 | | 2026-02-27 | Aqua 相关早期 Pwn Request 事件 | MegaGame10418 利用 Pwn Request 获取 aqua-bot PAT | 后续被认为可能为 Trivy / Aqua 二次入侵埋下伏笔。 | | 2026-03-19 17:43:37 | Trivy v0.69.4 tag 被推送并触发恶意 release | 伪造提交身份、恶意 checkout、Runner 内存读取、AES/RSA 加密、sysmon.py、Cloud Stealer | 恶意 Trivy 二进制发布到 GitHub Releases、Docker Hub、GHCR、ECR。 | | 2026-03-19 至 03-20 | trivy-action 与 setup-trivy tag 被覆盖 | trivy-action 75/76 个 tag、setup-trivy 7 个 tag 被指向恶意版本 | 下游使用浮动 tag 的 GitHub Actions 工作流暴露。 | | 2026-03-20 | Socket 披露 CanisterWorm | npm 自传播、ICP Canister C2、pgmon / systemd user 持久化 | 初始涉及 @emilgroup 与 @teale.io/eslint-config 等包。 | | 2026-03-21 | CanisterWorm 影响扩大 | 影响扩大到 135 个恶意包构件、64+ 独立包 | npm publish token 被用于枚举和批量发布,蠕虫式扩散特征明显。 | | 2026-03-22 约 16:00 | 恶意 Trivy 镜像发布到 Docker Hub | 恶意 0.69.50.69.6 镜像;Aqua 内部仓库被公开 | 攻击从 GitHub release / Actions 扩展到容器镜像分发链。 | | 2026-03-23 12:53 | Checkmarx OpenVSX 扩展出现恶意版本 | ast-results v2.53.0cx-dev-assist v1.7.0 被投毒 | IDE / 插件市场进入攻击面。 | | 2026-03-23 12:58 | KICS GitHub Action 投毒 | 35 个 tag 被指向恶意 commit;K8s Pod 持久化、云凭据收集 | 与 Trivy 事件存在基础设施和 TTP 重叠。 | | 2026-03-24 | LiteLLM PyPI 投毒 | 恶意 litellm 1.82.7/1.82.8;Python .pth 注入实现解释器启动执行 | GitHub 源码与 PyPI 制品不一致,暴露”源码可信不等于制品可信”。 | | 2026-03-27 | Telnyx Python SDK 投毒 | telnyx 4.87.1/4.87.2 ;WAV 隐写投递、平台差异 payload、Windows Startup 持久化 | 无对应 GitHub tag,指向 PyPI 发布链被绕过。 | | 2026-04-22 12:31:35 至 12:59:46 | KICS Docker Hub 镜像出现恶意版本 | 污染 latestalpinedebianv2.1.20v2.1.21 等 tag | 恶意 KICS 保留扫描功能,同时外传 IaC 扫描结果。 | | 2026-04-22 | Bitwarden CLI npm 分发短时污染 | @bitwarden/[email protected] 被投毒 | 影响窗口期通过 npm 安装 CLI 的用户。 | | 2026-04-22 | Namastex / CanisterSprawl 波次披露 | @automagik/geniepgserve 等受影响 | CanisterWorm 系列继续扩散,体现跨包横向传播能力。 | | 2026-04-22 14:17:59 至 15:41:31 | checkmarx/ast-github-action 恶意版本 | 恶意 2.3.35 发布 | Checkmarx 相关攻击继续沿 GitHub Action 扩展。 | | 2026-04-22 13:06 至 17:48 / 21:20 | Checkmarx VS Code Marketplace / OpenVSX 后续版本 | ast-results 2.63/2.66cx-dev-assist 1.17/1.19 等 | 插件市场与开发者终端风险扩大。 | | 2026-04-25 | LAPSUS$ 公开发布 Checkmarx 相关数据 | 被窃数据公开 / 售卖 | Checkmarx 事件从投毒扩大到数据泄露与地下变现。 | | 2026-04-29 | Wiz 披露 Mini Shai-Hulud 攻击 SAP npm 包 | 凭据窃取、自传播、GitHub dead drop(建仓 / Release Asset / commit 暂存外传)、IDE 配置投毒 | @cap-js/sqlite@cap-js/postgres@cap-js/db-servicembt 等受影响。 | | 2026-04-30 12:45:20 至 13:27:30 | PyPI lightning 2.6.2/2.6.3 可被安装 | import lightning 后台线程、Bun、约 11MB 混淆 JS payload | PyTorch Lightning 官方称暴露 42 分钟;GitHub 源码仓库未被篡改。 | | 2026-04-30 15:20 | Mini Shai-Hulud 范围更新 | 新增 [email protected] 与 PyPI [email protected]/2.6.3 | 攻击跨 npm 与 PyPI,payload 使用 zero.masscan.cloud 与 GitHub fallback。 | | 2026-05-09 至 05-10 | Jenkins Marketplace 出现恶意 Checkmarx AST Scanner | 恶意 Checkmarx AST Scanner 2026.5.09 | Checkmarx 事件进一步扩展到 Jenkins 插件分发渠道。 | | 2026-05-10 至 05-11 | TanStack 攻击准备 | fork zblgg/configuration,通过 pull_request_target 执行恶意代码并污染 GitHub Actions cache | 为后续 OIDC token 获取和 npm 发布做准备。 | | 2026-05-11 19:20 / 19:26 | TanStack 波次恶意版本发布 | cache poisoning、Runner 内存 OIDC token 提取、trusted publishing 绕过、Session 网络外传、gh-token-monitor | 共 42 个 @tanstack/* 包、84 个恶意版本;未窃取 npm token。 | | 2026-05-12 | Wiz 披露 TeamPCP 同步攻击 TanStack、UiPath、Mistral、guardrails-ai | npm / PyPI 同步投毒;[email protected][email protected] 等 | 显示 TeamPCP 具备多命名空间、多生态并发操作能力。 | | 2026-05-12 至 05-14 | Shai-Hulud 源码公开与供应链攻击竞赛 | 攻击者公开工具链,并在地下论坛发起”供应链攻击比赛”;规则要求使用 Shai-Hulud worm | 攻击框架被第三方快速复用,供应链攻击门槛下降。 | | 2026-05-18 后 | Megalodon 等自动化扩散 | 大规模自动化仓库植入与软件包污染 | 公开资料称 6 小时内对 5561 个 GitHub 项目发起 5718 次恶意代码植入。 | | 2026-05-19 | AntV / GitHub Actions / VSCode 扩展波次 | @antv/* npm 包、actions-cool/* GitHub Actions、nrwl.angular-console v18.95.0;Bun 二阶段、GitHub orphan commit payload、kitty 后门 | 开发者工具链攻击同时覆盖 npm、GitHub Actions 和 VSCode 扩展。 | | 2026-05-19 15:08 至 15:16 | durabletask GitHub 侧活动 | 攻击者访问 microsoft/durabletask-python,从 GitHub secrets 获取 PyPI token | 为后续 PyPI 直发恶意包奠定条件。 | | 2026-05-19 | PyPI durabletask 1.4.1/1.4.2/1.4.3 被投毒 | rope.pyz 、AWS SSM 传播、K8s 横向、密码管理器暴力解锁、shell history 窃取 | Microsoft Durable Task Python SDK 受影响;payload 演进自 guardrails-ai / Mini Shai-Hulud 变种。 | | 2026-05-21 前后 | GitHub / Grafana 泄露追溯到 TanStack / Nx Console 链路 | GitHub 员工安装恶意 Nx Console 扩展导致凭据被窃;Grafana 也追溯到 TanStack npm 供应链攻击 | GitHub 约 3,800 个私有仓库被外传;Grafana 代码库被窃并遭勒索。 | | 2026-06-01 | Red Hat / Miasma 披露 | 至少 32 个 @redhat-cloud-services/* 包出现未授权修改;新增 Azure / GCP 云身份收集器 | 平均周下载量约 8 万;归因上应表述为 TTP 重叠,不能排除 copycat。 | | 2026-06-01 10:53 / 13:44 | Red Hat 账号被用于推送恶意 orphan commits | frontend-componentsjavascript-clientsplatform-frontend-ai-toolkitoidc-* 分支;id-token: write workflow | 恶意 workflow 请求 OIDC token 并发布带有效 provenance 的 npm 包。 | | 2026-06-04 09:20 | Miasma 新波次更新 | binding.gyp 武器化,在安装阶段触发恶意代码 | 延续 Mini Shai-Hulud / Miasma 技术路线。 | | 2026-06-05 16:00:50 至 16:02:35 | GitHub 禁用 73 个 Microsoft 相关仓库 | 涉及 Azure、Azure-Samples、microsoft、MicrosoftDocs 四个组织;Azure/functions-action 等导致下游 CI/CD 中断 | 该事件与 Miasma / durabletask 的关系仍属公开迹象下的关联研判,暂不作为确认归因。 | | 2026-06-06 | Microsoft 仓库禁用事件公开分析 | Phoenix Security 等将 durabletask 复合风险、Miasma Azure/GCP collector 与 GitHub 自动执法行为并列讨论 | 适合作为 TeamPCP 技术路线外溢和自动化治理风险的后续观察。 |

共性结论

| 共性 | 说明 | | — | — | | 源码与发布包不一致 | LiteLLM、Telnyx、Lightning、durabletask  均显示 GitHub 源码干净不代表 PyPI 包安全。 | | 浮动引用风险高 | GitHub   Action tag、Docker tag、npm   semver、VSCode 扩展自动更新都可能被攻击者利用。 | | CI   Runner 是高价值目标 | Runner  同时接触源码、secret、发布权限和云环境,是多起攻击的凭据收集核心。 | | 合法平台被滥用 | GitHub、Docker   Hub、npm、PyPI、OpenVSX、Jenkins、Session  网络均被用于执行或外传。 | | 凭据驱动扩散 | 攻击者拿到发布 token、PAT、OIDC   token 后,可迅速进入更多包、仓库和云环境。 | | 公开工具链催化复制 | Shai-Hulud   / Mini Shai-Hulud 公开后,Miasma、Megalodon  等后续活动显示第三方可快速复用攻击模板。 |

#

TeamPCP 的每一次事件都在说明:现代供应链安全的薄弱点不只在代码漏洞,而在自动化构建、发布和信任分发的全过程。

#

06|典型事件深度复盘

1. 生态影响矩阵

#

| 生态 / 渠道 | 代表事件 | 主要风险点 | 企业排查重点 | | — | — | — | — | | GitHub Actions | Trivy、KICS、TanStack、Red Hat / Miasma、Microsoft Azure repos | tag 覆盖、恶意 workflow、pull_request_target 误用、cache poisoning、Runner 内存提取、OIDC token 滥用、仓库禁用导致、仓库禁用导致 CI/CD 中断 CI/CD 中断 | workflow 权限、Action 引用方式、cache 来源、id-token: write 使用范围、异常 release / tag、依赖 Azure/functions-action 等第三方 Action 的流水线 | | npm | CanisterWorm、Bitwarden CLI、SAP、TanStack、AntV、Red Hat、UiPath、Mistral | preinstall postinstall prepare 自动执行、发布 token 滥用、trusted publishing 边界不清、自传播 | lockfile、生命周期脚本、异常 patch 版本、scope 发布记录、maintainer token 权限 | | PyPI | LiteLLM、Telnyx、Lightning、durabletask、guardrails-ai、mistralai | wheel 与源码不一致、.pth 自动执行、模块导入触发、PyPI 凭据被滥用、恶意 payload、恶意 payload 横向到云与 横向到云与 K8s K8s | wheel/sdist 与 Git tag 比对、.pth 文件、短时发布版本、pip install 构建日志、PyPI token 存放位置 | | Docker Hub / 镜像仓库 | Trivy、KICS | 浮动 tag 被覆盖、镜像 digest 与源码构建不一致、私有缓存保留恶意镜像 | digest pinning、镜像 provenance、pull-through cache、CI runner 本地镜像缓存 | | OpenVSX VS Code Jenkins | Checkmarx 插件、Nx Console、Jenkins AST Scanner | 插件激活即执行、IDE/CI 插件接触开发者凭据和源码 | 插件版本、下载来源、自动更新策略、开发者机器扩展缓存 | | 云环境 | AWS、GCP、Azure、Kubernetes、Vault | CI/CD 或开发者凭据被盗后进行资源枚举、secret 读取和横向移动;Miasma durabletask 增强云身份收集与传播能力;Miasma durabletask 增强云身份收集与传播能力 | CloudTrail、K8s audit、Vault audit、Secrets Manager 访问、ECS K8s 异常操作、Azure CLI managed identity 访问记录、Azure CLI / managed identity 访问记录 | | AI / LLM 工具链 | LiteLLM、Mistral、guardrails-ai、Lightning、Azure AI samples、Azure AI samples、Claude Code hook | AI 工具常连接多个模型 API、Agent/MCP 工具运行在高权限开发环境 | 模型 API key、Agent 配置、MCP 服务依赖、.claude/ 与 .vscode/ 自动执行配置 |

2. 影响面归纳

| 层面 | 风险表现 | | — | — | | 开发者终端 | SSH key、GitHub token、npm/PyPI token、云 CLI 配置、浏览器凭据和 1Password / Vault 等本地会话可能被窃取。 | | CI/CD 流水线 | Runner 内存、OIDC token、deployment secret、registry token 成为核心目标;第三方 Action 下架或禁用还可能造成构建中断。 | | 包发布链 | 被盗 token、trusted publisher 或 GitHub secrets 或 GitHub secrets 可导致合法包发布恶意版本。 | | 镜像与插件分发链 | 浮动 tag、VSCode 扩展、Jenkins 插件和私有缓存可能让恶意制品在短窗口后继续存在。 | | 云原生环境 | K8s Service Account、Vault token、Secrets Manager、ECS SSM managed identity SSM managed identity 成为横向移动入口。 | | 地下变现链路 | 被盗源码、仓库访问、云凭据和发布权限可被作为地下市场商品继续交易。 |

3. 生态级启示

TeamPCP 说明供应链攻击已从“依赖风险”扩大为“构建发布基础设施风险”。企业若只做传统 SCA 扫描,而不审计 CI/CD、发布权限、OIDC、缓存、插件市场、镜像 provenance 和开发者终端,就难以有效防御此类攻击。

#

07|受影响生态系统全景

1. 检测与狩猎重点

| 方向 | 重点检查项 | 关联风险 | | — | — | — | | GitHub Actions | pull_request_targetid-token: write、浮动 Action 引用、异常 cache、/proc/*/memRunner.Worker、异常 orphan commit / workflow | Pwn Request、cache poisoning、OIDC token 窃取、发布链绕过 | | npm / PyPI | lockfile、生命周期脚本、.pth 文件、wheel 与 Git tag 差异、短时恶意版本、binding.gyp / Bun loader | 安装即执行、发布链绕过、自传播 | | Docker / Registry | Trivy / KICS 相关 tag、镜像 digest、pull-through cache、CI runner 本地镜像 | 浮动 tag 被覆盖、恶意镜像缓存残留 | | 开发者终端 | sysmonpgmongh-token-monitorkitty-monitor.vscode/.claude/、LaunchAgent | 持久化、IDE hook、凭据二次窃取 | | 网络外联 | scan.aquasecurtiy.orgcheckmarx.zonemodels.litellm.cloudgit-tanstack.com*.getsession.org*.raw.icp0.iocheck.git-service.comm-kosche.com | C2、dead drop、数据外传 | | 云与 K8s | AWS IAM EC2 Lambda S3 Secrets Manager / ECS、K8s nodes、Vault token | 云凭据验证、资源枚举、横向移动 | | 发布链 | npm/PyPI/Docker Hub 发布历史、异常 patch 版本、无对应 Git tag 的版本、发布者身份变化 | 发布权限被滥用 | | 插件市场 | OpenVSX、VS Code Marketplace、Jenkins 插件版本与来源 | IDE / CI 插件投毒 |

2. 关键狩猎线索

| 场景 | 具体线索 | | — | — | | Trivy / Aqua | 检查 trivy-action 的 Run Trivy step、setup-trivy 的 Setup environment step;排查是否执行过 Trivy v0.69.4 或拉取过 0.69.5/0.69.6 镜像。 | | KICS / Checkmarx | 检查 2026-03-23 的 KICS / AST GitHub Action 运行记录,以及 2026-04-22 KICS Docker Hub 镜像拉取记录。关注 audit.checkmarx.cx 与 KICS-Telemetry/2.0。 | | LiteLLM | 检查 litellm==1.82.7/1.82.8litellm_init.pth、异常 Python 启动执行逻辑和外联。 | | Telnyx | 检查 telnyx==4.87.1/4.87.2telnyx/_client.py 异常代码、WAV 下载与 Windows Startup 目录。 | | Lightning | 检查 lightning==2.6.2/2.6.3router_runtime.jsstart.pyimport lightning 后的后台线程和 Bun 下载行为。 | | TanStack | 搜索 github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885crouter_init.jslitter.catbox.moe、Session 网络连接和 poisoned cache key。 | | CanisterSprawl | 搜索 telemetry.api-monitor.comcjn37-uyaaa-aaaac-qgnva-cai.raw.icp0.io/dropX-Session-IDX-Request-Signature。 | | AntV / Nx Console | 检查 @antv/* 可疑版本、actions-cool/maintain-one-commentactions-cool/issues-helpernrwl.angular-console v18.95.0~/.local/share/kitty/cat.pykitty-monitorfiredalazer。 | | durabletask | 检查 durabletask==1.4.1/1.4.2/1.4.3/tmp/managed.pyz/tmp/rope-*.pyz~/.cache/.sys-update-check~/.cache/.sys-update-check-k8s、AWS SSM / K8s 横向行为。 | | Red Hat / Miasma | 检查 @redhat-cloud-services/* 受影响版本、异常 preinstall / binding.gyp_index.js、描述为 Miasma: The Spreading Blight 的 GitHub 仓库。 | | GitHub Grafana Microsoft | 检查 Nx Console 扩展暴露、异常 GitHub CLI 凭据使用、私有仓库批量访问、Azure/functions-action 等第三方 Action 是否因上游仓库禁用导致 CI/CD 中断。 | | GitHub 组织 | 检查 tpcp-docsdocs-tpcp、Dune 主题仓库、Checkmarx Configuration StorageShai-Hulud: Here We Go AgainMiasma: The Spreading BlightPUSH UR T3MPRR。 |

3. 应急处置优先级

| 优先级 | 动作 | | — | — | | 立即隔离 | 对确认安装或执行过恶意版本的开发机、CI runner、构建容器进行隔离,避免继续使用原环境构建或发布。 | | 保留证据 | 保存安装日志、CI 日志、网络连接、进程列表、可疑文件、云审计日志和包/镜像缓存。 | | 轮换凭据 | 轮换 GitHub、npm、PyPI、Docker Hub、AWS、GCP、Azure、Kubernetes、Vault、SSH、数据库密码等可能暴露的凭据。 | | 重建环境 | 对自托管 CI runner、受影响开发机和构建镜像,优先从干净基线重建。 | | 清理持久化 | 排查并清理 sysmonpgmongh-token-monitor.pth、LaunchAgent、IDE hook。 | | 审计发布链 | 检查是否有攻击者利用被盗 token 发布更多包、镜像或插件。 |

4. 长期加固清单

| 领域 | 加固建议 | | — | — | | GitHub Actions | 禁止在 pull_request_target 中执行 fork 代码;Action 固定到 full SHA;最小化 GITHUB_TOKEN 权限;仅在真实发布 job 中启用 id-token: write;隔离 PR cache 与发布 cache。 | | npm / PyPI | 启用 2FA;使用细粒度 token 或 Trusted Publishing;限制 token 可发布范围;使用 hash pinning;比对 npm tarball / PyPI wheel 与 Git tag。 | | Docker / 镜像 | 避免 latest;使用 digest pinning;启用镜像签名、SBOM、provenance;清理私有代理中的恶意 digest。 | | 开发者终端 | 对 .ssh.npmrc.pypirc、Docker config、云 CLI 配置做访问监控;避免长期 token 落盘;IDE 插件使用 allowlist。 | | 云与 K8s | 使用短期凭据;最小化 IAM Service Account 权限;限制 Secrets Manager Vault 批量读取;监控 kube-system 高权限 Pod。 | | 发布权限 | 维护者最小化;发布账号与日常开发账号分离;受保护环境和多人审批;发布动作可审计;硬件安全密钥保护高权限账号。 | | 监控告警 | 包发布后新增生命周期脚本、GitHub tag force-push、CI 访问陌生域名、无对应 Git tag 的发布版本、异常 release asset、新建可疑仓库。 | | 治理流程 | 建立供应链事件暴露面分析、密钥一键轮换、runner 重建、私有依赖代理阻断、SBOM / provenance 校验等能力。 |

5. 建设目标

防御 TeamPCP 类攻击的关键不是阻止使用开源组件,而是让开源组件进入企业环境前具备可验证的来源、可追溯的构建过程、可控制的发布权限和可快速响应的凭据治理能力。

08|总结与趋势研判

1. TeamPCP 代表了供应链攻击的新阶段

TeamPCP 的一系列事件说明,供应链攻击正在从“投放恶意依赖”进入“控制构建与发布基础设施”的新阶段。攻击者不再满足于注册 typosquat 包或提交恶意 PR,而是直接瞄准 GitHub Actions、npm/PyPI 发布权限、Docker Hub tag、OpenVSX 插件、CI Runner 内存和云端 secret。

这类攻击的最大危险在于:它利用的是开发体系本身的自动化信任。一旦攻击者控制某个构建或发布节点,恶意代码就会被下游系统主动拉取、执行和信任。

2. 几个关键趋势

2.1 攻击目标从生产系统前移到研发系统

过去,攻击者常直接攻击生产服务器或业务应用。TeamPCP 则表明,研发系统已经成为更高价值的目标:

  • 开发者机器中有 SSH key、GitHub token、云 CLI 配置。
  • CI Runner 中有部署权限、registry token、OIDC token。
  • 包发布账号可以影响成千上万下游用户。
  • 安全扫描工具本身常运行在高权限环境中。

攻击研发系统,相当于攻击软件进入生产环境前的“源头”。

2.2 OIDC 与短期凭据成为新攻击面

企业正在减少长期 token,转向 OIDC trusted publishing 和云身份联合。这本来是安全进步,但 TanStack 事件证明:

  • 短期 token 仍然可能在运行时被窃取。
  • 只要恶意代码能在具备 id-token: write 的 runner 中执行,就可能获取临时身份。
  • OIDC 的安全性取决于 workflow trust boundary 是否设计正确。

未来攻击者会更关注 runner 内存、OIDC token、workload identity 和 federation 配置。

2.3 自传播蠕虫回到开源生态

CanisterWorm 与 Mini Shai-Hulud 显示,供应链蠕虫正在回归:

  1. 获取 registry token。
  2. 枚举维护者可发布包。
  3. 注入恶意脚本。
  4. 自动发布新版本。
  5. 下游安装后继续传播。

与传统蠕虫不同,这类蠕虫传播路径不是网络漏洞,而是包管理器和维护者权限。

2.4 合法平台被用作 C2 与外传通道

TeamPCP 大量滥用合法平台:

  • GitHub 仓库与 release asset
  • GitHub commit / dead drop
  • Cloudflare Tunnel
  • ICP Canister
  • Session messenger network
  • OpenVSX npm PyPI / Docker Hub

2.5 AI 与开发者工具链成为高价值入口

LiteLLM、Mistral、guardrails-ai、Lightning、Claude Code / VS Code hook 等线索说明,AI 开发工具链正在成为供应链攻击的新热点。原因很直接:

  • AI 工具常连接多个模型服务和 API key。
  • Agent MCP LLM 编排工具往往运行在开发者高权限环境。
  • AI 相关包迭代快,依赖复杂,安全审计滞后。
  • 企业在快速引入 AI 工具时可能忽略发布链安全。

3. 对企业的启示

3.1 SCA 不等于供应链安全

传统 SCA 主要识别已知漏洞和恶意包,但 TeamPCP 攻击的是:

  • workflow 配置
  • 发布权限
  • registry token
  • runner cache
  • OIDC token
  • Docker tag
  • IDE 插件
  • wheel 与源码差异

因此,企业需要从“依赖扫描”升级为“构建发布全链路安全”。

3.2 CI/CD 是核心安全边界

CI/CD 不应被视为普通自动化脚本,而应视为生产级安全边界。它通常拥有:

  • 源码访问权
  • secret 访问权
  • 发布权
  • 部署权
  • 云资源操作权

任何在 CI 中执行的第三方代码,都应按高风险处理。

3.3 发布链需要可验证

未来更可靠的供应链应具备:

  • 可验证源码来源
  • 可验证构建过程
  • 可验证发布身份
  • 可验证包内容
  • 可撤销和可追踪的发布权限

SBOM、SLSA、Sigstore、cosign、npm provenance、PyPI Trusted Publishing 等机制会越来越重要,但它们必须与 workflow 隔离、最小权限和人工审批结合使用。

4. 对开源维护者的启示

开源维护者需要重新审视几个问题:

  1. 发布 token 是否长期有效?
  2. 有多少维护者拥有同等发布权限?
  3. 是否使用浮动 GitHub Action?
  4. 是否允许 fork PR 触发危险 workflow?
  5. 发布包是否自动比对源码 tag?
  6. 是否监控异常版本发布?
  7. 是否能在 30 分钟内撤回恶意版本并通知用户?

TeamPCP 事件中,多数项目响应速度很快,但也暴露出一个现实:即使窗口只有几十分钟,全球自动化构建系统也可能已经拉取并执行了恶意版本。

5. 对安全团队的启示

安全团队应重点补齐以下能力:

  • 供应链事件快速暴露面分析。
  • GitHub Actions 配置审计。
  • registry 发布监控。
  • CI Runner 网络与进程行为监控。
  • 云凭据异常使用检测。
  • 开发者终端持久化检查。
  • 统一密钥轮换流程。
  • 私有依赖代理与恶意版本阻断。

未来供应链事件处置的关键不是“是否知道 IOC”,而是“能否快速判断自己是否执行过恶意代码,以及哪些凭据可能泄露”。

6. 文章结论

TeamPCP 不是一次单点攻击,而是一场围绕现代软件供应链展开的连续战役。它把开发者工具、CI/CD、包管理器、云凭据、GitHub Actions 和 AI 工具链串成一条可被攻击者利用的路径。

从 Trivy 到 KICS,从 LiteLLM 到 Telnyx,从 Bitwarden 到 TanStack,TeamPCP 的演进轨迹越来越清晰:

  • 初期依赖被盗凭据和 tag 覆盖。
  • 中期形成 CanisterWorm 式 npm 自传播。
  • 后期组合 cache poisoning、OIDC token 窃取、Session 网络、IDE hook 和 GitHub dead drop。

这说明供应链攻击正在进入更体系化、更自动化、更隐蔽的阶段。对于企业和开源社区而言,真正的防御重点不只是“不要安装恶意包”,而是要重新设计软件从源码到构建、发布、部署、运行的信任链。

09|参考资料与链接

| 类别 | 名称 | 链接 | | — | — | — | | Wiz | Trivy Compromised by TeamPCP | https://www.wiz.io/blog/trivy-compromised-teampcp-supply-chain-attack | | Wiz | KICS GitHub Action Compromised: TeamPCP Supply Chain Attack | https://www.wiz.io/blog/teampcp-attack-kics-github-action | | Wiz | LiteLLM TeamPCP Supply Chain Attack: Malicious PyPI Packages | https://www.wiz.io/blog/threes-a-crowd-teampcp-trojanizes-litellm-in-continuation-of-campaign | | Wiz | Supply Chain Campaign Targets SAP npm Packages with Credential-Stealing Malware | https://www.wiz.io/blog/mini-shai-hulud-supply-chain-sap-npm | | Wiz | Mini Shai-Hulud Strikes Again: TanStack + more npm Packages Compromised | https://www.wiz.io/blog/mini-shai-hulud-strikes-again-tanstack-more-npm-packages-compromised | | Socket.dev | CanisterWorm: npm Publisher Compromise Deploys Backdoor Across 29+ Packages | https://socket.dev/blog/canisterworm-npm-publisher-compromise-deploys-backdoor-across-29-packages | | Socket.dev | Namastex.ai npm Packages Hit with TeamPCP-Style CanisterWorm Malware | https://socket.dev/blog/namastex-npm-packages-compromised-canisterworm | | Docker | Trivy, KICS, and the shape of supply chain attacks so far in 2026 | https://www.docker.com/blog/trivy-kics-and-the-shape-of-supply-chain-attacks-so-far-in-2026/ | | LiteLLM | Security Update: Suspected Supply Chain Incident | https://docs.litellm.ai/blog/security-update-march-2026 | | GitHub Issue | LiteLLM Issue #24512 | https://github.com/BerriAI/litellm/issues/24512 | | GitHub Issue | Telnyx Python SDK Issue #235 | https://github.com/team-telnyx/telnyx-python/issues/235 | | Checkmarx | Ongoing Checkmarx Supply Chain Security Incident | https://checkmarx.com/blog/ongoing-security-updates/ | | Bitwarden | Bitwarden Statement on Checkmarx Supply Chain Incident | https://community.bitwarden.com/t/bitwarden-statement-on-checkmarx-supply-chain-incident/96127 | | GitHub Issue | Bitwarden CLI Issue #20353 | https://github.com/bitwarden/clients/issues/20353 | | Lightning AI | PyTorch Lightning Supply Chain Attack | https://lightning.ai/blog/pytorch-lightning-supply-chain-attack | | TanStack | Postmortem: TanStack npm supply-chain compromise | https://tanstack.com/blog/npm-supply-chain-compromise-postmortem | | Rami McCarthy | Incident Timeline: TeamPCP Supply Chain Campaign | https://ramimac.me/teampcp/ |


10|IOC 指标汇总

本章汇总公开资料中的主要 IOC,便于安全团队按网络、文件、包版本、哈希和行为特征进行排查。

1. 网络与外联指标

| 指标 | 类型 | 关联事件 | | — | — | — | | scan.aquasecurtiy[.]org | C2 / typosquat 域名 | Trivy | | 45.148.10.212 | IP | Trivy C2 | | tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io | ICP Canister C2 | Trivy / CanisterWorm | | tdtqy-oyaaa-aaaae-af2dq-cai | ICP Canister ID | CanisterWorm | | plug-tab-protective-relay.trycloudflare.com | Cloudflare Tunnel | Aqua 凭据外传 | | checkmarx[.]zone | C2 / 外传域名 | KICS / LiteLLM | | 83.142.209.11 | IP | checkmarx[.]zone | | models.litellm[.]cloud | 外传域名 | LiteLLM | | 83.142.209.203 | IP | Telnyx | | 83.142.209.203:8080/ringtone.wav | Payload URL | Telnyx Linux/macOS | | 83.142.209.203:8080/hangup.wav | Payload URL | Telnyx Windows | | audit.checkmarx[.]cx | 外传域名 | KICS Docker Hub | | checkmarx.cx | 域名 | Checkmarx 后续公告 | | updates.checkmarx.cx | 域名 | Checkmarx 后续公告 | | 91.195.240.123 | IP | Checkmarx 后续公告 | | 94.154.172.43 | IP | Checkmarx / Mini Shai-Hulud | | 94.154.172.183 | IP | Checkmarx 后续公告 | | zero.masscan.cloud | 域名 | Mini Shai-Hulud | | telemetry.api-monitor[.]com | 域名 | Namastex / CanisterSprawl | | cjn37-uyaaa-aaaac-qgnva-cai.raw.icp0[.]io/drop | ICP C2 | Namastex / CanisterSprawl | | git-tanstack[.]com | C2 / typosquat 域名 | TanStack / Mini Shai-Hulud | | git-tanstack[.]com/tmp/transformers.pyz | PyPI 变种载荷 URL | Mistral / guardrails-ai | | https://litter.catbox.moe/h8nc9u.js | 二阶段载荷 URL | TanStack | | https://litter.catbox.moe/7rrc6l.mjs | 二阶段载荷 URL | TanStack | | filev2.getsession.org | Session 文件服务器 | TanStack | | seed1.getsession.org | Session seed | TanStack | | seed2.getsession.org | Session seed | TanStack | | seed3.getsession.org | Session seed | TanStack | | 83.142.209[.]194 | IP | TanStack Python 变种 |

2. 文件、路径与持久化指标

| 路径 / 文件 | 关联事件 | 说明 | | — | — | — | | tpcp.tar.gz | 多事件 | 被盗数据归档名 | | ~/.config/systemd/user/sysmon.py | Trivy | 持久化脚本 | | ~/.config/systemd/user/sysmon.service | Trivy / KICS | systemd 用户服务 | | /root/.config/sysmon/sysmon.py | KICS / K8s | 节点后门 | | /root/.config/systemd/user/sysmon.service | KICS / K8s | 节点持久化服务 | | /tmp/pglog | Trivy / CanisterWorm | 下载执行路径 | | /tmp/.pg_state | CanisterWorm | 状态文件 | | ~/.local/share/pgmon/service.py | CanisterWorm | Python dropper | | ~/.config/systemd/user/pgmon.service | CanisterWorm | systemd 用户服务 | | litellm_init.pth | LiteLLM | Python 启动自动执行 | | p.py | LiteLLM | 写入磁盘的 payload | | telnyx/_client.py | Telnyx | 被注入恶意代码 | | %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe | Telnyx | Windows 持久化 | | setup.mjs | Mini Shai-Hulud | Bun 下载器 | | execution.js | Mini Shai-Hulud | 主 payload | | .claude/execution.js | Mini Shai-Hulud | Claude Code 持久化 | | .claude/setup.mjs | Mini Shai-Hulud | Claude Code 下载器 | | .claude/settings.json | Mini Shai-Hulud | SessionStart hook | | .vscode/tasks.json | Mini Shai-Hulud | VS Code folderOpen 触发 | | .vscode/setup.mjs | Mini Shai-Hulud | VS Code 下载器 | | router_init.js | TanStack | 约 2.3MB 混淆 payload | | router_runtime.js | TanStack / Lightning | 运行时 artifact | | tanstack_runner.js | TanStack | 运行时 artifact | | start.py | Lightning | 恶意 Python 入口文件 | | ~/Library/LaunchAgents/com.user.gh-token-monitor.plist | TanStack | macOS 持久化 | | ~/.config/systemd/user/gh-token-monitor.service | TanStack | Linux 持久化 |

3. 仓库、GitHub 与工作流指标

| 指标 | 说明 | | — | — | | tpcp-docs | Trivy 备用外传仓库名 | | docs-tpcp | KICS 备用外传仓库名 | | zblgg/configuration | TanStack 攻击者 fork | | github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c | TanStack 恶意 Git dependency | | 65bf499d16a5e8d25ba95d69ec9790a6dd4a1f14 | TanStack fork 恶意 commit | | claude <[email protected]> | TanStack forged commit identity | | beautifulcastle | GitHub 搜索回退关键词 | | OhNoWhatsGoingOnWithGitHub | GitHub token 回退提交前缀 | | Shai-Hulud: Here We Go Again | TanStack dead drop 仓库描述 | | Checkmarx Configuration Storage | Mini Shai-Hulud 外传仓库描述 | | PUSH UR T3MPRR | Python 变种 GitHub fallback 仓库描述 | | Linux-pnpm-store-6f9233a50def742c09fde54f56553d6b449a535adf87d4083690539f49ae4da11 | TanStack poisoned cache key | | 25613093674 | TanStack 恶意发布相关 workflow run | | 25691781302 | TanStack 恶意发布相关 workflow run | | 05f9e609d79eed391015e11380dee4b5c9ead0b6e2e7f0134e6e51767a87323026 | TanStack Session recipient ID |

4. 恶意包、版本与分发渠道

Trivy / Aqua

  • Trivy v0.69.4

  • Trivy Docker 镜像 0.69.50.69.6

  • 恶意制品分发渠道包括 GitHub Releases、Docker Hub、GHCR、ECR

  • trivy-action

    多数历史 tag 被覆盖

  • setup-trivy

    7 个 tag 被覆盖

CanisterWorm

  • @emilgroup/account-sdk

    1.41.11.41.2

  • @emilgroup/account-sdk-node

    1.40.11.40.2

  • @emilgroup/billing-sdk

    1.56.11.56.2

  • @emilgroup/insurance-sdk

    1.97.11.97.2

  • @teale.io/eslint-config

    1.8.91.8.10

KICS / Checkmarx

  • KICS GitHub Action:v1v1.0v1.1v1.2v1.7.0v2v2.0.0v2.1.0v2.1.20

  • OpenVSX:ast-results v2.53.0

  • OpenVSX:cx-dev-assist v1.7.0

  • ast-github-action

    至少 2.3.28,后续公告中还出现 2.3.35

  • KICS Docker Hub:latestalpinedebianv2.1.20v2.1.20-debianv2.1.21v2.1.21-debian

  • Jenkins:checkmarx-ast-scanner-2026.5.09

LiteLLM / Telnyx / Bitwarden

  • litellm==1.82.7
  • litellm==1.82.8
  • telnyx==4.87.1
  • telnyx==4.87.2
  • @bitwarden/[email protected]

Mini Shai-Hulud / SAP / Lightning / Intercom

  • @cap-js/[email protected]
  • @cap-js/[email protected]
  • @cap-js/[email protected]
  • [email protected]
  • [email protected]
  • [email protected]
  • [email protected]

Namastex / CanisterSprawl

  • @automagik/genie

    4.260421.33 至 4.260421.39

  • pgserve

    1.1.111.1.121.1.13

  • @fairwords/websocket

    1.0.381.0.39

  • @fairwords/loopback-connector-es

    1.4.31.4.4

  • @openwebconcept/[email protected]

  • @openwebconcept/[email protected]

TanStack / May 2026

  • @tanstack/[email protected]

    1.161.12

  • @tanstack/[email protected]

    1.169.8

  • @tanstack/[email protected]

    1.169.8

  • @tanstack/[email protected]

    1.166.49

  • 共 42 个 @tanstack/* 包、84 个版本

其他受影响包

  • @uipath/*

    多个包

  • @mistralai/mistralai

    2.2.22.2.32.2.4

  • [email protected]

  • [email protected]

  • 以及 @squawk/*@tallyui/*cmux-agent-mcpnextmove-mcp 等多个包

5. 文件哈希与镜像 Digest

LiteLLM

  • litellm_init.pth

    RECORD SHA256:ceNa7wMJnNHy1kRnNCcwJaFjWX3pORLfMh7xGL8TUjg

Telnyx

  • telnyx-4.87.1-py3-none-any.whl

    SHA256:7321caa303fe96ded0492c747d2f353c4f7d17185656fe292ab0a59e2bd0b8d9

  • telnyx-4.87.2-py3-none-any.whl

    SHA256:cd08115806662469bbedec4b03f8427b97c8a4b3bc1442dc18b72b4e19395fe3

KICS / OpenVSX

  • ast-results-2.53.0.vsix

    SHA256:65bd72fcddaf938cefdf55b3323ad29f649a65d4ddd6aea09afa974dfc7f105d

  • cx-dev-assist-1.7.0.vsix

    SHA256:744c9d61b66bcd2bb5474d9afeee6c00bb7e0cd32535781da188b80eb59383e0

  • checkmarx-util-1.0.4.tgz

    SHA256:0d66d8c7e02574ff0d3443de0585af19c903d12466d88573ed82ec788655975c

  • environmentAuthChecker.js

    SHA256:527f795a201a6bc114394c4cfd1c74dce97381989f51a4661aafbc93a4439e90

KICS Docker Hub

alpine / v2.1.20 / v2.1.21

  • Index manifest digest:sha256:2588a44890263a8185bd5d9fadb6bc9220b60245dbcbc4da35e1b62a6f8c230d
  • amd64 image digest:sha256:d186161ae8e33cd7702dd2a6c0337deb14e2b178542d232129c0da64b1af06e4
  • arm64 image digest:sha256:415610a42c5b51347709e315f5efb6fffa588b6ebc1b95b24abf28088347791b

debian / v2.1.20-debian / v2.1.21-debian

  • Index manifest digest:sha256:222e6bfed0f3bb1937bf5e719a2342871ccd683ff1c0cb967c8e31ea58beaf7b
  • amd64 image digest:sha256:a6871deb0480e1205c1daff10cedf4e60ad951605fd1a4efaca0a9c54d56d1cb
  • arm64 image digest:sha256:ff7b0f114f87c67402dfc2459bb3d8954dd88e537b0e459482c04cffa26c1f07

latest

  • Index manifest digest:sha256:a0d9366f6f0166dcbf92fcdc98e1a03d2e6210e8d7e8573f74d50849130651a0
  • amd64 image digest:sha256:26e8e9c5e53c972997a278ca6e12708b8788b70575ca013fd30bfda34ab5f48f
  • arm64 image digest:sha256:7391b531a07fccbbeaf59a488e1376cfe5b27aef757430a36d6d3a087c610322

Checkmarx Jenkins 插件

  • checkmarx-ast-scanner-2026.5.09.hpi

    SHA256:01ff1e56fd59a8fa525d97e670f7f297a1a204331b89b2cd4e36a9abc6419203

  • checkmarx-ast-scanner-2026.5.09.jar

    SHA256:f50a96d26a5b0beb29de4127e82b2bf350c21511e5a43d286e43f798dc6cd53f

  • checkmarx-ast-scanner-2026.5.09.pom

    SHA256:3ddb8967919a801b3c383e58cddceab21138134c6a26560d99e2672e86f36f2a

Lightning

  • router_runtime.js

    SHA256:5f5852b5f604369945118937b058e49064612ac69826e0adadca39a357dfb5b1

  • start.py

    SHA256:8046a11187c135da6959862ff3846e99ad15462d2ec8a2f77a30ad53ebd5dcf2

TanStack

  • router_init.js

    SHA256:ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c

  • router_init.js

    SHA256:2ec78d556d696e208927cc503d48e4b5eb56b31abc2870c2ed2e98d6be27fc96

  • setup.mjs

    SHA256:2258284d65f63829bd67eaba01ef6f1ada2f593f9bbe41678b2df360bd90d3df

6. 行为指标

  • GitHub Actions 日志中出现异常读取 /proc/*/mem

  • Runner 中出现 tpcp.tar.gz

  • GitHub 账号下异常创建 tpcp-docsdocs-tpcp 或 Dune 主题仓库。

  • npm 包 manifest 中出现异常 preinstallpostinstallprepare

  • optionalDependencies

    指向陌生 GitHub commit。

  • PyPI wheel 中出现仓库源码没有的 .pth 文件。

  • 系统出现 pgmonsysmongh-token-monitor 用户服务。

  • CI 运行时访问 checkmarx[.]zonegit-tanstack[.]com*.getsession.org

  • Docker / CI 出站流量中出现 KICS-Telemetry/2.0 User-Agent。

  • import lightning

    后出现异常后台线程、Bun 下载或大型混淆 JavaScript 执行。

  • 浏览器凭据、钱包目录、Vault 配置、Kubernetes Service Account token 被异常读取。

END

更多精彩内容点击下方扫码关注哦~

关注云鼎实验室,获取更多安全情报


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:云鼎实验室 腾讯云安全 腾讯云安全《投毒即服务:TeamPCP如何引爆AI时代供应链危机》

评论:0   参与:  0