90

我正在尝试部署我的项目,但突然出现此错误。

npm 错误!404 未找到:事件流@3.3.6

4

6 回答 6

198

tldr;

天啊!事实证明,事件流包有一个漏洞,允许黑客窃取比特币。

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

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

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

以下是 NPM 博客的官方回复:

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

11 月 26 日上午,npm 的安全团队接到通知,一个恶意程序包已进入流行的 npm 程序包 event-stream。在对恶意软件进行分类后,npm Security 通过从注册表中删除 flatmap-stream 和 event-stream@3.3.6 并取得 event-stream 包的所有权以防止进一步滥用作为回应。

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

注入的代码以 Copay 应用程序为目标。当 Copay 的开发人员运行他们的发布构建脚本之一时,生成的代码会在捆绑到应用程序之前进行修改。该代码旨在从余额超过 100 比特币或 1000 比特币现金的账户中获取账户详细信息和私钥。

Copay 最初的回应是,没有向公众发布包含此恶意代码的构建,但我们现在从 Copay 确认“恶意代码部署在 5.0.2 到 5.1.0 版本上。”</p>

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

技术细节 这里有一些我们知道的技术细节,供那些对此感兴趣的人参考。

注入的代码:

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

该模块执行了以下操作:

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

此代码将执行以下操作:

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

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

于 2018-12-02T07:29:22.960 回答
9

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

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

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

于 2019-01-03T16:40:23.893 回答
4

遵循以下方法:

  1. 删除 node_modules 和 package_lock.json 文件

  2. 运行 npm list 事件流

  3. 运行 npm 审计
  4. 运行 npm 缓存验证
  5. 运行 npm 安装
  6. 运行 git add 。(添加所需文件)
  7. 运行 git commit(提交您的更改)
  8. 运行 git push (推送你的代码)
于 2018-12-19T06:03:11.383 回答
4

正如评论中提到的,根本问题是package-lock.json(锁定文件)包含一个已弃用的包。删除锁定文件并重新安装依赖项解决了该问题。

最快的方法是这两个步骤:

  • 删除package-lock.json文件
  • 输入npm i(或npm install)重新安装依赖项
于 2020-05-01T19:40:02.713 回答
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 安装成功
于 2018-12-28T03:47:05.163 回答
2

我已经将 package.json 中的 npm-run-all 从 4.1.3 更新到 4.1.5(在锁定文件事件流中删除)然后 npm install。

于 2019-01-11T21:05:08.003 回答