大数跨境

npm 爆发之夜:2025 年 JavaScript 供应链崩溃内幕

npm 爆发之夜:2025 年 JavaScript 供应链崩溃内幕 索引目录
2025-12-09
0
导读:关注「索引目录」公众号,获取更多干货。🚨 近期 NPM 供应链攻击事件——事件经过、重要性及防范措施开源 JavaScript 库正遭受攻击。

关注「索引目录」公众号,获取更多干货。

🚨 近期 NPM 供应链攻击事件——事件经过、重要性及防范措施

开源 JavaScript 库正遭受攻击。2025 年末,多起影响巨大的攻击针对 npm 包,从小型工具到广泛使用的 React/Next.js 依赖项,无一幸免。这些事件泄露了数千个机密信息,导致维护者账户被盗,并暴露了 JavaScript 供应链的脆弱性。

这篇文章详细分析了事件经过这些攻击是如何进行的,以及开发者今后可以采取哪些措施来保护自己。


1. 2025 年 NPM 攻击浪潮

1.1 2025 年 9 月 Chalk/Debug 攻击

2025年9月,攻击者入侵了维护者账户,并将混淆的加密窃取代码注入到一些流行的软件包中,其中包括:

  • 粉笔
  • 调试
  • ansi 正则表达式
  • 颜色名称……以及其他。

这些受感染的版本在被 npm 删除之前,会悄悄地将加密货币交易重定向到攻击者的钱包。

这次攻击尤其令人担忧,因为这些软件包每天被下载数十亿次,这表明一个被攻破的依赖项是如何波及整个生态系统的。


1.2 沙伊-胡鲁德蠕虫(2025年9月)

不久之后,一种名为Shai-Hulud的可自我复制的 npm蠕虫出现了。

攻击者攻破了真实的开发者账户,并推送了带有后门的受信任软件包版本,例如:

  • ngx-bootstrap
  • ng2文件上传
  • @ctrl
     /tinycolor

每次被植入木马的更新:

  • 窃取凭证(GitHub 令牌、npm 令牌、云密钥)
  • 已将密钥上传到公共 GitHub 仓库
  • 利用窃取的 npm 令牌感染更多软件包

它迅速蔓延——在恶意软件被完全清除之前,已有超过500 个包裹被感染。


1.3 域名抢注恶意软件浪潮(2025 年 10 月)

10月份,安全研究人员发现了一系列拼写错误抢注的软件包,这些软件包旨在模仿流行的库:

  • react-router-dom
  • ethers.js
  • 节点守护程序
  • 状态

这些虚假包裹中包含多阶段信息窃取程序,这些程序:

  • 触发虚假验证码
  • 安装了一个隐藏的 24MB 有效载荷
  • 摘录:
    • 系统密码
    • 浏览器 Cookie
    • 操作系统密钥链秘密


他们甚至启动了隐藏终端进行隐蔽运行——这表明安装后脚本有多么危险。


2. 最新攻击:Shai-Hulud 2.0(2025 年 11 月)

第二波,甚至更大的浪潮于2025 年 11 月下旬到来。

2.1 有哪些新内容?

攻击者再次将目标对准了多个大型项目的维护者账户,其中包括:

  • Zapier
  • ENS 域
  • PostHog
  • 邮差

一旦入侵成功,他们便发布了带有预安装脚本的、被植入木马的 npm 版本,该脚本会:

  1. 下载并执行了Bun运行时环境
  2. 运行了一个10MB 的凭证窃取有效载荷。
  3. 使用 TruffleHog 扫描秘密
  4. 将窃取的数据上传到名为 “Sha1-Hulud: The Second Coming”的GitHub仓库

受害者的电脑实际上变成了秘密窃取机器人。

2.2 影响规模

  • 超过 800 个受感染的 npm 包
  • 约有 30,000 个 GitHub 代码库
    被创建用于存储被盗凭证。
  • 超过40万条秘密
    泄露
  • 已暴露的 npm 令牌中有 60% 仍然有效。
  • 包含一个破坏性擦除器,可能会删除用户的主目录。

2.3 React / Next.js 生态系统影响

