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 相关文章推荐
JS读取cookies信息(记录用户名)
Jan 10 Javascript
循环 vs 递归浅谈
Feb 28 Javascript
JavaScript中输出标签的方法
Aug 27 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
Feb 28 Javascript
js获得当前系统日期时间的方法
May 06 Javascript
详细分析使用AngularJS编程中提交表单的方式
Jun 19 Javascript
JavaScript必看小技巧(必看)
Jun 07 Javascript
JQueryEasyUI之DataGrid数据显示
Nov 23 Javascript
vue.js iview打包上线后字体图标不显示解决办法
Jan 20 Javascript
Vue常用的全选/反选的示例代码
Feb 19 Javascript
JavaScript隐式类型转换代码实例
May 29 Javascript
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
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/10/09 PHP
PHP 创建标签云函数代码
2010/05/26 PHP
php ios推送(代码)
2013/07/01 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
斜45度寻路实现函数
2009/08/20 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
Python中的多重装饰器
2015/04/11 Python
python+opencv实现动态物体识别
2018/01/09 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
python线程池如何使用
2020/05/28 Python
班级聚会策划书
2014/01/16 职场文书
致百米运动员广播稿
2014/01/29 职场文书
助学贷款贫困证明
2014/09/23 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js