立即通过6个可行步骤,保护企业免受Shai-Hulud蠕虫和npm漏洞侵害

教程6个月前发布 小马良
216 0

近期,Mini Shai-Hulud蠕虫发起大规模供应链攻击,污染npm、PyPI两大主流开源生态平台,大量常用开发包被植入恶意程序,波及海量企业研发环境。截至目前,本次攻击累计污染172个npm、PyPI软件包,衍生出403个恶意版本,但凡安装或导入过相关受感染包的开发设备与环境,均存在被入侵风险,企业需高度警惕并及时排查防护。

一、蠕虫核心危害:窃取全量机密,且具备顽固持久化能力

本次TeamPCP组织发起的Shai-Hulud蠕虫攻击,危害范围远超常规供应链漏洞,不仅批量窃取研发环境各类核心凭证,还实现了跨场景持久化驻留,常规卸载操作无法彻底清除风险。

在受入侵的开发者工作站中,该蠕虫会遍历100余个文件路径,批量窃取各类核心机密信息,涵盖企业上云与研发全场景凭证:AWS云服务密钥、SSH私钥、npm访问令牌、GitHub个人访问令牌、HashiCorp Vault密钥、Kubernetes服务账户、Docker配置文件、终端操作历史记录以及加密货币钱包数据。据SecurityWeek报道,这也是TeamPCP攻击活动首次针对性入侵1Password、Bitwarden等主流密码管理器,进一步放大了数据泄露风险。

除此之外,蠕虫还会精准窃取Claude、Kiro AI编码代理的完整配置信息,包括代理关联的所有外部服务MCP服务器认证令牌,直接威胁企业AI研发链路的接口安全与数据隐私。

最关键的是,单纯卸载受感染软件包无法清除蠕虫风险。该蠕虫设计了多重顽固持久化机制,深度绑定研发工具与系统环境:一方面,在Claude Code的\.claude/settings\.json、VS Code的\.vscode/tasks\.json(配置文件夹打开自动运行规则)中植入驻留代码,只要开发者打开项目,恶意程序就会自动重启执行;另一方面,会安装系统守护进程,适配macOS LaunchAgent、Linux systemd双系统环境,设备重启后恶意进程依然存续。

值得注意的是,其持久化文件均存储在项目目录树中,而非常规的node\_modules文件夹,这也是卸载依赖包无法清除风险的核心原因。在CI运行器环境中,蠕虫还会直接读取/proc/pid/mem运行器进程内存,强行提取Linux运行器中所有机密数据,即便是已屏蔽的脱敏机密也会被窃取。Wiz安全团队监测发现,该蠕虫内置破坏性守护进程,若用户在未隔离设备的前提下撤销被盗令牌,会直接清空设备主目录数据,造成不可逆的文件损毁。

二、攻击规模与漏洞评级:数亿下载量的高危供应链危机

本次攻击始于UTC时间5月11日19:20至19:26,攻击者率先在42个@tanstack/\*系列npm包中发布84个恶意版本。根据Mend安全平台的追踪监测,攻击在48小时内快速扩散,覆盖npm、PyPI双平台,累计污染172个软件包、403个恶意版本。

此次攻击波及范围极广,仅高危包@tanstack/react\-router单周下载量就高达1270万次。OX Security统计数据显示,所有受感染恶意包累计下载量已突破5.18亿次。本次漏洞被收录为CVE-2026-45321,CVSS危险等级评分高达9.6分,属于严重高危漏洞。

本次攻击最特殊的风险点在于,所有恶意软件包均持有有效的SLSA 3级构建来源证明。简单来说,软件包的构建溯源信息真实可信,但攻击者通过供应链投毒篡改了包内程序,打破了行业“来源合规即安全”的固有认知,极大提升了企业常规风控排查的难度。

Endor Labs高级安全研究员Peyton Kennedy在VentureBeat独家采访中指出本次攻击的核心痛点:“TanStack的安全配置看似完善,具备OIDC可信发布、来源签名、维护者账号双重验证2FA等合规机制,但攻击依然成功。这足以说明,相较于来源认证、2FA验证,OIDC权限范围才是供应链安全的核心控制点。若发布流水线信任整个代码仓库,而非限定特定分支、特定工作流,无父级提交、无分支关联的孤立恶意提交,就能绕过所有防护,获取有效发布令牌,而该问题仅需一行配置即可修复。”

