jQuery Mobile漏洞会有跨站脚本攻击风险


Posted in Javascript onFebruary 12, 2017

jQuery Mobile漏洞会有跨站脚本攻击风险

概述

根据国外媒体的最新报道,谷歌公司的安全工程师Eduardo Vela在jQuery Mobile框架中发现了一个安全漏洞,这个漏洞将会让 所有使用了jQuery Mobile的网站暴露于跨站脚本攻击风险之下 。

jQuery Mobile项目(jQuery框架中的一个组件)是一个基于HTML5的开发框架,在它的帮助下,开发者可以设计出能够适配目前主流移动设备和桌面系统的响应式Web站点以及应用程序。实际上,jQuery Mobile不仅可以为主流移动平台提供jQuery的核心库,而且它也是一个较为完整统一的jQuery移动UI框架。根据jQuery开发团队的介绍,目前全球范围内大约有十五万个活动站点是采用jQuery Mobile开发的。

jQuery Mobile是目前一个非常热门的项目,下图显示的是Stack Overflow上关于jQuery Mobile的提问数量增长情况:

jQuery Mobile漏洞会有跨站脚本攻击风险

下图显示的是jQuery Mobile的使用统计情况:

jQuery Mobile漏洞会有跨站脚本攻击风险

漏洞描述

几个月之前,当时的Vela正在苦苦寻找内容安全策略(CSP)的绕过方法,但是在研究的过程中他注意到了jQuery Mobile的一种非常有意思的行为。jQuery Mobile会从location.hash属性中获取任意的URL地址,然后再用innerHTML来处理这个URL地址所返回的响应,而在某些特定条件下,攻击者就可以利用它的这种特性来攻击目标网站。当他发现了这种奇怪的行为之后,他便开始继续研究,以确定网站是否存在跨站脚本漏洞。

Vela在对这个XSS漏洞进行了深入分析之后给出了该漏洞的运行机制,大致如下:

1.     jQuery Mobile首先会检查location.hash属性值。

2.     如果location.hash中的数据看起来跟URL地址差不多的话,它会尝试将其添加到浏览历史记录之中(通过history.pushuState实现),然后再利用XMLHttpRequest来对其进行请求访问。

3.     接下来,它会使用innerHTML来处理服务器端的响应数据。

它首先会尝试调用history.pushState方法,这会增加一定的攻击难度,因为你无法对一个跨域的URL使用history.pushState方法。安全专家解释称,虽然从理论上来说,history.pushState方法理应能够防范XSS攻击,但如果网站存在开放重定向漏洞的话,攻击者依旧有可能利用这种安全漏洞来对目标站点实施攻击。

下面是Vela给出的demo【 代码下载 】:

http://jquery-mobile-xss.appspot.com/#/redirect?url=http://sirdarckcat.github.io/xss/img-src.html

根据安全研究专家的描述,目前有很多网站都无法抵御这种类型的攻击,因为很多组织并不认为“开放重定向”是一种安全漏洞,而需要注意的是,像谷歌( /search )、YouTube( /redirect )、Facebook( /l.php )、百度( /link )以及雅虎( /ads/pixe l)这样的热门网站都存在这种安全漏洞。

jQuery Mobile漏洞会有跨站脚本攻击风险

坏消息来了

实际上,这是一个非常简单的漏洞,想要找到这种漏洞其实也很容易。在Vela确认了该漏洞之后,他便立刻将漏洞信息上报给了jQuery Mobile的开发团队,但是当开发团队确认了该漏洞将会给用户带来的安全风险之后,Vela却被告知这个漏洞不会得到修复。

如果修复了该漏洞的话,目前很多正在运行的Web站点和应用程序都将会受到影响,这也是开发团队选择不修复该漏洞的原因之一。Vela在其发表的研究报告【 传送门 】中写到:“jQuery Mobile团队解释称,他们认为“开放重定向”是一种安全漏洞,但是jQuery Mobile的这种获取并呈现URL内容的这种行为并不是一种安全缺陷,而且如果要修复这种所谓的“安全漏洞”,那么将会使大量目前已上线的Web站点和应用程序出现异常,所以他们并不打算做任何的修改。这也就意味着,jQuery Mobile的开发团队不会就这个问题发布任何的更新补丁。而这也同样意味着,所有使用了jQuery Mobile且存在开放重定向的网站都将存在跨站脚本漏洞。”

jQuery Mobile漏洞会有跨站脚本攻击风险

如果目标网站不存在开放重定向漏洞的话,攻击者是否还可以利用这个XSS漏洞来实施攻击呢?Vela和很多其他的安全研究人员也正在进行尝试,但目前仍未取得成功。

Vela表示:“如果你有时间的话,你可以在没有开放重定向漏洞的条件下尝试去利用这个XSS漏洞来实施攻击,这也是一种研究思路。我试过很多种方法,但目前都还没有取得成功。”

总结

开放重定向(Open Redirect)是非常常见的,但它也同样会给网站和应用程序带来巨大的安全风险,因此Vela建议安全社区应该修复“开放重定向”这个功能中存在的安全问题。或者说我们应该统一思想,然后一起将其视为一种安全漏洞。如果整个安全行业在这一点无法达成一致的话,估计还有更多的XSS漏洞在等待着我们。

Javascript 相关文章推荐
JavaScript 组件之旅(二)编码实现和算法
Oct 28 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
Mar 27 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
Jun 10 Javascript
JQuery的attr 与 val区别
Jun 12 Javascript
DOM 事件的深入浅出(一)
Dec 05 Javascript
走进AngularJs之过滤器(filter)详解
Feb 17 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
Mar 10 Javascript
vue中用H5实现文件上传的方法实例代码
May 27 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
Oct 26 Javascript
vue select选择框数据变化监听方法
Aug 24 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
Mar 16 jQuery
js实现浏览器打印功能的示例代码
Jul 15 Javascript
jQuery、zepto、js常用小技巧
Feb 12 #Javascript
JS中如何实现Laravel的route函数详解
Feb 12 #Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 #Javascript
浅谈js中同名函数和同名变量的执行问题
Feb 12 #Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 #Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
Feb 12 #Javascript
浅谈jQuery中事情的动态绑定
Feb 12 #Javascript
You might like
第五节--克隆
2006/11/16 PHP
php cli 小技巧
2013/06/03 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
原生js实现放大镜组件
2021/01/22 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Sanic框架流式传输操作示例
2018/07/18 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Python实现多进程的四种方式
2019/02/22 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
Python实现图像的垂直投影示例
2020/01/17 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
行政人员岗位职责
2013/12/08 职场文书
机械专业毕业生自我鉴定2014
2014/10/04 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
python opencv通过按键采集图片源码
2021/05/20 Python
Django框架中模型的用法
2022/06/10 Python