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/