安全研究团队近日披露了一起新型npm供应链攻击事件。攻击者利用GitHub Actions的pull_request_target特性实施缓存投毒,成功在42个@tanstack/*官方包中植入恶意代码,窃取开发者的GitHub Actions、AWS、Vault、Kubernetes等高权限凭据。据Snyk和Socket.dev安全平台通报,该蠕虫代号为"Mini Shai-Hulud",于2026年5月11日发起攻击,共波及84个npm软件包工件。
攻击链路四步走
第一步:CI环境投毒
攻击者首先通过pull_request_target工作流混入TanStack的GitHub Actions环境,在依赖缓存中植入恶意代码。当维护者正常触发发版流程时,被污染的缓存被恢复,恶意代码从GitHub Actions runner进程内存中直接提取OIDC令牌,并向npm发布恶意包。值得注意的是,整个攻击过程并未窃取传统的npm长期令牌,却成功实现了带有SLSA Build Level 3认证的投毒——这是npm生态系统中首次出现携带合法来源证明的供应链攻击。
第二步:寄生开发工具
蠕虫获得初始访问权限后,会将自身复制到多个开发工具配置文件中,包括.claude/router_runtime.js、.claude/settings.json、.claude/setup.mjs、.vscode/setup.mjs和.vscode/tasks.json。由于Claude Code的hooks机制会在文件编辑、bash命令执行等工具事件中重新加载配置,而VS Code的任务配置提供了另一条复活路径,这意味着简单的npm uninstall命令无法完成彻底清理。
第三步:冒充AI机器人横向扩散
蠕虫利用窃取的GitHub令牌调用GraphQL API,向受害者名下的仓库写入.github/workflows/、.claude/、.vscode/等配置文件,并将commit作者伪装为claude@users.noreply.github.com。在已启用Claude Code集成的仓库中,这类提交更容易隐藏在正常AI agent活动中,从而实现大规模横向传播。
第四步:Session协议隐蔽外传
窃取的凭据通过Session去中心化通信协议栈进行外传,数据经由filev2.getsession[.]org和Session服务节点网络传出。由于这类流量的通信特征与传统加密聊天协议相近,企业安全设备难以按域名和特征进行有效拦截,形成了高度隐蔽的数据外传通道。
攻击者背景
据StepSecurity分析,该攻击由名为"TeamPCP"的攻击组织发起。这是该组织继2025年9月首次Shai-Hulud攻击和同年11月Shai-Hulud 2.0攻击后的第三次大规模行动。前两轮攻击分别感染了约187个npm包和波及超过2.7万个代码库,并首次引入了"自毁"功能——当蠕虫无法完成凭证窃取时会尝试删除受害者主目录。
防护建议
安全研究人员建议开发者立即采取以下措施:检查是否使用了受影响的TanStack包版本并升级至安全版本;轮换所有可能暴露的凭据,包括GitHub令牌、npm令牌和云平台凭证;清理CI/CD环境中的可疑缓存;检查仓库中是否存在来自claude@users.noreply.github.com的可疑提交。同时,建议启用依赖安全扫描工具,对供应链攻击保持持续监控。