升级npm至6.14.7后dot-prop高风险漏洞修复求助
修复npm嵌套依赖中dot-prop原型污染漏洞的方案
问题背景
你升级npm到6.14.7后执行npm audit,发现两个高风险的Prototype Pollution漏洞,涉及dot-prop包,且漏洞位于npm自身的依赖链中:
npm>libnpx>update-notifier>configstore>dot-prop
npm>update-notifier>configstore>dot-prop
你尝试直接升级项目中的dot-prop到^5.1.1但无效,这是因为这些有问题的dot-prop实例是npm内置的bundled依赖,不属于你项目的直接或间接依赖,所以项目内的升级不会影响到npm自带的嵌套依赖。
审计报告详情
命令行输出
[root@redhatdev client]# npm audit === npm audit 安全报告 === 手动审查 部分漏洞需您关注以解决 访问官方审计指南获取更多指导 高风险 Prototype Pollution 包 dot-prop 修复版本 >=5.1.1 依赖于 npm [dev] 路径 npm>libnpx>update-notifier>configstore>dot-prop 更多信息参考npm官方安全公告1213 高风险 Prototype Pollution 包 dot-prop 修复版本 >=5.1.1 依赖于 npm [dev] 路径 npm>update-notifier>configstore>dot-prop 更多信息参考npm官方安全公告1213 在1674个扫描包中发现2个高风险漏洞 2个漏洞需手动审查,查看完整报告了解详情。 [root@redhatdev client]#
完整JSON报告
{ "actions": [ { "action": "review", "module": "dot-prop", "resolves": [ { "id": 1213, "path": "npm>libnpx>update-notifier>configstore>dot-prop", "dev": true, "optional": false, "bundled": true }, { "id": 1213, "path": "npm>update-notifier>configstore>dot-prop", "dev": true, "optional": false, "bundled": true } ] } ], "advisories": { "1213": { "findings": [ { "version": "4.2.0", "paths": [ "npm>libnpx>update-notifier>configstore>dot-prop", "npm>update-notifier>configstore>dot-prop" ] } ], "id": 1213, "created": "2019-10-14T17:43:55.291Z", "updated": "2020-07-29T20:58:02.206Z", "deleted": null, "title": "Prototype Pollution", "found_by": { "link": "", "name": "Unknown", "email": "" }, "reported_by": { "link": "", "name": "Unknown", "email": "" }, "module_name": "dot-prop", "cves": [ "CVE-2020-8116" ], "vulnerable_versions": "<5.1.1", "patched_versions": ">=5.1.1", "overview": "Versions of `dot-prop` before 5.1.1 are vulnerable to prototype pollution. The function `set` does not restrict the modification of an Object's prototype, which may allow an attacker to add or modify an existing property that will exist on all objects.\n\n", "recommendation": "Upgrade to version 5.1.1 or later.", "references": "- GitHub advisory\n- CVE-2020-8116", "access": "public", "severity": "high", "cwe": "CWE-471", "metadata": { "module_type": "", "exploitability": 4, "affected_components": "" }, "url": "npm官方安全公告1213" } }, "muted": [], "metadata": { "vulnerabilities": { "info": 0, "low": 0, "moderate": 0, "high": 2, "critical": 0 }, "dependencies": 61, "devDependencies": 1612, "optionalDependencies": 31, "totalDependencies": 1674 }, "runId": "9b99170c-35c0-44b1-a0e6-8b714069a255" }
解决方案
根据你的情况,推荐以下几种解决方式,按优先级排序:
1. 升级npm到同分支的最新稳定版
npm 6.14.7之后的6.x版本已经修复了这个内置依赖的漏洞,你可以直接升级全局npm:
npm install -g npm@6-latest
升级完成后,重新运行npm audit,应该会显示漏洞已修复。
2. 使用npm-force-resolutions强制修复嵌套依赖
如果因为环境限制无法升级npm,可以用这个工具强制将所有嵌套的dot-prop实例升级到安全版本:
- 首先安装工具作为开发依赖:
npm install --save-dev npm-force-resolutions - 在你的
package.json中添加resolutions字段,指定dot-prop的安全版本:"resolutions": { "dot-prop": "^5.1.1" } - 修改
package.json的scripts,添加preinstall钩子自动执行resolution:"scripts": { "preinstall": "npx npm-force-resolutions" } - 重新安装依赖:
npm install - 最后运行
npm audit验证漏洞是否解决。
3. 忽略dev依赖漏洞(生产环境可选)
从审计报告可以看到,这些漏洞属于dev依赖(dev: true),如果你的项目是生产环境部署,dev依赖不会被安装到生产环境,所以可以安全地忽略这些漏洞。你可以运行:
npm audit --production
只检查生产依赖的漏洞,确认生产环境无风险即可。
内容的提问来源于stack exchange,提问作者Prashant Biradar
相关产品推荐
相关产品推荐