三、完整攻击链路:三个漏洞串联,突破全流程安全防护

TanStack官方事后复盘,完整还原了本次蠕虫的攻击链条。攻击者并非依靠单一漏洞突破,而是串联多个风控缺口,层层绕过合规防护体系,最终实现恶意包批量上线。

5月10日,攻击者将TanStack/router项目分叉为zblgg/configuration,通过刻意伪装的仓库名称规避平台分叉检索机制。随后攻击者提交拉取请求,触发pull\_request\_target工作流,该工作流会自动检出分叉仓库的恶意代码并执行构建,让攻击者成功在TanStack官方运行器上获取代码执行权限,同时污染GitHub Actions缓存文件。

当官方合法维护者合并主分支代码、触发正式发布工作流时,系统会直接恢复调用已被污染的缓存文件,加载攻击者植入的恶意二进制程序。该程序会读取运行器进程内存,窃取OIDC可信发布令牌,并尝试向npm官方注册表registry\.npmjs\.org推送恶意包。即便部分测试流程失败、正式发布流程被跳过,仍有84个带有效签名的恶意包成功入驻npm注册表,形成大规模风险扩散。

官方事后分析总结:本次攻击的核心逻辑是多个漏洞相互衔接,打破各类安全机制的信任边界。攻击者复用了2025年3月tj-actions/changed-files入侵事件的核心技术,并结合全新场景重组利用,形成了这套新型供应链攻击链路。

四、跨平台扩散:从npm快速蔓延至PyPI,Python防线全面失守

本次蠕虫攻击突破了单一技术栈限制,短时间内从JavaScript生态的npm平台,蔓延至Python生态的PyPI平台,形成跨语言、跨平台的全域威胁,且常规npm防护手段对Python生态完全失效。

微软威胁情报中心证实,PyPI平台的mistralai v2.4.6版本为恶意伪造版本,该恶意包的触发逻辑极为隐蔽:不同于常规包的安装时触发,它会在代码导入阶段自动执行恶意程序,下载伪装成Hugging Face Transformers的恶意载荷。这也意味着,企业常用的npm防护手段,如lockfile强制校验、\-\-ignore\-scripts脚本禁用规则,完全无法防护Python导入触发的攻击行为。

Mistral AI官方已发布安全公告确认该风险。受感染的npm恶意包仅在5月11日UTC 22:45至次日01:53短暂上线约3小时,目前PyPI平台的恶意版本mistralai==2\.4\.6已被官方隔离下架。官方核查确认,仅有单台开发者设备受影响,自身业务基础设施未被入侵。同时SafeDep溯源证实,Mistral AI从未发布过v2.4.6版本,5月11日无任何相关代码提交与版本标签记录,属于完全伪造的恶意版本。

Wiz安全团队梳理了本次攻击的完整波及清单,除Mistral AI SDK外,UiPath 65个组件包、OpenSearch、Guardrails AI、20个Squawk系列包均被污染。StepSecurity通过技术链路溯源,结合过往Shai-Hulud攻击特征、Bitwarden CLI及Trivy入侵痕迹,最终确认本次攻击仍由TeamPCP组织发起。值得关注的是,该蠕虫特意适配Bun运行环境、规避Node.js安全监控体系,大幅提升了排查与拦截难度。

五、攻击核心新思路:将AI编码代理列为高价值窃取目标

本次Shai-Hulud蠕虫攻击最大的技术革新,是首次将AI编码代理视为可信执行环境与核心凭证金库,成为供应链攻击瞄准AI研发工具的典型案例。

Socket安全团队对2.3MB的恶意载荷router\_init\.js完成完整反混淆与技术分析,发现该蠕虫内置10组并行运行的凭证采集程序,可全方位抓取研发环境各类机密。其核心驻留逻辑精准瞄准主流AI开发工具与代码编辑器:主动向\.claude/、\.vscode/目录写入持久化恶意代码,挂钩Claude Code的SessionStart启动配置、VS Code的文件夹打开任务机制,实现永久驻留。

同时,蠕虫会定向读取\~/\.claude\.json、\~/\.claude/mcp\.json、\~/\.kiro/settings/mcp\.json等AI代理核心配置文件,窃取文件中存储的所有外部服务API密钥、MCP服务器认证令牌,全面掌控企业AI研发链路的访问权限与核心数据。

