安全漏洞的问题一直是大家关心的问题,仿佛是巧合,在云视频会议服务提供商 Zoom 刚刚被爆出存在”零日漏洞“威胁 Mac 用户隐私和信息安全的同时,开发者熟知的 npm 库 Lodash 也被爆出存在高严重性安全漏洞——”原型污染“漏洞,该漏洞将威胁超过 400 万个项目的服务安全性。
目录
漏洞原因
lodash 版本4.7.12(4.7.12及以后版本已修复)之前defaultsDeep函数会污染原型。
解决方法:
JQuery的安全漏洞了解:
jquery3.4.0(3.4.0及以后版本已修复)之前版本中extend函数会导致原型污染
避免原型污染有以下几种方法:
所以我们一起来学习Lodash,今天打卡第四天,加油!
Lodash 是一款流行的 npm 库,GitHub 上使用它的项目就多于 400 万。昨天,开源安全平台 Snyk 的开发者 Liran Tal 发现了一个高严重性的原型污染漏洞,影响所有版本的 Lodash,包括最新版本 4.17.11。该漏洞对使用 Lodash 的用户群和服务安全性造成极大威胁。
该漏洞被指定为 CVE-2019-10744,可能会影响大量的前端项目。因为 Lodash 的普及率非常高,每月的下载量超过 8000 万次。
漏洞原因
其实漏洞很简单,举一个例子:lodash 中 defaultsDeep 方法,
_.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } })
输出:
{ 'a': { 'b': 2, 'c': 3 } }
如上例,该方法:
分配来源对象(该方法的第二个参数)的可枚举属性到目标对象(该方法的第一个参数)所有解析为 undefined 的属性上
这样的操作存在的隐患:
const payload = '{"constructor": {"prototype": {"toString": true}}}'
_.defaultsDeep({}, JSON.parse(payload))
如此一来,就触发了原型污染。原型污染是指:
攻击者通过某种手段修改 JavaScript 对象的原型(prototype)
对应上例,Object.prototype.toString
就会非常不安全了。
const payload = '{"constructor": {"prototype": {"lodash": true}}}'
_.defaultsDeep({}, JSON.parse(payload))
console.log({}.lodash); // lodash4.7.12版本前会输出true
lodash 版本4.7.12(4.7.12及以后版本已修复)之前defaultsDeep函数会污染原型。
解决方法:
在遍历 merge 时,当遇见 constructor 以及 __proto__ 敏感属性,则退出程序。
lodash修复原型PR
lodash修复原型PR 2
JQuery的安全漏洞了解:
这就让人联想到jquery的安全漏洞:
对于 jQuery:如果担心安全问题,建议升级至最新版本 jQuery 3.4.0,如果还在使用 jQuery 的 1.x 和 2.x 版本,那么你的应用程序和网站仍有可能遭受攻击。
let a = $.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}'))
console.log({}.devMode); // jquery3.4.0版本前会输出true
jquery3.4.0(3.4.0及以后版本已修复)之前版本中extend函数会导致原型污染
解决方法:在遍历对象时,当遇见 __proto__ 敏感属性,则退出程序。
jQuery 修复原型污染 PR
避免原型污染有以下几种方法:
冻结 Object.prototype,使原型不能扩充属性
Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。
- Object.freeze(Object.prototype);
- 使用无原型对象Object.create(null);
- 建立一个名单专门用来存储敏感属性,遇到时过滤它;
- 使用一些第三方工具来检验代码的安全性,比如Snyk、JFrog Xray;
参考学习:Lodash库爆出严重安全漏洞,波及400万+项目
Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识 - 知乎文章来源:https://www.toymoban.com/news/detail-427201.html
jQuery和lodash导致原型污染的安全问题_My_Bells的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-427201.html
以上就就是今天的学习,关注我,大家一起进步!~
到了这里,关于【5天打卡】学习Lodash的第四天——安全要牢记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!