jQuery原型污染漏洞安全通告
发布时间 2019-04-24漏洞编号和级别
CVE编号:CVE-2019-11358,危险级别:中危,CVSS分值:6.1
jQuery version 1.x, 2.x,3.x
漏洞概述
jQuery是一个快速、小巧、功能丰富的JavaScript库。它通过易于使用的API在大量浏览器中运行,使得HTML文档遍历和操作、事件处理、动画和Ajax变得更加简单。通过多功能性和可扩展性的结合,jQuery改变了数百万人编写JavaScript的方式,它应用于70%的互联网站点中。
jQuery库修复罕见的原型污染漏洞。原型污染漏洞指的是攻击者修改 JavaScript对象原型的能力。JavaScript对象就像变量一样,但存储的并非一个值 (var car = “Fiat”),而是能够包含基于预设结构的多个值(var car ={type:"Fiat", model:"500", color:"white"})。
原型定义了JavaScript 对象的默认结构和默认值,因此当未设置值时,应用程序不会崩溃。原型污染攻击可导致攻击者覆写 JavaScript 应用程序对象原型。由攻击者控制的属性可被注入对象,之后或经由触发JavaScript异常引发拒绝服务,或篡改该应用程序源代码从而强制执行攻击者注入的代码路径。
原型污染漏洞并未可大规模被利用的漏洞,因为漏洞要利用成功,需要攻击者非常了解具体代码的结构,需要攻击者深入了解每个网站和对象原型的运作方式以及这些原型如何在庞大的图式中进行分解,然后构造合适的利用方法才能成功。一般闭源的网站系统,攻击者很难深入了解从而构造利用代码,所以几乎不受此漏洞攻击。
漏洞验证
漏洞POC:https://github.com/jquery/jquery/pull/4333。
./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.4.0版本:https://blog.jquery.com/2019/04/10/jquery-3-4-0-released/。
(2)jQuery version 2.x和1.x 修复方案
补丁链接:https://github.com/DanielRuf/snyk-js-jquery-174006?files=1。
参考链接
https://snyk.io/blog/after-three-years-of-silence-a-new-jquery-prototype-pollution-vulnerability-emerges-once-again/


京公网安备11010802024551号