【5天打卡】学习Lodash的第四天——安全漏洞学习

安全漏洞的问题一直是大家关心的问题,仿佛是巧合,在云视频会议服务提供商 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() 返回和传入的参数相同的对象。

  1. Object.freeze(Object.prototype);
  2. 使用无原型对象Object.create(null);
  3. 建立一个名单专门用来存储敏感属性,遇到时过滤它;
  4. 使用一些第三方工具来检验代码的安全性,比如Snyk、JFrog Xray;

参考学习:Lodash库爆出严重安全漏洞,波及400万+项目

Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识 - 知乎

jQuery和lodash导致原型污染的安全问题_My_Bells的博客-CSDN博客

以上就就是今天的学习,关注我,大家一起进步!~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值