我正在尝试部署我的项目,但突然出现了这个错误。
npm ERR!404未找到:event-stream@3.3.6
tldr;
天哪!事实证明,事件流包存在漏洞,黑客可以窃取比特币。
若要修复此问题,您需要更新event-stream
软件包。
- 删除
node_modules
文件夹 - 删除
package-lock.json
文件 - 运行
npm install
这应该会将您的软件包更新到安全版本,您应该可以继续使用。
以下是NPM博客的官方回应:
事件流事件的详细信息这是对事件流事件,你们中的许多人在早些时候就意识到了这一点周npm立即采取行动,解决运营方面的关切和问题影响我们社区的安全,但我们通常表现得更出色在讨论事件之前进行彻底的分析——我们知道你等待。
11月26日上午,npm的安全团队接到通知进入事件流的恶意程序包npm包。在试用恶意软件后,npm Security的回应是删除平面图流和event-stream@3.3.6注册处和取得事件流包的所有权以防止进一步滥用。
该恶意软件包是平面图流的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块输出到存储在依赖项中的文件由构建脚本打包:编写的代码块out是实际的恶意代码,打算在拥有的设备上运行Copay的最终用户。
此代码将执行以下操作:
检测当前环境:Mobile/Cordova/Electron检查受害者自付垫底账户上的比特币和比特币现金余额如果当前余额大于100比特币或1000比特币现金:完整获取受害者的账户数据获取受害者的自付垫底费私钥将受害者的帐户数据/私钥发送到收集服务运行于111.910.151.134。对于Copay的用户bitpay建议,"如果你使用的是5.0.2到5.1.0,您不应该运行或打开Copay应用程序。">
对于npm用户,您可以检查您的项目是否包含易受攻击的通过运行npm审核实现依赖性。如果您已安装受影响的此事件流的版本,建议您更新到更高版本版本。
实际上,我们不需要更新依赖于event-stream@3.3.6.
您可以打开package-lock.json
,删除所有事件流引用,然后再次调用npm install
。它会更快。
之后,npm shrinkwrap && mv npm-shrinwrap.json package-lock.json
应该只更新事件流引用,而不是整个文件
遵循以下方法:
-
删除node_modules和package_lock.json文件
-
运行npm列表事件流
- 运行npm审核
- 运行npm缓存验证
- 运行npm安装
- 运行git add。(添加所需文件)
- 运行git-commit(提交更改)
- 运行git-push(推送代码)
如注释中所述,根本问题是package-lock.json
(锁定文件)包含一个不推荐使用的包。删除锁定文件并重新安装依赖项解决了问题。
最快的方法是这两个步骤:
- 删除
package-lock.json
文件 - 键入
npm i
(或npm install
)以重新安装依赖项
我通过以下步骤解决了这个问题:
- 在/nod_cache/_logs/xxxx-xx-xxx-debug.log中打开此错误的最新日志
- 找出
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
- 在这种情况下,根是nodemon,因此您可以通过以下方式进行修复:npm installnodemon@1.18.4
- 现在npm安装成功
我已经在package.json中将npm run all从4.1.3更新到4.1.5(在锁文件事件流中删除)然后安装npm。