更具威慑性的是,攻击者为窃取的npm令牌添加了专属描述:“如果你撤销此令牌,它将擦除计算机所有者的电脑”,且该表述并非虚设。一旦用户贸然撤销被盗令牌,设备内置的破坏性守护进程会立即清空本地主目录,造成数据损毁。

Peyton Kennedy对此强调了本次攻击的警示意义:“该载荷的核心威胁不在于瞬时入侵,而在于长期驻留。它深度绑定AI编码工具与代码编辑器的启动逻辑,即便彻底删除npm依赖包,只要开发者打开项目,恶意程序就会自动重启执行。攻击者精准抓住了行业盲区——AI编码代理具备读取代码仓库、执行终端命令、调用各类机密凭证的权限,等同于开发者的全域操作权限。如今的研发环境防护,不能只聚焦软件包安全,必须将AI代理工具纳入核心防护范围。”

六、CI/CD信任链6大高危缺口及针对性修复方案

本次攻击之所以能突破多重合规防护,核心原因是多数企业CI/CD流水线存在配置漏洞。以下梳理攻击利用的6个核心缺口,结合企业通用现状,提供可直接落地的整改方案。

审计问题(修复方案)企业当前普遍现状安全缺口风险说明
1. 精准限定OIDC可信发布权限:将OIDC可信发布绑定至受保护分支的指定工作流文件,仅为发布作业开放id\-token: write权限,且发布作业必须使用干净、无缓存复用的独立运行环境多数企业在仓库全局授予OIDC信任权限,仓库内所有工作流均可申请发布令牌;id\-token: write权限多在工作流全局配置,未精准限定至发布作业攻击者通过缓存投毒,在合法合规的发布工作流内部执行恶意代码,直接提取OIDC令牌。仅靠分支、工作流绑定无法防御,必须叠加权限精细化管控、干净缓存运行三大配置,才能彻底封堵风险
2. 不单一依赖SLSA来源证明,新增运行行为分析:将SLSA来源证明作为基础合规条件,而非唯一安全判定标准,在包安装阶段增加动态行为检测企业普遍将有效Sigstore来源徽章、npm audit signatures校验通过视为包安全的核心依据,采购与合规流程完全信任来源证明本次84个恶意TanStack版本均持有有效SLSA 3级证明,证明仅能佐证包的构建渠道合规,无法判定构建行为是否被授权。Socket AI扫描曾在恶意包发布6分钟内识别风险,但来源校验机制完全无告警
3. 隔离GitHub Actions缓存,禁用高危工作流逻辑:按信任边界划分缓存命名空间,可疑PR操作后主动失效缓存,禁止在pull\_request\_target工作流中检出并执行分支代码分支触发工作流与正式发布工作流共用缓存空间;企业默认关闭/回滚恶意PR即可恢复安全状态;大量团队使用pull\_request\_target开展基准测试、包体积分析等场景攻击者通过分支PR投毒pnpm缓存,缓存不受PR关闭、回滚影响,合法发布流程会复用污染缓存完成恶意部署。同时无分支关联的孤立提交可绕过所有分支保护规则,常规防护完全失效
4. 全覆盖审计依赖配置,拦截非法引用:重点审计lockfile与依赖图中的optionalDependencies,拦截所有指向非官方发布提交的github:依赖引用常规静态分析仅校验常规生产、开发依赖,忽略optionalDependencies可选依赖风险,多数安全工具不会标记非法github:提交引用蠕虫通过可选依赖注入攻击者私有分支的孤立恶意提交,npm解析依赖时会自动克隆代码并执行prepare生命周期脚本,在主包安装完成前就触发恶意载荷运行
5. 分栈审计Python依赖,专项防护AI/ML流水线:将Python依赖审计与npm防护体系拆分独立管控,重点排查防护使用guardrails\-ai、mistralai等高危包的AI研发流水线企业仅针对JavaScript生态配置npm防护规则,默认Python包安装完成即代表安全;AI/ML CI流水线被视为内部测试环境,未纳入供应链攻击防护范围Python恶意包为导入时触发攻击,npm的\-\-ignore\-scripts等防护规则完全无效。AI流水线若具备id\-token: write权限,会面临OIDC令牌窃取风险,直接泄露LLM密钥、向量数据库凭证等核心资产
6. 优化应急响应流程,先隔离设备再轮换凭证:发现入侵后先隔离设备、完成法证保全,再轮换令牌与机密,禁止直接撤销被盗npm令牌行业通用应急流程为“先撤销泄露令牌,再开展入侵调查”,运维人员会第一时间执行npm token list批量撤销令牌蠕虫常驻守护进程会60秒轮询令牌状态,一旦检测到撤销操作,立即清空设备主目录。即便卸载恶意包,AI工具目录中的持久化残留仍会留存,贸然撤销令牌会直接触发数据损毁

