jquerycve-2019-11358原型污染漏洞分析和修复建议(代码片段)

h2zzhou h2zzhou     2022-12-01     154

关键词:

一、安全通告

jQuery官方于日前发布安全预警通告,通报了漏洞编号为 CVE-2019-11358的原型污染漏洞。由攻击者控制的属性可被注入对象,之后或经由触发 JavaScript 异常引发拒绝服务,或篡改该应用程序源代码从而强制执行攻击者注入的代码路径。奇安信代码卫士将持续关注该漏洞进展,并第一时间为您更新该漏洞信息。

二、文档信息

文档名称jQuery CVE-2019-11358原型污染漏洞
关键字 jQuery,原型污染
发布日期 2019年4月23日
分析团队 奇安信代码卫士

 三、漏洞信息

3.1 漏洞分析

./src/core.js 第155行:

if ((options = arguments[ i ]) != null) 

options 取传入的参数 arguments[i] ,而后第158 、159 行:

for (name in options)                       
                      copy= options [name];

 

name、copy值进而可以受输入控制。

 

最后,在第183行:

target[name] = jQuery.extend (deep,clone, copy);

 

在第187行:

target[name] = copy;

 

如果 name 可以为 __proto__ ,则会向上影响target 的原型,进而覆盖造成原型污染。

 

target 在第127行:

target = arguments[ ">0 ] || ,

 

3.2 风险评估

 

漏洞本身是高危漏洞,但利用难度比较大。原型污染漏洞并未可大规模被利用的漏洞,因为漏洞要利用成功,需要攻击者非常了解具体代码的结构,需要攻击者深入了解每个网站和对象原型的运作方式以及这些原型如何在庞大的图式中进行分解,然后构造合适的利用方法才能成功。一般闭源的网站系统,攻击者很难深入了解从而构造利用代码,所以几乎不受此漏洞攻击。

 

四、修复方案

 

(1)jQuery version 3.x 修复方案

 

升级到最新的3.4.0版本。

 

(2)jQuery version 2.x 修复方案

$ diff jquery-2.2.4.js jquery-2.2.4-patch.js 
213c213,214
<         if (target === copy) 
---
>         // Prevent Object.prototype pollution
>         if (name === "__proto__" || target === copy) 

 

(3)jQuery version 1.x 修复方案

$ diff jquery-1.12.4.js jquery-1.12.4-patch.js 
213c213,214
<         if (target === copy) 
---
>         // Prevent Object.prototype pollution
>         if (name === "__proto__" || target === copy) 

[effectivejavascript笔记]第44条:使用null原型以防止原型污染

...实例,也无法完全避免,Object.prototype对象修改,造成的原型污染。防止原型污染最简单的方式之一就是不使用原型。在ES5之前,并没有标准的方式创建一个空原型的新对象。尝试设置构造函数的原型属性为null或undefinedfunctionC(){}... 查看详情

text可以将任何污染转换为无污染值的原型(代码片段)

查看详情

npm 审计修复后如何解决原型污染 lodash 需要人工审核

】npm审计修复后如何解决原型污染lodash需要人工审核【英文标题】:howtosolvePrototypePollutionlodashafternpmauditfixrequiresmanualreview【发布时间】:2019-09-1023:46:57【问题描述】:当我执行npmaudit时,它给了我这个链接,说我必须在我的NODEJS... 查看详情

[effectivejavascript笔记]第45条:使用hasownproperty方法以避免原型污染

...44条讨论了属性的枚举,但都没有彻底地解决属性查找中原型污染的问题。看下面关于字典的一些操作‘zhangsan‘indict;dict.zhangsan;dict.zhangsan=22;js的对象操作总是经继承的方式工作的。即使是一个空的对象字面量也是继承了Object.pro... 查看详情

javascript原型链污染学习记录(代码片段)

NodeJS原型机制,比较官方的定义:我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。1.JS原型和继承机制0>原型及... 查看详情

原型讲解二:原型是干什么用的

前面说了这么多的原型的概念,那么原型用在哪里呢?之前说过,直接在构造函数外面定义一个函数方法,势必会造成全局的变量污染,那么怎么避免这个问题呢?那么就要涉及到在原型上面定义一个方法了:范例:functionPerson(... 查看详情

2017年6月21号课堂笔记

...雷阵雨空气质量:中度污染~轻度污染内容: JavaScript原型式面向对象01基于Object的对象的方式创建对象;02使用字面量赋值方式创建对象03构造函数;04原型对象;05原型链备注:老师休养回来第二节课,希望他手术的伤口尽快... 查看详情

javascript继承

        1原型链继承 1原型链继承要点:原型对象等于另一个类型的实例           缺点:子类型不同的实例之间会共享,造成污染functionSuperType(){ this.pr 查看详情

js高级——歌曲管理

1、将歌曲管理的CURD方法放到原型中2、在构造函数中,我们只有一个属性是songList,因为音乐库不是共有的,如果将songList放入原型中,任何一个人的一次修改songList,都将把songList改变,下一个人new出来的songList就会不一样3、将C... 查看详情

6.python查漏补缺,namedtuple命名元组,双向队列deque,counter计数器,可排序字典(代码片段)

...竟这个知识点可以极大的提高元组使用。命名元组的函数原型如下:namedtuple(typename,field_names,*,rename=False,defaults=None,module=None)下面依旧是对各个参数的说明:ty 查看详情

原型链,闭包与继承

闭包的好处:1.不会污染全局环境;2.可以进行形参的记忆,减少形参的个数,延长形参生命周期;function add(x)            return function(y)         &... 查看详情

textmetaobjects污染和无污染(代码片段)

查看详情

javascript语言精粹

...句表达式字面量函数第3章对象对象字面量检索更新引用原型反射枚举删除减少全局变量污染第4章函数函数对象函数字面量调用参数返回异常扩充类型的功能递归作用域闭包回调模块级联柯里化记忆第5章继承伪类对象说明符原型... 查看详情

漏.洞扫描-端口扫描

查看详情

开漏输出

http://blog.chinaunix.net/uid-23065002-id-3885199.htmlSTM32配置为开漏输出(上图)时:输出0,N-MOS导通,IO引脚是低电平;输出1,N-MOS不导通,IO引脚是高阻态(P-MOS从不被激活)。所以配置为开漏模式时要想IO引脚输出0和1,必须外加上拉电... 查看详情

什么是开漏输出

开漏输出:OC门的输出就是开漏输出;OD门的输出也是开漏输出。TTL电路有集电极开路OC门,MOS管也有和集电极对应的漏极开路的OD门,它的输出就叫做开漏输出。它可以吸收很大的电流,但是不能向外输出电流。所以,为了能输入... 查看详情

javascript查漏补缺—数组中reduce()方法

【JavaScript】查漏补缺—数组中reduce()方法 查看详情

dotnet 中的污染流分析

】dotnet中的污染流分析【英文标题】:Taintflowanalysisindotnet【发布时间】:2015-04-2923:46:04【问题描述】:我想在dotnet字节码中进行污染流分析。我想在给定的dotnet字节码中找到所有受污染的源,然后在其中找到受这些受污染源影... 查看详情