Lodash存在命令注入漏洞,更新依赖后仍报错如何解决?
问题根因
你升级的是package.json中声明的顶层直接依赖,本次漏洞出现在嵌套的子依赖链路中:grunt-legacy-log、grunt-legacy-log-utils两个包本身的依赖声明限定了低版本的lodash,只要你使用的grunt相关包版本没有更新这两个子依赖的lodash版本约束,npm就会按照子依赖的要求安装低于4.17.21的lodash版本,因此升级顶层grunt等包无法消除漏洞。
可行解决方案
- 方案1:使用overrides强制嵌套依赖版本(适用于npm 8.3.0及以上版本)
在package.json中新增overrides字段,全局强制所有依赖项使用安全版本的lodash:
配置完成后执行{ "overrides": { "lodash": "^4.17.21" } }npm install重新安装依赖,再执行npm audit即可验证漏洞是否已修复。 - 方案2:使用resolutions强制版本(适用于yarn、pnpm包管理器)
若你使用yarn或pnpm作为包管理器,在package.json中新增resolutions字段:
执行对应包管理器的安装命令重新拉取依赖即可生效。{ "resolutions": { "lodash": "^4.17.21" } } - 方案3:替换低维护的依赖组件
如果强制升级lodash后出现兼容性问题,可以排查替换grunt-maven-deploy这类不再活跃维护的grunt生态组件,从根源上移除包含漏洞的依赖链路。 - 方案4:临时风险豁免
若业务代码中从未使用lodash的template函数,或者template函数的options.variable参数完全不存在用户可控的输入场景,该漏洞的实际可利用风险极低,可以在安全扫描中添加该漏洞的临时豁免,同时同步推进依赖改造。
内容的提问来源于stack exchange,提问作者user17170496
相关产品推荐
相关产品推荐