七、分阶段企业安全总监行动计划(可直接落地)

1. 今日紧急处置(立即执行)

优先通过两条核心命令快速排查设备是否被入侵:一是执行find \. \-name \&\#39;router\_init\.js\&\#39; \-size \+1M检索恶意核心文件;二是在项目package\-lock\.json中搜索特征哈希值79ac49eedf774dd4b0cfa308722bc463cfe5885c。

若任意命令命中结果,切勿直接撤销任何令牌,第一时间隔离受影响设备并完成法证镜像保全,规避数据损毁风险。设备隔离完成后,按“npm令牌→GitHub个人访问令牌→云服务密钥”的顺序逐一轮换所有凭证。同时全局检索项目中\.claude/settings\.json、\.vscode/tasks\.json文件,彻底清除蠕虫持久化残留配置。

2. 本周专项排查(全面清零风险)

对所有曾在受感染设备上登录、访问过的凭证进行全量轮换,包括npm令牌、GitHub PAT、AWS密钥、Vault令牌、K8s服务账户、SSH私钥等所有研发与云服务凭证。

排查企业自有软件包在5月11日攻击爆发后的所有新增版本,重点核查提交者为claude@users\.noreply\.github\.com的异常版本记录。同时在网络侧拦截恶意域名:filev2\.getsession\[\.\]org、git\-tanstack\[\.\]com,阻断恶意通信链路。

3. 本月体系整改(封堵配置漏洞)

参照前文6大安全缺口,全面审计企业所有GitHub Actions工作流配置。完成核心配置加固:将OIDC发布权限精准绑定至受保护分支的指定工作流;按信任边界隔离缓存键,避免跨场景缓存复用;执行npm config set min\-release\-age=7d,限制新版本包即时使用,预留风险观测周期。

针对AI/ML研发团队开展专项排查:核查guardrails\-ai、mistralai包版本是否为受感染版本,审计CI流水线id\-token: write权限配置,全量轮换CI环境可访问的LLM API密钥、向量数据库凭证。

4. 本季度战略升级(长效防护)

升级供应链安全采购与风控体系,不再将单一来源验证作为安全合规的唯一标准,新增包运行行为分析能力。将所有具备发布权限的工具、平台纳入供应商风险评估,强制开展CI/CD安全审计。

出台内部安全规范:禁止具备id\-token: write权限的工作流使用共享缓存运行;将\.claude/、\.kiro/、\.vscode/等AI代理与编辑器配置目录,等同于云密钥库管理,落实同等严格的访问控制、权限审计与保密规范。

八、攻击持续迭代:供应链防护需同步升级

本次Mini Shai-Hulud蠕虫是8个月内该攻击家族的第五轮攻击波,攻击规模与技术手段持续升级:从早期的4个SAP恶意包,迭代为84个高下载量TanStack包;此前intercom\-client@7\.0\.4也曾在29小时内被快速攻陷,证实攻击者可通过被盗CI/CD基础设施实现批量、快速传播。

5月12日晚间,vx-underground恶意软件研究团队披露,完整武器化的Shai-Hulud蠕虫代码已被公开开源。这意味着该攻击技术不再局限于TeamPCP组织,所有网络攻击者均可复用这套缓存投毒、OIDC令牌窃取、带来源证明的恶意包发布链路,针对配置存在漏洞的npm、PyPI项目发起攻击,全网供应链风险将持续攀升。

Endor Labs研究员Peyton Kennedy总结本次攻击的核心启示:“该攻击家族每一轮迭代都会瞄准更高下载量的开源项目,同时创新攻击技术。本次孤立提交绕过分支防护的技术,精准击中了行业防护盲区。过去两年,行业过度依赖来源认证、可信发布机制,但本次攻击证明,防护缺口不在于签名真伪,而在于权限作用域的精细化管控。”

来源证明仅能回答“软件包在哪里构建”,无法判定“构建行为是否合法授权”,这也是所有企业当下需要快速补齐的供应链安全短板。(来源)

© 版权声明

相关文章