2025年9月,JavaScript生态系统遭遇了其史上最为复杂且破坏性极强的供应链攻击之一。当时,一种名为“沙虫(Shai-Hulud)”的新型自我复制蠕虫感染了超过477个npm包,成为npm注册表历史上首次成功的自动化传播攻击事件。
这种攻击代表了供应链威胁的重大演变,它同时利用社会工程学和技术自动化,在开源软件生态系统中实现了前所未有的规模和持久性。
“沙伊-胡鲁德”行动始于一场复杂的钓鱼攻击,攻击者通过伪造npm官方 registry的虚假域名,将目标锁定为npm包维护者。

这种社会工程学方法被证明极具破坏性且效果显著,因为它利用了开发者与npm平台之间的信任关系,同时制造了一种紧迫感,从而绕过了常规的安全警惕。
42号部门的评估进一步证明了此次攻击的复杂性,该评估指出,鉴于代码中包含注释和表情符号,威胁行为者可能利用了大型语言模型(LLMs)来协助编写恶意的bash脚本。
这代表了网络犯罪活动中一个令人担忧的趋势,即人工智能工具正越来越多地被武器化,以提高恶意代码开发的质量和有效性。
使用“沙伊-胡鲁德”自复制恶意软件的供应链攻击
这种恶意软件的核心创新在于其自我复制机制,该机制通过NpmModule.updatePackage
函数实现。与传统的供应链攻击需要对每个受感染的软件包进行手动干预不同,Shai-Hulud是一种真正的蠕虫病毒,能够自动识别并感染由受攻击开发者维护的其他软件包。
传播过程遵循一种系统化的方法:下载现有的包压缩文件,修改package.json
文件以植入恶意的postinstall
脚本,嵌入约3.6MB的压缩bundle.js
有效载荷,重新打包归档文件,并将其重新发布到npm注册表。
这种自动化方法导致受影响的软件包数量呈指数级增长,恶意软件在大约72小时内就从最初少数几个被感染的软件包扩散到了477多个受感染的软件包。
这种蠕虫的设计通过利用合法的维护者凭证和发布权限,确保在整个生态系统中持续存在,实际上将受信任的开发者变成了不知情的恶意软件传播载体。
当用户通过npm install
安装受感染的包时,恶意软件便开始执行,这会触发postinstall
脚本,进而启动bundle.js
有效负载。
这个由Webpack打包的脚本会执行全面的系统侦察,首先从提取环境变量(process.env
)开始,以捕获执行上下文中立即可用的敏感凭据。
然后,有效载荷会部署TruffleHog(一款合法的开源秘密扫描工具),并使用命令trufflehog filesystem . --json --results=verified
来系统地扫描本地文件系统,以查找800多种不同类型的凭据。
这种恶意软件展现出复杂的凭证验证能力,它使用npm whoami
命令来验证发现的npm令牌的真实性,并通过访问云服务API来确认亚马逊云服务(AWS)、谷歌云平台(Google Cloud Platform)和微软Azure凭证的有效性。
这一验证步骤确保只有可用的凭证会被窃取,从而最大限度地提高被盗数据在后续恶意活动中的价值。
综合包分析
攻击时间线显示,这次快速升级的攻击让安全界措手不及。最早确认的恶意包airpilot@0.8.8
于2025年9月14日世界标准时间18:35:07.600发布。
随着每周下载量超过220万次的@ctrl/tinycolor@4.1.1
软件包被攻陷,该活动获得了显著的势头,这一情况最初由安全研究员丹尼尔·佩雷拉于2025年9月15日报告。
9月16日,此次攻击的范围急剧扩大,当时安全研究人员发现企业供应商的软件包遭到了入侵,其中包括多个CrowdStrike的npm软件包。
此次扩张表明,该蠕虫有能力突破高价值目标,并可能入侵企业开发环境,这显著增加了受影响组织的风险。
受影响的软件包清单
包名称 | 被篡改的版本 | 状态 |
---|---|---|
ctrl/tinycolor | 已移除 | |
rxnt认证 | 已移除 | |
飞行员 | 0.8.8(最早发现) | 已移除 |
angulartics2 | 已移除 | |
ctrl/洪流 | 已移除 | |
ctrl/ golang模板 | 已移除 | |
ctrl/磁力链接 | 已移除 | |
ctrl/ngx-codemirror | 已移除 | |
ctrl/ngx-csv | 已移除 | |
ctrl/ngx-emoji-mart | 已移除 | |
ctrl/ngx-右键点击 | 已移除 | |
ctrl/比特彗星 | 已移除 | |
ctrl/react-adsense | 已移除 | |
ctrl/共享种子 | 已移除 | |
ctrl/种子文件 | 已移除 | |
ctrl/传输 | 已移除 | |
ctrl/ts-base32 | 已移除 | |
encounter-playground | 已移除 | |
json-rules-engine-简化版 | 0.2.40.2.1 | 已移除 |
KOA 2-swagger-用户界面 | 5.11.25.11.1 | 已移除 |
nativescript-community/gesturehandler | 已移除 | |
nativescript-community/sentry | 已移除 | |
nativescript-community/text | 已移除 | |
nativescript-community/ui-collectionview | 已移除 | |
nativescript-community/ui-drawer | 已移除 | |
nativescript-community/ui-image | 已移除 | |
nativescript-community/ui-material-bottomsheet | 已移除 | |
nativescript-community/ui-material-core | 已移除 | |
nativescript-community/ui-material-core-tabs | 已移除 | |
ngx-color | 已移除 | |
ngx-吐司 | 已移除 | |
ngx-trend | 已移除 | |
react-complaint-image | 已移除 | |
react-jsonschema-form-条件语句 | 已移除 | |
react-jsonschema-form-附加组件 | 已移除 | |
rxnt-healthchecks-nestjs | 已移除 | |
rxnt蛋糕 | 已移除 | |
swc-plugin-component-annotate | 已移除 | |
ts-高斯 | 已移除 |
受影响软件包的完整清单涉及多个维护者命名空间,既包括热门库,也包括专业工具。主要受影响的软件包包括:
高影响包:
@ctrl/tinycolor@4.1.1, 4.1.2
——每周下载量220万次angulartics2@14.1.2
——热门的Angular分析库ngx-toastr@19.0.2
——广泛使用的通知组件- 多个
@nativescript-community
包影响移动开发工作流
企业及安全相关包:
- 多个CrowdStrike的npm包(具体包名已被npm管理员迅速移除)
rxnt-authentication@0.0.6
——与身份验证相关的功能- 各种
@ctrl
命名空间包,涵盖文件管理、网络和媒体处理
这种恶意软件对目标的选择似乎具有策略性,它专注于下载量高且依赖关系图广泛的软件包,以最大限度地提高感染潜力。
企业供应商软件包的纳入表明,要么是针对性较强的攻击,要么是利用已被入侵且有权访问商业软件包仓库的维护者账户进行的 opportunistic 利用。
入侵指标(IOCs)和检测方法
类别 | 指标 | 值 | 类型 |
---|---|---|---|
文件哈希 | bundle.js | 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09 | 文件哈希 |
网络指标 | webhook地址 | https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7 | 网络 |
网络指标 | trufflehog_download | 从文件系统下载并执行 | 网络 |
文件系统指示器 | 恶意工作流 | .github/workflows/shai-hulud-workflow.yml | 文件系统 |
文件系统指示器 | github分支 | 茶壳的 | 文件系统 |
文件系统指示器 | 捆绑文件 | bundle.js(大小不定,约3.6MB,已压缩) | 文件系统 |
文件系统指示器 | 公共仓库 | 在受害者账户中创建的Shai-Hulud代码仓库 | 文件系统 |
进程指标 | npm命令 | npm whoami、npm publish 命令 | 进程 |
进程指标 | trufflehog命令 | trufflehog 文件系统 . –json –results=已验证 | 进程 |
进程指标 | 安装后脚本 | node bundle.js | 流程 |
安全团队可以通过多种文件系统痕迹识别潜在的入侵。主要指标是存在带有SHA-256哈希值46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
的恶意bundle.js
文件。
然而,研究人员指出,这种哈希值在不同的活动迭代中可能会有所不同,因此需要进行行为检测,而不能仅仅依赖静态签名。
关键文件系统指标包括:
.github/workflows/shai-hulud-workflow.yml
——恶意的GitHub Actions工作流- Git仓库中
shai-hulud
分支的创建 - 名为“Shai-Hulud”的公共代码库中包含凭证信息泄露
- 对
package.json
文件意外添加的postinstall
脚本
恶意软件会与特定的命令和控制基础设施通信以进行数据窃取。主要的窃取端点是https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7
,该端点接收以JSON格式传输的被盗凭证和系统信息。网络监控团队应留意:
- 指向
webhook.site
域的出站连接 - 包含凭证数据的Base64编码HTTP POST请求
- 滥用GitHub API创建仓库和注入工作流
- TruffleHog二进制文件下载和文件系统扫描活动
这种恶意软件表现出独特的行为模式,有助于检测和事件响应。主要的进程指标包括:
- 执行
npm whoami
命令以进行凭证验证 - 来自已泄露账户的自动
npm publish
操作 - 使用文件系统扫描参数执行TruffleHog进程
- 用于仓库枚举和修改的GitHub API调用
凭证窃取与数据泄露
Shai-Hulud实施了一项全面的凭证收集策略,针对多种凭证类型和存储位置。
这种恶意软件会优先获取高价值凭证,包括npm发布令牌、GitHub个人访问令牌(PATs)以及亚马逊云服务(AWS)、谷歌云平台和微软Azure的云服务凭证。
这种系统方法包括扫描.npmrc
文件以查找npm注册表令牌,从默认位置提取SSH私钥(id_rsa
),以及解析Git配置文件(.git/config
)以获取嵌入的凭据。
这种恶意软件还会针对特定环境的凭证存储,包括开发环境和CI/CD管道配置中常用的.env
文件。这种全面的方法确保了在不同的开发工作流和部署场景中,凭证的暴露程度达到最大。
针对npm包@ctrl/tinycolor的严重供应链攻击,已使40多个包感染具有自我传播能力的恶意软件,且攻击等级为严重
此次攻击采用双通道数据泄露策略,以确保数据的持久性和可访问性。主要的数据泄露通过webhook.site
的webhook端点进行,通过包含JSON编码凭证数据的HTTP POST请求,可立即获取被盗凭证。
第二种数据窃取方法包括在被入侵的账户中创建名为“沙伊-胡鲁德”的公共GitHub仓库,完整的凭证信息会以base64编码文件的形式存储在这些仓库中。
该恶意软件还通过GitHub Actions工作流建立持久化机制,注入.github/workflows/shai-hulud-workflow.yml
文件,这些文件会在代码推送时执行,并使用toJSON(secrets)
函数自动窃取仓库密钥。
这种持久化机制确保即使在开发机器上的初始感染被清除后,数据收集仍能继续进行。
CrowdStrike的npm包遭到破坏,这意味着此次攻击对企业环境的潜在影响显著升级。
虽然npm管理员和CrowdStrike的事件响应团队迅速移除了特定的包名,但这次入侵表明,恶意软件有能力渗透到主要网络安全供应商的包中。
这一发展引发了人们对企业软件开发中供应链安全的担忧,以及由受感染的供应商软件包可能导致的内部威胁场景的担忧。
CrowdStrike证实,他们在发现问题后迅速采取行动移除了受感染的软件包,但这一事件凸显了企业软件供应商在维护供应链完整性方面面临的挑战。
这一折中方案还凸显了在企业开发工作流中进行全面依赖项扫描和包完整性验证的重要性。
安全研究人员发现,Shai-Hulud与之前的npm供应链攻击存在显著的操作和技术重叠,特别是2025年8月下旬发生的S1ngularity/Nx入侵事件。
这两个活动都采用了相似的凭证窃取技术、GitHub仓库操纵方法,并且都倾向于创建公共仓库来存储窃取的数据。这些技术上的相似性表明,要么是同一个威胁行为者群体,要么是相关群体之间共享了工具和方法。
从S1ngularity攻击到Shai-Hulud的演进,展示了攻击者能力的明显提升,其中自我传播的蠕虫功能的加入,标志着自动化供应链攻击取得了重大进展。
这种演变表明,威胁行为者正在不断改进其技术,并投资于更复杂的攻击基础设施。
经验教训与未来影响
沙伊-胡鲁德攻击是供应链安全的一个分水岭时刻,它表明传统安全措施无法抵御以持续集成/持续部署速度传播的自蔓延威胁。
此次攻击的成功凸显了组织在依赖管理和软件包验证方式上进行根本性变革的必要性。
传统方法侧重于静态漏洞扫描和已知恶意包识别,不足以应对利用合法凭证和发布基础设施的动态、自修改威胁。
此次攻击还凸显了维护者账户安全的至关重要性,因为单个高权限账户的泄露可能会在整个软件包生态系统中引发连锁反应。
Shai-Hulud npm供应链攻击代表了供应链威胁的范式转变,它将复杂的社会工程与自动化传播机制相结合,以实现前所未有的规模和影响。
此次攻击在三天内成功入侵了超过477个软件包,这表明基于信任的生态系统在精心策划的对抗性操作面前存在脆弱性。
这一事件的教训不仅限于即时的技术修复,还涉及生态系统安全架构的基本问题,以及开源软件分发中可访问性与安全性之间的平衡。
随着JavaScript生态系统的持续发展以及企业对npm包的依赖不断增加,沙伊-胡鲁德(Shai-Hulud)的安全影响将在未来数年影响供应链安全实践。
事实证明,这种攻击表明传统安全方法无法抵御具有适应性和自我传播能力的威胁,因此需要新的方法,将自动化检测、社区协作和增强的维护者安全实践相结合。
未来的供应链安全必须不断发展,以应对的不仅是已知威胁,还有复杂的对手持续开发的创新攻击方法。
npm生态系统从“沙伊-胡鲁德”事件中的恢复,既展现了其韧性,也暴露了其脆弱性,为改善所有软件分发平台的供应链安全提供了关键的学习机会。
从这一事件中吸取的教训不仅必须为技术安全改进提供参考,还应指导政策变革、社区实践以及组织安全策略,以更好地抵御下一代供应链攻击。
1. 本版块文章内容及资料部分来源于网络,不代表本站观点,不对其真实性负责,也不构成任何建议。
2. 部分内容由网友自主投稿、编辑整理上传,本站仅提供交流平台,不为该类内容的版权负责。
3. 本版块提供的信息仅作参考,不保证信息的准确性、有效性、及时性和完整性。
4. 若您发现本版块有侵犯您知识产权的内容,请及时与我们联系,我们会尽快修改或删除。
5. 使用者违规、不可抗力(如黑客攻击)或第三方擅自转载引发的争议,联盟不承担责任。
6. 联盟可修订本声明,官网发布即生效,继续使用视为接受新条款。