如何手动修复npm漏洞?


98

当我运行npm install它说found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details

但是,npm audit fix输出up to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

这是否review意味着它不应该由用户修复?

当我运行npm audit它时,它会给我表的列表,类似于此:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.17.5                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ browser-sync [dev]                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ browser-sync > easy-extender > lodash                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/577                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

在此示例中,链接页面的补救部分说Update to version 4.17.5 or later.。但是,/node_modules/browser-sync/package.json其中有几行:

"devDependencies": {
    "lodash-cli": "4.17.5",
}

不再有lodash依赖项。因此它应该已经是v4.17.5。我还检查了/node_modules/lodash/lodash.jsonvar VERSION = '4.17.10';条线。在/node_modules/lodash/package.json有这些线路:

  "_from": "lodash@^4.17.4",
  "_id": "lodash@4.17.10",

我认为该版本显示在“ _id”中,而不是在“ _from”中,因此版本是正确的,但漏洞仍会出现在审核列表中。

我仍然是node.js的新手,这些消息使我非常困惑。有什么办法可以手动修复它或摆脱那些消息,我无能为力?


Answers:


35

lodash-cliindevDependencies不会影响browser-sync项目的工作方式,devDependencies将软件包作为依赖项安装时将被忽略。

什么audit报告说的是,这是easy-extenderlodash依赖性:

browser-sync > easy-extender > lodash        

取决于Lodash 3,而该问题已在Lodash 4中得到解决。可以通过分叉easy-extender,更新和安装它来代替NPM公共注册表中的软件包来解决此问题。但是这种依赖性没有真正的问题。

audit报告重要性应手动评估。即使嵌套的依赖项具有安全风险,也并不意味着已使用引入此风险的功能。这也不意味着即使使用它,也会由于使用方式而带来实际风险。

browser-sync是在生产中不使用的开发工具,没有太多可以利用其漏洞的方案。和原型污染是不是所有漏洞,只是一个通知,一包不遵循良好的做法,可以忽略不计。

通常,这是修复报告的漏洞的方法:

  • 做一个健全性检查
  • 如果是真正的问题,请检查易受攻击软件包的存储库以获取现有问题PR
  • 如果没有,请提交问题
  • 分叉存储库或使用现有PR作为git依赖项,直到在NPM版本中对其进行修复
  • 如果嵌套依赖项,则在多个嵌套级别上执行此操作

多数情况下,预计您不会超越健全性检查标准。

patch-package可以帮助就地修补嵌套的依赖关系,但这不会影响audit报告。


我没有注意“路径”部分,确实使用了lodash v3.10.1,谢谢。但是浏览器同步仅是示例,是列表的最后一个。因此,我可以忽略2个低漏洞,但是我可以忽略31个中度漏洞吗?我想我不应该在中修改任何内容node_modules,所以分叉和修复是摆脱它们的唯一方法吗?作为新用户,我没有能力做到这一点?我应该向软件包开发者发布有关它们的信息吗?
雅库波夫

4
但是我可以忽略31个中度的吗?-这就是“健全性检查”的意义,请根据您的判断。您对这些报告实际上所说的话越关注,就安全性而言,您可以成为更好的开发人员。我应该向软件包开发者发布有关它们的信息吗?-您可能应该(至少要闭嘴audit)回答。人们生活在npm audit某种程度上。它们对应用程序造成真正的安全问题的可能性很小,但是在不知道它们是什么以及如何在您的应用程序中使用它们的情况下,我无法保证。
Estus Flask,

谢谢!花时间写评论,所以评论前没有看到编辑过的部分。
雅库波夫


3

'npm audit fix'将增加package.json中依赖项的版本,这可能会导致代码中断。因此,更好的方法是打开package-lock.json并将依赖关系/子依赖关系版本更新为所需版本。在存储库中维护package-lock.json。

有时,这些漏洞来自开发人员软件包,在这种情况下,请忽略这些漏洞,因为这些漏洞不会在生产中被发现。


-3

我的系统中发生的大多数问题是由于npm软件包引起的。我试过了,

npm un npm

您无需再次安装。

再次运行程序。它为我工作。

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.