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