Lodash库原型传染缝隙(CVE-2019-10744)

颁布功夫 2019-07-12

宝运莱·(中国区)最新官方网站


布景描述


Lodash 是一个 JavaScript 库,蕴含简化字符串、数字、数组、函数和对象编程的工具,能够援手法式员更有效地编写和守护 JavaScript 代码。并且是一个盛行的 npm 库,仅在GitHub 上就有超过 400 万个项目使用,Lodash的遍及率极度高,每月的下载量超过 8000 万次。近期被爆出一个严沉的原型传染缝隙。


缝隙列表


CVE ID  :   CVE-2019-10744
缝隙等级:   高危
CVSS评分:   7.3
影响领域:   4.17.11之前的所有版本

缝隙详情


通过机关函数沉载的方式,Lodash 库中的函数 defaultsDeep 很有可能会被糊弄增长或批改 Object.prototype 的属性,最终可能导致 Web 利用法式崩�;蚺ぷ湫形�,具体取决于受影响的用例。


Pony by Snyk


宝运莱·(中国区)最新官方网站

原型传染是一个影响 JavaScript 的缝隙。原型传染是指将属性注入现有 JavaScript 说话机关原型(如对象)的能力。JavaScript 允许所有对象属性被更改,例如如_proto_,constructor和prototype。攻击者通过注入其它致反把持这些属性来覆盖或传染基础对象的 JavaScript 利用法式对象原型。这样很可能会影响利用法式通过原型链处置 JavaScript 对象的过程,从而导致回绝服务或远程代码执行。


原型传染的两种重要方式:


不安全的Object递归归并


按蹊径界说属性


不安全的对象递归归并


易受攻击的递归归并函数的逻辑遵循以下高级模型:

宝运莱·(中国区)最新官方网站
当源对象蕴含名为_proto_defined with Object.defineProperty()的属性时,查抄属性是否存在并且是指标和源传递上的对象的前提,并且归并将与指标进行递归,作为原型Object和源的Object界说。

而后攻击者在 Object 原型上复造属性。


克隆操作是一个特殊的不安全递归归并子类,它产生在对空对象进行递归归并时:merge({},source)。


lodash 和 Hoek 是易受递归归并攻击影响。


按蹊径界说属性


有一些 JavaScript 库使用 API 凭据给定蹊径界说对象的属性值。通常受影响的函数蕴含此署名:theFunction(object, path, value)

若是攻击者能够节造“蹊径”的值,则能够将此值设置为_proto_.myValue。

防范措施


冻结  Object.prototype ,使原型不能扩充属性

成立 JSON schema

躲避不安全的递归性归并函数

使用无原型对象,突破原型链并预防传染。

选取新的 Map 数据类型,包办 Object 类型


固然原型传染缝隙影响极度严沉,但是攻击者想要利用它并没有那么容易,他们必要深刻相始个 Web 利用的工作道理。

建复建议


建议升级lodash到4.17.12


参考链接


https://snyk.io/blog/snyk-research-team-discovers-severe-prototype-pollution-security-vulnerabilities-affecting-all-versions-of-lodash/
https://snyk.io/vuln/SNYK-JS-LODASH-450202
https://snyk.io/blog/snyk-research-team-discovers-severe-prototype-pollution-security-vulnerabilities-affecting-all-versions-of-lodash/
https://snyk-rules-pre-repository.s3.amazonaws.com/snapshots/master/patches/npm/lodash/20190702/lodash_20190702_0_0_1f8ea07746963a535385a5befc19fa687a627d2b.patch