BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

ESLint的NPM账户遭黑客攻击,可能窃取用户NPM访问令牌

| 作者 覃云 关注 7 他的粉丝 发布于 2018年7月17日. 估计阅读时间: 6 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

7月12日,黑客攻击了ESLint维护者的NPM帐户,并将带有病毒的eslint-scope和eslint-config-eslint软件包发布到NPM注册表中。带有恶意病毒的软件包在安装时,计算机会自动下载并执行pastebin.com代码,然后将含有NPM访问令牌的.npmrc文件内容发送给攻击者。

事件的起因是由于帐户遭到入侵的维护者在其他几个网站上设置的密码和npm上的一样,并且没有在他们的npm帐户上启用双重身份验证。

对此,ESLint团队表示:

我们对此表示遗憾,我们希望其他软件包维护者可以从我们的错误中吸取教训并提高整个npm生态系统的安全性。

恶意程序包包含在eslint-scope@3.7.2和eslint-config-eslint@5.0.2中,目前,它们都已经从npm中被移除出去了,pastebin.com在这些包中的链接也已被删除。

npm也已撤销在2018-07-12 12:30 UTC之前发出的所有访问令牌。因此,受此攻击影响的所有访问令牌都不再可用。

受影响的包

  • eslint-scope@3.7,是几个流行包的依赖项,包括一些旧版本的eslint和最新版本的babel-eslint和webpack。

  • eslint-config-eslint@5.0 是ESLint团队内部使用的配置,在其他地方使用很少。

据报道,受损版本是eslint-scope 3.7.2,是昨天发布的版本。3.7.1和4.0.0是安全的。如果你昨天已完成npm安装,请重置你的NPM令牌并再次安装npm。如果你使用了eslint-scope 3.7.2、ESLint 4或任何版本的Babel-ESLint(尚未更新到4.0.0),则会受到影响。

如果你运行自己的npm注册表,则应删除带有恶意病毒的软件包,它们在npmjs.com注册表中已经被删除了。

攻击方式:https://gist.github.com/hzoo/51cb84afdc50b14bffa6c6dc49826b3e

官方建议

  • 软件包维护者和用户应避免在多个不同的站点上重复使用相同的密码,1Password或LastPass这样的密码管理器可以帮助解决这个问题。

  • 包维护者应该启用npm双重身份验证,可参照npm上的指南(https://docs.npmjs.com/getting-started/using-two-factor-authentication)。

  • 如果你使用Lerna,则可以按此操作(https://github.com/lerna/lerna/issues/1091)。

  • 软件包维护者应审核并限制有权在npm上发布的人数。

  • 软件包维护者应注意使用任何自动合并依赖项的升级服务。

  • 应用程序开发人员应使用 lockfile(package-lock.json或yarn.lock)来阻止自动安装新软件包。

时间线

  • 事件发生之前:攻击者可能在第三方攻击中发现维护者重复使用的电子邮件和密码,并使用它们登录维护者的npm帐户。

  • 2018年7月12日凌晨:攻击者在维护者的npm帐户中生成了一个身份验证令牌。

  • 2018-07-12 9:49 UTC:攻击者使用生成的身份验证令牌发布eslint-config-eslint@5.0.2,其中包含泄露本地计算机.npmrc身份验证令牌的恶意脚本postinstall。

  • 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(https://github.com/eslint/eslint-scope/issues/39),通知ESLint团队出现此问题。

  • 2018-07-12 12:27 UTC:包含恶意代码的pastebin.com链接被删除。

  • 2018-07-12 12:37 UTC:npm团队在与ESLint维护人员联系后将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之前生成的所有访问令牌。

相关链接

原始报告:https://github.com/eslint/eslint-scope/issues/39

npm报告:https://status.npmjs.org/incidents/dn7c1fgrr7ng

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT