写点什么

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

  • 2018-07-16
  • 本文字数:1488 字

    阅读完需:约 5 分钟

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

2018-07-16 06:311699
用户头像

发布了 83 篇内容, 共 52.2 次阅读, 收获喜欢 187 次。

关注

评论

发布
暂无评论
发现更多内容

阿里P8以hashmap讲解如何学习jdk源码,还不学习

小Q

Java 学习 源码 jdk mybatis

前嗅教你大数据——什么是代理IP?

前嗅大数据

爬虫 数据采集 静态IP 代理IP 动态IP

vue项目实战经验汇总

徐小夕

Java 面试 Vue 大前端 Vue3

MySQL从库维护经验分享

Simon

MySQL 主从复制

SQL数据库:窗口函数

正向成长

窗口函数

Glide.with(view)挂在了谁的生命周期上

mengxn

生命周期 Glide Activity Fragment

国网浙江建设公司推进“信用基建+区块链”建设

CECBC

区块链 国网 基建

会装虚拟机,删库不用跑

MySQL从删库到跑路

虚拟机 virtualbox

【薪火计划】03 - 从错误中认识到管理

码上生长

管理

《网络是怎样连接的》PDF下载

计算机与AI

网络

11.11 应对海量访问的网络基石 京东智联云自研交换机发展之路

京东科技开发者

运维 网络 交换机

CSS 排版与正常流 —— 重学CSS

三钻

CSS 排版

数字货币引发的金融变革

CECBC

数字化时代

我真的尽力了,最经典Redis面试14题,没时间复习就看这个吧

小Q

redis 学习 编程 架构 面试

MySQL中的锁机制

AI乔治

Java MySQL 架构 线程 锁机制

面经手册 · 第18篇《AQS 共享锁,Semaphore、CountDownLatch,听说数据库连接池可以用到!》

小傅哥

Java 并发编程 共享锁 Semaphore 信号量

读谱对吉他手来说重要吗?试试它提升你的读谱效率

奈奈的杂社

学习 编曲 打谱

高承实:区块链的工业革命带来了什么?

CECBC

区块链 分布式

Redis 持久化之 RDB 与 AOF 详解

AI乔治

Java 架构 redis持久化 redia

什么是云服务?

anyRTC开发者

音视频 WebRTC 云服务 RTC

【活动回顾】WebRTC服务端工程实践和优化探索

ZEGO即构

WebRTC 服务端工程

什么是低代码(Low-Code)?

移动研发平台EMAS

工具 研发效能 低代码 开发 代码

智变的八个瞬间,京东智联云化“?”为“!”

脑极体

注册中心原理剖析

石刻掌纹

【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!

冰河

MySQL 数据库 性能优化 数据安全 分布式数据储存

甲方日常53

句子

工作 随笔杂谈 日常

Dubbo 接口,导出 Markdown ,这些功能 DocView 现在都有了!

程序员小航

markdown idea插件 IntelliJ IDEA 文档生成 Doc View

Nginx-技术专题-技术介绍

码界西柚

新工业化如何实现?今年的信息化百人会中藏着“懂行”密码

脑极体

Springboot过滤器和拦截器详解及使用场景

AI乔治

Java spring 架构 Spring Boot

ESLint的NPM账户遭黑客攻击,可能窃取用户NPM访问令牌_DevOps & 平台工程_覃云_InfoQ精选文章