包裹类型:

  • @posthog/nextjs
  • @posthog/nextjs-config

……也包括那些被植入木马程序的程序,这意味着即使是常见的 React/Next.js 分析集成也可能成为攻击入口。


3. 这类供应链攻击是如何运作的

3.1 维护者账户接管

网络钓鱼或窃取的凭证使攻击者能够向合法软件包发布恶意更新。

3.2 域名抢注

创建与热门软件包外观几乎完全相同的软件包:

  • react-router-dom.js
     对比
  • react-router-dom

3.3 依赖性混淆

上传一个与私有软件包同名的公共软件包,诱使 CI 流水线拉取攻击者的版本。

3.4 恶意生命周期脚本

npm 执行:

  • preinstall
  • postinstall

脚本自动运行

攻击者会利用这些时机:

  • 运行二进制文件
  • 下载恶意软件
  • 泄露秘密
  • 启动隐藏的后台进程

3.5 为什么 npm 存在漏洞

npm install=完全远程代码执行。
生命周期脚本中的任何代码都以开发者权限运行。


4. 这些攻击为何重要

供应链妥协可能导致:

  • 后门企业系统
  • 窃取云 API 密钥
  • 劫持 GitHub 仓库
  • 感染整个 CI/CD 流水线
  • 自动跨依赖树传播

即使是像Chalk这样的“小型”实用程序,每周的下载量也可能达到数十亿次——因此其影响范围非常巨大。

Shai-Hulud 2.0 甚至包含一个擦除器,如果受到干扰,它可以删除整个用户目录。


5. 如何保护您的项目

5.1 使用锁定文件和确定性安装

总是:

  • 提交package-lock.jsonyarn.lock
  • 在 CI 中使用npm ciyarn --frozen-lockfile

这样可以防止恶意版本意外更新。


5.2 禁用或限制生命周期脚本

选项:

  • npm install --ignore-scripts
  • Yarn 的脚本阻塞模式
  • pnpm 的默认阻止脚本策略
  • 类似LavaMoat 的
    工具可以用来将允许的脚本列入白名单。
  • Deno 需要显式--allow-scripts权限

5.3 使用安全运行时和沙箱

  • Deno
     → 默认安全,无任何标志禁止文件/网络访问
  • Bun
     → 没有沙盒,但内置了 CVE 扫描器
  • pnpm
     → 更安全的模块隔离,内容寻址存储

5.4 保护您的注册表帐户

  • 在 npm 上启用双因素身份验证
  • 旋转代币
  • 使用作用域 + 短生命周期令牌
  • 采用npm 出处/可信发布

5.5 定期审计依赖关系

使用:

  • npm audit
  • Snyk
  • 开源软件指数
  • GitHub 安全公告

注意:

  • 突然版本跳转
  • 新维护者
  • 最近转移的包裹
  • 安装时出现奇怪的行为

6. 比较 npm、pnpm、Bun 和 Deno 的安全性


特征
npm(Node)
迪诺
包子
pnpm
默认权限
完整的I/O和网络访问
默认沙盒环境
完全访问权限
完全访问权限
生命周期脚本
默认启用
除非允许,否则禁用。
已启用
除非批准,否则将被阻止
锁文件
package-lock.json
没有中央锁文件
bun.lockb
pnpm-lock.yaml
漏洞扫描
npm audit
没有内置功能
内置扫描仪
依赖于 npm 工具
注册表
npm 注册表
无全局注册表(URL导入)
npm 注册表
npm 注册表



7. 总结要点

2025 年的 npm 攻击事件敲响了警钟。

他们证明了:

  • 依赖项安装 = 潜在的远程代码执行
  • 即使是可信的包裹也可能被入侵。
  • 维护者账户是高价值目标
  • 整个生态系统(React、Next.js、工具库)都存在漏洞

前进的方向:

  • 封锁安装
  • 限制脚本
  • 尽量减少依赖关系
  • 采用安全的运行时环境
  • 积极审计

没有万全之策。
但多层防御措施能大大降低供应链遭受灾难性攻击的可能性。


关注「索引目录」公众号,获取更多干货。


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读12
粉丝0
内容444