2018 年 7 月 12 日发布的恶意软件包的事后分析

一些 ESLint 软件包的恶意版本已被发布(现已取消发布),我们对此深感抱歉。我们在此分享攻击的详细信息以及我们为软件包维护者提供的预防建议。请检查您是否未使用受影响的软件包。

摘要

2018 年 7 月 12 日,攻击者入侵了一位 ESLint 维护者的 npm 帐户,并将 eslint-scopeeslint-config-eslint 软件包的恶意版本发布到 npm 注册表。安装后,恶意软件包从 pastebin.com 下载并执行代码,该代码将用户 .npmrc 文件的内容发送给攻击者。.npmrc 文件通常包含用于发布到 npm 的访问令牌。

恶意软件包版本为 eslint-scope@3.7.2eslint-config-eslint@5.0.2,均已从 npm 取消发布。这些软件包中链接的 pastebin.com 粘贴也已被删除。

npm 已撤销 2018-07-12 12:30 UTC 之前发布的所有访问令牌。因此,此次攻击泄露的所有访问令牌应不再可用。

帐户被盗的维护者在多个其他站点上重复使用了他们的 npm 密码,并且没有在其 npm 帐户上启用双因素身份验证。

我们 ESLint 团队对发生此事深感抱歉。我们希望其他软件包维护者可以从我们的错误中吸取教训,并提高整个 npm 生态系统的安全性。

受影响的软件包

如果您运行自己的 npm 注册表,则应取消发布每个软件包的恶意版本。它们已从 npmjs.com 注册表中取消发布。

攻击方法

有关攻击的更多详细信息,请参见 此处

建议

吸取此次事件的教训,我们对未来的 npm 软件包维护者和用户提出以下建议

  • 软件包维护者和用户应避免在多个不同的站点上重复使用相同的密码。像 1PasswordLastPass 这样的密码管理器可以帮助解决此问题。
  • 软件包维护者应启用 npm 双因素身份验证。npm 有一个 指南
    • 如果您使用 Lerna,则可以关注此 问题
  • 软件包维护者应审核并限制有权在 npm 上发布的人员数量。
  • 软件包维护者应谨慎使用任何自动合并依赖项升级的服务。
  • 应用程序开发人员应使用锁定文件(package-lock.jsonyarn.lock)来防止自动安装新软件包。

时间线

  • 事件发生前:攻击者大概在第三方泄露事件中找到了维护者重复使用的电子邮件和密码,并使用它们登录了维护者的 npm 帐户。
  • 2018 年 7 月 12 日凌晨:攻击者在维护者的 npm 帐户中生成了一个身份验证令牌。
  • 2018-07-12 9:49 UTC:攻击者使用生成的身份验证令牌发布了 eslint-config-eslint@5.0.2,其中包含一个恶意的 postinstall 脚本,该脚本尝试盗取本地计算机的 .npmrc 身份验证令牌。
  • 2018-07-12 10:25 UTC:攻击者取消发布了 eslint-config-eslint@5.0.2
  • 2018-07-12 10:40 UTC:攻击者发布了 eslint-scope@3.7.2,其中包含相同的恶意 postinstall 脚本。
  • 2018-07-12 11:17 UTC:一位用户发布了 eslint/eslint-scope#39,通知 ESLint 团队该问题。
  • 2018-07-12 12:27 UTC:包含恶意代码的 pastebin.com 链接被删除。
  • 2018-07-12 12:37 UTC:在收到 ESLint 维护者的联系后,npm 团队取消发布了 eslint-scope@3.7.2
  • 2018-07-12 17:41 UTC:ESLint 团队发布了 eslint-scope@3.7.3,其中包含来自 eslint-scope@3.7.1 的代码,以便缓存可以获取新版本。
  • 2018-07-12 18:42 UTC:npm 撤销了 2018-07-12 12:30 UTC 之前生成的所有访问令牌。

最新的 ESLint 新闻、案例研究、教程和资源。

Evolving flat config with extends
5 分钟阅读

使用 extends 改进扁平化配置

您的 eslint.config.js 文件现在可以使用 extends 来简化您的配置。

ESLint v9.22.0 released
1 分钟阅读

ESLint v9.22.0 发布

我们刚刚推送了 ESLint v9.22.0,这是一个 ESLint 的次要版本升级。此版本添加了一些新功能,并修复了之前版本中发现的几个错误。

ESLint v9.21.0 released
2 分钟阅读

ESLint v9.21.0 发布

我们刚刚推送了 ESLint v9.21.0,这是一个 ESLint 的次要版本升级。此版本添加了一些新功能,并修复了之前版本中发现的几个错误。