npm ERR!找不到404:event-stream@3.3.6


Answers:


189

tldr;

天啊!事实证明,事件流软件包具有一个漏洞,该漏洞使黑客能够窃取比特币。

要修复它,您需要更新您的event-stream软件包。

  1. 删除node_modules文件夹。
  2. 删除package-lock.json文件。
  3. 运行npm install

这应该将您的软件包更新为安全版本,您应该一切顺利。

这是NPM博客的官方回复:

有关事件流事件的详细信息这是对事件流事件的分析,本周早些时候您中许多人已经意识到了这一点。npm立即采取行动来解决影响我们社区安全的运营问题和问题,但是我们通常在讨论事件之前进行更彻底的分析-我们知道您一直在等待。

11月26日上午,npm的安全团队收到了一个恶意软件包的通知,该软件包已进入事件流(流行的npm软件包)。在对恶意软件进行分类之后,npm Security的响应是从注册表中删除了flatmap-stream和event-stream@3.3.6,并拥有事件流包的所有权,以防止进一步滥用。

恶意软件包是flatmap-stream的0.1.1版。该软件包是新维护者于2018年9月9日在版本3.3.6中添加为事件流软件包的直接依赖项。事件流软件包已被广泛使用,但是恶意代码针对的是开发环境非常具体的公司的开发人员:在任何其他环境中运行有效负载均无效。这种特定的目标意味着最终,即使大多数开发人员错误地安装了恶意模块,也不会受到影响。

注入的代码针对Copay应用程序。当Copay的开发人员运行其发行版本的脚本之一时,将修改结果代码,然后将其捆绑到应用程序中。该代码旨在从余额超过100比特币或1000比特币现金的帐户中获取帐户详细信息和私钥。

Copay的最初回应是没有将包含此恶意代码的内部版本发布给公众,但是Copay现已确认“该恶意代码已部署在5.0.2至5.1.0版本中”。

攻击该攻击最初是一种社会工程攻击。冒充维护者的攻击者接手了事件流模块的维护工作。

技术细节以下是一些我们感兴趣的技术细节。

注入的代码:

从伪装成测试夹具的文件中读取AES加密数据,使用自动设置的环境变量来抓取导入该模块的模块的npm软件包描述。将该软件包描述用作密钥,以解密从伪装文件中提取的数据块解密后的数据是模块的一部分,然后将其编译到内存中并执行。

该模块执行以下操作:

从伪装的文件中解密另一个数据块从第一个解密的块到第二个解密的块的末尾连接一个注释的小前缀执行较小的解码任务,以将连接的代码块从无效JS转换为有效JS(我们认为这是这样做是为了逃避动态分析工具的检测)将这个经过处理的JS块写到一个存储在依赖关系中的文件中,该依赖关系将由构建脚本打包:所写出的代码块是打算运行的实际恶意代码。在Copay最终用户拥有的设备上。

此代码将执行以下操作:

检测当前环境:Mobile / Cordova / Electron检查受害者的共付额帐户上的比特币和比特币现金余额如果当前余额大于100比特币或1000比特币现金:完全收获受害者的帐户数据收获受害者的共付额私人密钥将受害者的帐户数据/私钥发送到运行在111.90.151.134上的收集服务。对于Copay应用程序的用户,bitpay建议:“如果您使用的是5.0.2到5.1.0之间的任何版本,则不应运行或打开Copay应用程序。”

对于npm用户,您可以通过运行npm audit检查项目是否包含易受攻击的依赖项。如果您已安装此事件流的受影响版本,建议您尽快更新到更高版本。


7
或者只是做npm list event-stream并更新任何顶级程序包
Phil

4
删除包锁听起来是个坏主意。请分享NPM博客文章的链接。
pronebird

哇。是否有您所引用文章的链接?编辑-找到它:blog.npmjs.org/post/180565383195/...
friederbluemle

7

实际上,我们不需要更新所有依赖于event-stream@3.3.6的软件包。

您可以打开package-lock.json,删除所有事件流引用,然后npm install再次调用。会更快。

之后,npm shrinkwrap && mv npm-shrinwrap.json package-lock.json应仅更新事件流引用,而不是整个文件


4

请遵循以下方法:

  1. 删除node_modules和package_lock.json文件

  2. 运行npm list事件流

  3. 运行npm审核
  4. 运行npm缓存验证
  5. 运行npm install
  6. 运行git add。(添加所需文件)
  7. 运行git commit(提交更改)
  8. 运行git push(推送您的代码)

3

我通过以下步骤解决此问题:

  1. 在/node_cache/_logs/xxxx-xx-xxx-debug.log中打开此错误的最新日志
  2. 找出event-stream叶的根 ,例如:


    45 silly saveTree +-- nodemon@1.18.4
    45 silly saveTree | +-- chokidar@2.0.4
    45 silly saveTree | +-- pstree.remy@1.1.0
    45 silly saveTree | | `-- ps-tree@1.2.0
    45 silly saveTree | |   `-- event-stream@3.3.6
    45 silly saveTree | |     +-- duplexer@0.1.1
    45 silly saveTree | |     +-- from@0.1.7
    45 silly saveTree | |     +-- pause-stream@0.0.11
    45 silly saveTree | |     `-- split@0.3.3

  1. 在这种情况下,根目录为nodemon,因此您可以通过以下方式修复:npm install nodemon@1.18.4
  2. npm立即成功安装

2

我已经将package.json中的npm-run-all从4.1.3更新为4.1.5(删除了锁定文件事件流),然后安装了npm。


2

如评论中所述,根本问题是package-lock.json(锁文件)包含不推荐使用的软件包。删除锁文件并重新安装依赖项可以解决此问题。

最快的方法是以下两个步骤:

  • 删除package-lock.json文件
  • 键入npm i(或npm install)以重新安装依赖项
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.