1、基本情况
jQuery存在原型污染漏洞,CVE编号:CVE-2019-11358。攻击者通过控制属性来注入对象,然后经由触发JavaScript异常引发拒绝服务,或篡改该应用程序源代码从而强制执行攻击者注入的代码路径。
2、攻击原理
jQuery是美国John Resig程序员的一套开源、跨浏览器的JavaScript库。该库简化了HTML与JavaScript之间的操作,并具有模块化、插件扩展等特点。 jQuery官方发布安全预警通告,通报了漏洞编号为 CVE-2019-11358的原型污染漏洞。由攻击者控制的属性可被注入对象,之后或经由触发 JavaScript 异常引发拒绝服务,或篡改该应用程序源代码从而强制执行攻击者注入的代码路径。
下面是对该漏洞的分析:
1)./src/core.js 第155行:
if ((options = arguments[ i ]) != null) {
2)options 取传入的参数 arguments[i],而后第158 、159 行:
for (name in options) {
copy= options [name];
name、copy值进而可以受输入控制。
3)最后,在第183行:
target[name] = jQuery.extend (deep,clone, copy);
4)在第187行:
target[name] = copy;
如果 name 可以为 __proto__,则会向上影响target 的原型,进而覆盖造成原型污染。
5)target 在第127行:
target = arguments[ 0 ] || {},
3、影响范围
受影响的版本:
jQuery version 1.x
jQuery version 2.x
jQuery version 3.x
4、处置建议
因修复难度较低,也不影响正常功能,建议尽快修复。修复方案如下:
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) {
5、参考链接
1) https://nvd.nist.gov/vuln/detail/CVE-2019-11358
2) https://blog.jquery.com/2019/04/10/jquery-3-4-0-released/