迷你沙伊胡鲁德蠕虫
名为 TeamPCP 的威胁组织与一场复杂的供应链攻击活动有关,该活动的目标是与 TanStack、UiPath、Mistral AI、OpenSearch、Guardrails AI 以及其他多个生态系统相关的广泛使用的 npm 和 PyPI 软件包。此次攻击与不断演变的 Mini Shai-Hulud 恶意软件活动密切相关,表明软件供应链滥用和身份驱动型入侵技术的显著升级。
研究人员发现,恶意 npm 包被篡改,其中包含一个名为 router_init.js 的混淆 JavaScript 组件。该有效载荷会分析受感染的环境,并部署一个高级凭证窃取程序,目标包括云服务提供商、加密货币钱包、人工智能开发工具、消息平台、CI/CD 系统和 GitHub Actions 环境。窃取的数据主要传输到 filev2.getsession.org 域。
使用会话协议基础设施表明攻击者蓄意规避企业安全控制。由于该域名属于一个去中心化的、注重隐私的消息传递平台,因此不太可能被传统的网络防御措施拦截。作为第二种数据泄露方式,攻击者使用窃取的 GitHub 身份验证令牌,以 claude@users.noreply.github.com 的作者身份,通过 GitHub GraphQL API 将加密数据提交到攻击者控制的存储库。
目录
持久化机制和凭证盗窃的扩展
该恶意软件引入了多种持久性和监视功能,旨在长期访问受感染的开发环境。它在 Claude Code 和 Microsoft Visual Studio Code 内部建立了持久性接口,使恶意软件能够在系统重启后继续运行,并在每次打开这些 IDE 时自动重新启动。
此外,还部署了 gh-token-monitor 服务,用于持续监控并重新窃取 GitHub 令牌。同时,两个恶意 GitHub Actions 工作流也被注入到被入侵的 GitHub 代码库中。这些工作流会将代码库密钥序列化为 JSON 格式,并将数据上传到外部端点 api.masscan.cloud。
最新的 TanStack 漏洞利用事件与以往的供应链事件有显著不同。攻击者不再依赖预安装钩子,而是将恶意 JavaScript 文件直接嵌入到软件包压缩包中,同时引入一个指向 GitHub 托管软件包的可选依赖项。该依赖项包含一个 prepare 生命周期钩子,通过 Bun 运行时环境执行恶意载荷。
被植入木马的 Mistral AI 软件包采用了一种较早的感染策略,即通过修改 package.json 文件,添加一个预安装钩子来调用 node setup.mjs。此过程会下载 Bun 并执行相同的窃取凭证的恶意软件。
CVE-2026-45321 和滥用可信发布
TanStack 漏洞已被正式追踪,编号为 CVE-2026-45321,并被评为 CVSS 严重级别 9.6 分。调查人员确认 TanStack 生态系统中的 42 个软件包和 84 个版本受到影响。
分析显示,此次安全漏洞源于一系列利用 GitHub Actions 漏洞的攻击,这些攻击包括 pull_request_target 触发器、GitHub Actions 缓存投毒以及从 GitHub Actions 运行器中运行时提取 OIDC 令牌。据报道,攻击者首先利用 GitHub 分支中的孤立提交植入恶意载荷,然后将其注入到 npm 包的压缩包中。随后,攻击者劫持了合法的 TanStack/router 工作流,发布了带有有效 SLSA 出处证明的受感染软件包。
这一事态发展标志着软件供应链攻击的重大升级。这些恶意软件包携带了有效的 SLSA 构建级别 3 来源签名,使其成为首个能够分发带有真实构建证明的恶意软件包的已知 npm 蠕虫。随后,该恶意软件活动扩展到 TanStack 以外的地区,并蔓延至 UiPath、DraftLab 和其他开发者维护的生态系统。
该攻击严重滥用了可信发布工作流程。攻击者并非直接窃取 npm 凭据,而是利用运行在可信 CI/CD 流水线中的 OIDC 权限,在构建过程中生成短暂的发布令牌。这使得恶意软件包能够通过合法的发布流水线发布,同时绕过传统的身份验证安全措施。
蠕虫自我繁殖行为引发警报
Mini Shai-Hulud 攻击活动最危险的特点之一是其蠕虫式的传播模式。该恶意软件会主动搜索配置了 bypass_2fa=true 的可发布 npm 令牌,枚举受感染开发者维护的软件包,并将 GitHub OIDC 令牌交换为每个软件包的发布令牌。这种机制使得恶意软件能够在软件包生态系统中横向传播,而无需依赖传统的凭证窃取技术。
此次攻击还利用了 GitHub OIDC 可信发布者模型中的仓库级信任配置。由于信任是在仓库级别广泛授予的,而不是仅限于受保护的分支和特定的工作流文件,因此由孤立提交触发的恶意工作流执行能够请求合法的 npm 发布令牌。
另一个令人不安的功能是部署“死亡开关”。该恶意软件会安装一个 shell 脚本,每 60 秒重复轮询 api.github.com/user 端点,以确定攻击者创建的 npm 令牌是否仍然有效。这些令牌带有威胁性的描述:“如果您撤销此令牌,它将擦除所有者的计算机。”
如果防御者通过 npm 控制面板撤销令牌,恶意软件会启动一个破坏性例程,执行 `rm -rf ~/` 命令,从而有效地将感染转化为擦除型恶意软件。这种激进的行为表明 TeamPCP 的运行策略发生了重大演变,并展现出其在强制持久化方法上的日益精进。因此,建议安全团队在撤销被盗用的 npm 凭据之前,先隔离并镜像受感染的系统。
受影响的包裹和不断扩大的生态系统影响
此次攻击活动影响了 npm 和 PyPI 上的 170 多个软件包,总下载量超过 5.18 亿次。调查人员还发现至少 400 个使用被盗凭证创建的仓库,所有仓库都包含“Shai-Hulud: Here We Go Again”这句话。
受影响的包裹包括:
guardrails-ai@0.10.1 (PyPI)
mistralai@2.4.6 (PyPI)
@opensearch-project/opensearch@3.5.3、3.6.2、3.7.0、3.8.0
@squawk/mcp@0.9.5
@squawk/weather@0.5.10
@squawk/flightplan@0.5.6
@tallyui/connector-medusa@1.0.1、1.0.2、1.0.3
@tallyui/connector-vendure@1.0.1、1.0.2、1.0.3
该恶意软件还采用了多个冗余的数据泄露渠道。除了会话协议基础设施和 GitHub 死信箱之外,窃取的凭据还会通过拼写错误域名 git-tanstack.com 进行传输。
PyPI恶意软件引入地理围栏破坏逻辑
与恶意 Mistral AI 和 Guardrails AI 软件包相关的基于 Python 的恶意软件变种与通过 npm 分发的 JavaScript 有效载荷存在显著差异。被入侵的 mistralai PyPI 软件包会从远程主机 83.142.209.194 下载凭据窃取程序。
研究人员发现,这款 Python 恶意软件包含国家/地区感知逻辑,旨在避免在俄语环境下执行。它还包含一个地理围栏破坏机制,如果受感染的系统位于以色列或伊朗,则有六分之一的概率执行 `rm -rf /` 命令。
这种行为表明,开源软件包生态系统中存在着一种令人担忧的趋势,即朝着区域感知型破坏性有效载荷部署的方向发展。
身份驱动型供应链攻击日益增长的威胁
Mini Shai-Hulud攻击活动反映了现代供应链攻击的更广泛转变。威胁行为者不再仅仅关注包裹被篡改,而是越来越多地将目标对准可信的持续集成/持续交付(CI/CD)身份、发布工作流程和基于云的自动化管道。
一旦攻击者获得软件发布基础设施的访问权限,开发流程本身就会成为恶意软件的传播渠道。由于许多恶意行为都通过合法的工作流程、可信的认证和真实的发布系统进行,传统的安全控制措施可能无法识别恶意行为。
新一代供应链攻击的主要特征包括:
- 滥用可信发布和 OIDC 代币交换机制
- 通过合法的 CI/CD 工作流程和构建系统进行传播
- 利用有效的 SLSA 认证来伪装恶意软件包
- 多渠道凭证窃取和持久化操作
- 旨在恐吓防御者的破坏性报复机制
此次行动已扩展到人工智能工具、企业自动化、搜索基础设施、前端开发、航空相关工具以及持续集成/持续交付(CI/CD)生态系统等领域,这表明软件供应链的相互联系已变得多么紧密。在软件包安装和构建执行过程中进行行为监控,对于检测那些乍看之下似乎合法的威胁而言,如今变得至关重要。