文章总结: TeamPCP是一个自2025年下半年活跃的AI驱动供应链攻击组织,其攻击横跨npm、PyPI、DockerHub等10+分发渠道,通过窃取凭据劫持发布权限进行供应链投毒。该组织利用AnthropicClaude、GPT-4o等AI工具生成恶意代码,使武器迭代周期缩短至2-3周,并开源核心框架引发第三方变种扩散,首次实战击穿SLSABuildLevel3可信发布标准,对开源供应链安全构成严重威胁。 综合评分: 92 文章分类: 供应链安全,恶意软件,威胁情报,漏洞分析,安全运营
投毒即服务: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 驱动供应链攻击组织的全貌。
核心观点
- 攻击目标覆盖整个研发供应链。 从生态层面看,攻击横跨 npm、PyPI、GitHub Actions、Docker Hub、OpenVSX、VS Code Marketplace 等 10+ 分发与构建渠道。从受害对象看,涉及数十个知名开源项目及 GitHub、微软等大型平台组织的内部仓库。传统的”只审查应用代码依赖”策略对此类攻击完全失效。
- 攻击重点是信任链路。 包括 GitHub Actions 工作流、npm/PyPI 发布权限、Docker Hub 镜像、OpenVSX 插件、CI Runner 内存、GitHub OIDC trusted publishing 等。攻击者不是在代码中找漏洞,而是在软件从源码到用户手中的传输管道上逐个攻破信任节点。
- 凭据是攻击闭环的核心资产。 攻击者持续收集环境变量、SSH 密钥、GitHub/npm/PyPI token、AWS/GCP/Azure 凭据、Kubernetes Service Account、Vault token、Docker 配置和数据库密码。凭据不仅是单次入侵的终点,更是启动下一轮供应链扩散的燃料。
- AI 编码工具被全面武器化,攻击效率呈指数级提升。 公开证据显示 TeamPCP 以 Anthropic Claude 为主力生成项目脚手架与后门代码,GPT-4o 优化混淆免杀逻辑,GitHub Copilot 补全攻击片段,构建了人机协同的恶意代码生产流水线。这使得武器从 Cloud Stealer → CanisterWorm → .pth/WAV 隐写 → Mini Shai-Hulud → 开源二开变种的 5 代进化在不到 3 个月内完成,迭代速度远超传统供应链攻击组织。AI 同时被用于自动化目标侦察、多态载荷批量生成和溯源干扰,使传统基于签名匹配的检测体系面临结构性失效。
- 武器体系持续演进且已开源扩散。 从 TeamPCP Cloud Stealer、CanisterWorm、sysmon.py/pgmon 持久化后门,到 Python .pth 注入、WAV 隐写投递、Mini Shai-Hulud 自传播蠕虫、Session 网络外传与 GitHub dead drop,武器库随事件不断扩充。2026 年 5 月核心框架开源后,Miasma 和 Phantom Gyp 变种被第三方快速复用,攻击活动已超越单一操作者的控制范围,归因难度显著上升。
- 多起事件具有战役化关联,形成连贯作战图谱。 基础设施(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-docs、docs-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[.]orgcheckmarx[.]zonemodels.litellm[.]cloudgit-tanstack[.]com- ICP Canister:
tdtqy-oyaaa-aaaae-af2dq-cai - Cloudflare Tunnel:
plug-tab-protective-relay.trycloudflare.com
3.4 技术模式复用
攻击者反复使用以下模式:
- 从
/proc/<pid>/mem读取 GitHub ActionsRunner.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 的运营方式有明显“平台化”和“生态化”倾向:
- 工具公开与攻击众包。 地下论坛帖文显示,相关人员曾以“供应链攻击竞赛”的形式公开推广 Shai-Hulud worm,要求参与者使用该工具链,并以受影响软件包的周/月下载量作为衡量标准,同时通过 XMR 奖金、访问权收购和后续变现分成吸引第三方参与。这说明相关工具链公开后,攻击活动存在从单一团伙操作向第三方复用、改造和规模化扩散的风险。
- 源码、凭据与访问权限变现。 访谈材料中,攻击者声称出售 GitHub 私有仓库数据;其他公开线索还显示,其曾围绕 GitHub、MistralAI、Lightning.ai 等相关源码或访问权限进行地下售卖。本文不展开具体数据内容,仅将其作为 TeamPCP 将源码资产、访问权限和供应链投毒能力商品化的侧面证据。
- 地下协作与访问交易网络。 除 LAPSUS$、BreachForums 等公开提及的协作对象外,公开线索中还出现
the gentlemen、HasanBroker'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/
#
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.gztpcp-docsdocs-tpcpscan.aquasecurtiy[.]orgcheckmarx[.]zone
3. CanisterWorm
CanisterWorm 是 TeamPCP 风格 npm 蠕虫的重要代表。其名称来自攻击者使用 Internet Computer Protocol Canister 作为 dead-drop C2。
典型行为
- npm
postinstall执行node index.js。 - 加载器读取 base64 payload。
- Python dropper 写入本地。
- 创建
systemd --user服务。 - 每隔约 3000 秒轮询 ICP Canister。
- 下载二阶段 payload 到
/tmp/pglog并执行。 - 读取 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.pthp.pymodels.litellm[.]cloudcheckmarx[.]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.wavhttp://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.mjsexecution.js.claude/execution.js.claude/setup.mjs.claude/settings.json.vscode/tasks.json.vscode/setup.mjs
8. TanStack 变种基础设施
TanStack 事件中,攻击者使用了更复杂的三通道外传体系:
- Typosquat 域名:
git-tanstack[.]com - Session 网络:
filev2.getsession.org、seed1/2/3.getsession.org - 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[.]org、models.litellm[.]cloud、git-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.5、0.69.6 镜像;Aqua 内部仓库被公开 | 攻击从 GitHub release / Actions 扩展到容器镜像分发链。 |
| 2026-03-23 12:53 | Checkmarx OpenVSX 扩展出现恶意版本 | ast-results v2.53.0 、cx-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 镜像出现恶意版本 | 污染 latest、alpine、debian、v2.1.20、v2.1.21 等 tag | 恶意 KICS 保留扫描功能,同时外传 IaC 扫描结果。 |
| 2026-04-22 | Bitwarden CLI npm 分发短时污染 | @bitwarden/[email protected] 被投毒 | 影响窗口期通过 npm 安装 CLI 的用户。 |
| 2026-04-22 | Namastex / CanisterSprawl 波次披露 | @automagik/genie 、pgserve 等受影响 | 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.66 、cx-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-service、mbt 等受影响。 |
| 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-components 、javascript-clients、platform-frontend-ai-toolkit;oidc-* 分支;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_target 、id-token: write、浮动 Action 引用、异常 cache、/proc/*/mem、Runner.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 被覆盖、恶意镜像缓存残留 |
| 开发者终端 | sysmon 、pgmon、gh-token-monitor、kitty-monitor、.vscode/、.claude/、LaunchAgent | 持久化、IDE hook、凭据二次窃取 |
| 网络外联 | scan.aquasecurtiy.org 、checkmarx.zone、models.litellm.cloud、git-tanstack.com、*.getsession.org、*.raw.icp0.io、check.git-service.com、m-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.8、litellm_init.pth、异常 Python 启动执行逻辑和外联。 |
| Telnyx | 检查 telnyx==4.87.1/4.87.2、telnyx/_client.py 异常代码、WAV 下载与 Windows Startup 目录。 |
| Lightning | 检查 lightning==2.6.2/2.6.3、router_runtime.js、start.py、import lightning 后的后台线程和 Bun 下载行为。 |
| TanStack | 搜索 github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c、router_init.js、litter.catbox.moe、Session 网络连接和 poisoned cache key。 |
| CanisterSprawl | 搜索 telemetry.api-monitor.com、cjn37-uyaaa-aaaac-qgnva-cai.raw.icp0.io/drop、X-Session-ID、X-Request-Signature。 |
| AntV / Nx Console | 检查 @antv/* 可疑版本、actions-cool/maintain-one-comment、actions-cool/issues-helper、nrwl.angular-console v18.95.0、~/.local/share/kitty/cat.py、kitty-monitor、firedalazer。 |
| 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-docs、docs-tpcp、Dune 主题仓库、Checkmarx Configuration Storage、Shai-Hulud: Here We Go Again、Miasma: The Spreading Blight、PUSH UR T3MPRR。 |
3. 应急处置优先级
| 优先级 | 动作 |
| — | — |
| 立即隔离 | 对确认安装或执行过恶意版本的开发机、CI runner、构建容器进行隔离,避免继续使用原环境构建或发布。 |
| 保留证据 | 保存安装日志、CI 日志、网络连接、进程列表、可疑文件、云审计日志和包/镜像缓存。 |
| 轮换凭据 | 轮换 GitHub、npm、PyPI、Docker Hub、AWS、GCP、Azure、Kubernetes、Vault、SSH、数据库密码等可能暴露的凭据。 |
| 重建环境 | 对自托管 CI runner、受影响开发机和构建镜像,优先从干净基线重建。 |
| 清理持久化 | 排查并清理 sysmon、pgmon、gh-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 显示,供应链蠕虫正在回归:
- 获取 registry token。
- 枚举维护者可发布包。
- 注入恶意脚本。
- 自动发布新版本。
- 下游安装后继续传播。
与传统蠕虫不同,这类蠕虫传播路径不是网络漏洞,而是包管理器和维护者权限。
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. 对开源维护者的启示
开源维护者需要重新审视几个问题:
- 发布 token 是否长期有效?
- 有多少维护者拥有同等发布权限?
- 是否使用浮动 GitHub Action?
- 是否允许 fork PR 触发危险 workflow?
- 发布包是否自动比对源码 tag?
- 是否监控异常版本发布?
- 是否能在 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.5、0.69.6 -
恶意制品分发渠道包括 GitHub Releases、Docker Hub、GHCR、ECR
-
trivy-action多数历史 tag 被覆盖
-
setup-trivy7 个 tag 被覆盖
CanisterWorm
-
@emilgroup/account-sdk1.41.1、1.41.2 -
@emilgroup/account-sdk-node1.40.1、1.40.2 -
@emilgroup/billing-sdk1.56.1、1.56.2 -
@emilgroup/insurance-sdk1.97.1、1.97.2 -
@teale.io/eslint-config1.8.9、1.8.10
KICS / Checkmarx
-
KICS GitHub Action:
v1、v1.0、v1.1、v1.2–v1.7.0、v2、v2.0.0、v2.1.0–v2.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:
latest、alpine、debian、v2.1.20、v2.1.20-debian、v2.1.21、v2.1.21-debian -
Jenkins:
checkmarx-ast-scanner-2026.5.09
LiteLLM / Telnyx / Bitwarden
litellm==1.82.7litellm==1.82.8telnyx==4.87.1telnyx==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/genie4.260421.33至4.260421.39 -
pgserve1.1.11、1.1.12、1.1.13 -
@fairwords/websocket1.0.38、1.0.39 -
@fairwords/loopback-connector-es1.4.3、1.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/mistralai2.2.2、2.2.3、2.2.4 -
[email protected] -
[email protected] -
以及
@squawk/*、@tallyui/*、cmux-agent-mcp、nextmove-mcp等多个包
5. 文件哈希与镜像 Digest
LiteLLM
-
litellm_init.pthRECORD SHA256:
ceNa7wMJnNHy1kRnNCcwJaFjWX3pORLfMh7xGL8TUjg
Telnyx
-
telnyx-4.87.1-py3-none-any.whlSHA256:
7321caa303fe96ded0492c747d2f353c4f7d17185656fe292ab0a59e2bd0b8d9 -
telnyx-4.87.2-py3-none-any.whlSHA256:
cd08115806662469bbedec4b03f8427b97c8a4b3bc1442dc18b72b4e19395fe3
KICS / OpenVSX
-
ast-results-2.53.0.vsixSHA256:
65bd72fcddaf938cefdf55b3323ad29f649a65d4ddd6aea09afa974dfc7f105d -
cx-dev-assist-1.7.0.vsixSHA256:
744c9d61b66bcd2bb5474d9afeee6c00bb7e0cd32535781da188b80eb59383e0 -
checkmarx-util-1.0.4.tgzSHA256:
0d66d8c7e02574ff0d3443de0585af19c903d12466d88573ed82ec788655975c -
environmentAuthChecker.jsSHA256:
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.hpiSHA256:
01ff1e56fd59a8fa525d97e670f7f297a1a204331b89b2cd4e36a9abc6419203 -
checkmarx-ast-scanner-2026.5.09.jarSHA256:
f50a96d26a5b0beb29de4127e82b2bf350c21511e5a43d286e43f798dc6cd53f -
checkmarx-ast-scanner-2026.5.09.pomSHA256:
3ddb8967919a801b3c383e58cddceab21138134c6a26560d99e2672e86f36f2a
Lightning
-
router_runtime.jsSHA256:
5f5852b5f604369945118937b058e49064612ac69826e0adadca39a357dfb5b1 -
start.pySHA256:
8046a11187c135da6959862ff3846e99ad15462d2ec8a2f77a30ad53ebd5dcf2
TanStack
-
router_init.jsSHA256:
ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c -
router_init.jsSHA256:
2ec78d556d696e208927cc503d48e4b5eb56b31abc2870c2ed2e98d6be27fc96 -
setup.mjsSHA256:
2258284d65f63829bd67eaba01ef6f1ada2f593f9bbe41678b2df360bd90d3df
6. 行为指标
-
GitHub Actions 日志中出现异常读取
/proc/*/mem。 -
Runner 中出现
tpcp.tar.gz。 -
GitHub 账号下异常创建
tpcp-docs、docs-tpcp或 Dune 主题仓库。 -
npm 包 manifest 中出现异常
preinstall、postinstall、prepare。 -
optionalDependencies指向陌生 GitHub commit。
-
PyPI wheel 中出现仓库源码没有的
.pth文件。 -
系统出现
pgmon、sysmon、gh-token-monitor用户服务。 -
CI 运行时访问
checkmarx[.]zone、git-tanstack[.]com、*.getsession.org。 -
Docker / CI 出站流量中出现
KICS-Telemetry/2.0User-Agent。 -
import lightning后出现异常后台线程、Bun 下载或大型混淆 JavaScript 执行。
-
浏览器凭据、钱包目录、Vault 配置、Kubernetes Service Account token 被异常读取。
END
更多精彩内容点击下方扫码关注哦~
关注云鼎实验室,获取更多安全情报
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:云鼎实验室 腾讯云安全 腾讯云安全《投毒即服务:TeamPCP如何引爆AI时代供应链危机》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论