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 ] || {}


建复建议


(1)jQuery version 3.x 建复规划
升级到最新的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://www.zdnet.com/article/popular-jquery-javascript-library-impacted-by-prototype-pollution-flaw/ 
https://snyk.io/blog/after-three-years-of-silence-a-new-jquery-prototype-pollution-vulnerability-emerges-once-again/